diff --git a/.gitignore b/.gitignore
index 5cb66fb..c3d6973 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,7 +6,6 @@ __pycache__/
.Python
build/
develop-eggs/
-dist/
downloads/
eggs/
.eggs/
@@ -39,8 +38,6 @@ export/
logs/
# 环境变量
-.env
-.env.local
# 测试
.pytest_cache/
diff --git a/README.md b/README.md
index 5400a5a..0667c86 100644
--- a/README.md
+++ b/README.md
@@ -110,9 +110,6 @@ python -m cli.main \
- `run_etl.sh`:Linux/macOS 启动脚本(需先 `cd etl_billiards`;会加载当前目录 `.env`)。
### app/
-- `app/etl_busy.py`:忙时 ETL 示例函数(TODO,占位)。
-- `app/etl_idle.py`:闲时 ETL 示例函数(TODO,占位)。
-- `app/runner.py`:简易 Runner:按 `--mode busy/idle` 调用 `app/etl_busy.py` 或 `app/etl_idle.py`(示例/未接入主 ETL)。
### etl_billiards/
- `etl_billiards/.env`:本地运行环境变量(含敏感信息,勿提交/勿外传)。
@@ -220,13 +217,12 @@ python -m cli.main \
- `etl_billiards/scripts/bootstrap_schema.py`:Apply the PRD-aligned warehouse schema (ODS/DWD/DWS) to PostgreSQL.
- `etl_billiards/scripts/build_dwd_from_ods.py`:Populate PRD DWD tables from ODS payload snapshots.
- `etl_billiards/scripts/build_dws_order_summary.py`:Recompute billiards_dws.dws_order_summary from DWD fact tables.
-- `etl_billiards/scripts/check_ods_json_vs_table.py`:ODS JSON 字段核对脚本:对照当前数据库中的 ODS 表字段,检查示例 JSON(默认目录 C:\dev\LLTQ\export\test-json-doc)
+- `etl_billiards/scripts/check_ods_json_vs_table.py`:ODS JSON 字段核对脚本:对照当前数据库中的 ODS 表字段,检查示例 JSON(默认目录 export/test-json-doc)
- `etl_billiards/scripts/check_ods_gaps.py`:ODS 缺失校验脚本:API 主键 vs ODS 主键逐条比对,输出缺失明细样例。
- `etl_billiards/scripts/reload_ods_windowed.py`:ODS 窗口化补跑脚本:按时间切片重跑 ODS 任务,并可配置窗口粒度与延时。
- `etl_billiards/scripts/rebuild_db_and_run_ods_to_dwd.py`:一键重建 ETL 相关 Schema,并执行 ODS → DWD。
- `etl_billiards/scripts/rebuild_ods_from_json.py`:从本地 JSON 示例目录重建 billiards_ods.* 表,并导入样例数据。
- `etl_billiards/scripts/run_tests.py`:灵活的测试执行脚本,可像搭积木一样组合不同参数或预置命令(模式/数据库/归档路径等),
-- `etl_billiards/scripts/Temp1.py`:空 Python 文件(占位/临时)。
- `etl_billiards/scripts/test_db_connection.py`:Quick utility for validating PostgreSQL connectivity (ASCII-only output).
- `etl_billiards/scripts/test_presets.py`:测试命令仓库:集中维护 run_tests.py 的常用组合,支持一键执行。
@@ -388,6 +384,33 @@ python -m cli.main --pg-dsn "postgresql://user:pwd@host:5432/db" --store-id 123
python -m cli.main --dry-run --tasks DWD_LOAD_FROM_ODS
```
+## 窗口切分与补偿
+用于 ETL 任务、ODS 缺失校验、数据一致性检查等“带时间窗口”的执行场景。逻辑如下:
+- 仅当传入窗口参数(如 CLI `--window-start/--window-end` 或脚本 `--start/--end`)时启用切分。
+- 先对整体窗口前后补偿 N 小时,再按月切分(`month` 为最大单位)。不需要切分时设为 `none`。
+- 分段窗口将依次执行并汇总结果。
+
+配置项(默认值见 `config/defaults.py`):
+- `run.window_split.unit`:`month` / `none`(默认 `month`)
+- `run.window_split.compensation_hours`:整数小时(默认 2)
+
+环境变量:
+- `WINDOW_SPLIT_UNIT`
+- `WINDOW_COMPENSATION_HOURS`
+
+CLI 参数(覆盖配置):
+- `python -m cli.main`:`--window-split-unit`,`--window-compensation-hours`
+- `scripts/check_ods_gaps.py`:`--window-split-unit`,`--window-compensation-hours`
+- `scripts/check_data_integrity.py`:`--window-split-unit`,`--window-compensation-hours`
+- `scripts/reload_ods_windowed.py`:`--window-split-unit`,`--window-compensation-hours`
+
+示例(`unit=month`,`compensation_hours=2`):
+- 传入窗口:`2025/11/10 10:00` - `2026/1/19 10:15`
+- 实际处理窗口切分:
+ - `2025/11/10 08:00` - `2025/12/01 00:00`
+ - `2025/12/01 00:00` - `2026/01/01 00:00`
+ - `2026/01/01 00:00` - `2026/01/19 12:15`
+
## 测试
说明:仓库未固定 pytest 版本(运行测试需自行安装 `pytest`)。
@@ -419,7 +442,7 @@ python scripts/test_db_connection.py --dsn "postgresql://user:pwd@host:5432/db"
- 离线回放/重建 ODS(开发/运维):
```bash
cd etl_billiards
- python scripts/rebuild_ods_from_json.py --dsn "$PG_DSN" --json-dir "C:\\path\\to\\json-doc"
+ python scripts/rebuild_ods_from_json.py --dsn "$PG_DSN" --json-dir "export/test-json-doc"
```
## ODS 表概览(数据路径)
@@ -584,10 +607,10 @@ python -m cli.main --pipeline-flow INGEST_ONLY --tasks DWS_BUILD_ORDER_SUMMARY
- `--log-level` 日志级别(`INFO`/`DEBUG`)。
- `--no-log-console` 禁用控制台日志记录(仅写入文件)。
-示例(按桌、按天设置窗口):
+示例(按月切分 + 前后补偿 2h):
```bash
cd etl_billiards
-python scripts/check_ods_gaps.py --start 2025-07-01 --window-days 1 --task-codes ODS_PAYMENT --sleep-per-window-seconds 0.5
-python scripts/reload_ods_windowed.py --tasks ODS_PAYMENT,ODS_TABLE_USE --start 2025-07-01 --window-days 1 --sleep-seconds 1
+python scripts/check_ods_gaps.py --start 2025-07-01 --end 2025-09-30 --window-split-unit month --window-compensation-hours 2 --task-codes ODS_PAYMENT --sleep-per-window-seconds 0.5
+python scripts/reload_ods_windowed.py --tasks ODS_PAYMENT,ODS_TABLE_USE --start 2025-07-01 --end 2025-09-30 --window-split-unit month --window-compensation-hours 2 --sleep-seconds 1
python run_update.py --check-ods-gaps --check-ods-window-days 1 --check-ods-sleep-per-window-seconds 0.5
-```
\ No newline at end of file
+```
diff --git a/app/etl_busy.py b/app/etl_busy.py
deleted file mode 100644
index c493046..0000000
--- a/app/etl_busy.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# app/etl_busy.py
-def run():
- """
- 忙时抓取逻辑。
- TODO: 这里写具体抓取流程(API 调用 / 网页解析 / 写入 PostgreSQL 等)
- """
- print("Running busy-period ETL...")
- # 示例:后续在这里接 PostgreSQL 或 HTTP 抓取
- # ...
\ No newline at end of file
diff --git a/app/etl_idle.py b/app/etl_idle.py
deleted file mode 100644
index 06a4ac5..0000000
--- a/app/etl_idle.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# app/etl_idle.py
-def run():
- """
- 闲时抓取逻辑。
- 可以做全量同步、大批量历史修正等。
- """
- print("Running idle-period ETL...")
- # ...
\ No newline at end of file
diff --git a/app/runner.py b/app/runner.py
deleted file mode 100644
index e2abc25..0000000
--- a/app/runner.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# app/runner.py
-import argparse
-from datetime import datetime
-
-from . import etl_busy, etl_idle
-
-
-def main():
- parser = argparse.ArgumentParser(description="Feiqiu ETL Runner")
- parser.add_argument(
- "--mode",
- choices=["busy", "idle"],
- required=True,
- help="ETL mode: busy or idle",
- )
-
- args = parser.parse_args()
- now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
-
- print(f"[{now}] Start ETL mode={args.mode}")
-
- if args.mode == "busy":
- etl_busy.run()
- else:
- etl_idle.run()
-
- print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] ETL finished.")
-
-
-if __name__ == "__main__":
- main()
\ No newline at end of file
diff --git a/etl_billiards/.env b/etl_billiards/.env
index 8d797e2..a4d6974 100644
--- a/etl_billiards/.env
+++ b/etl_billiards/.env
@@ -1,53 +1,131 @@
-# -*- coding: utf-8 -*-
-# 文件说明:ETL 环境变量(config/env_parser.py 读取),用于数据库连接、目录与运行参数。
+# ==============================================================================
+# ETL 系统配置文件
+# ==============================================================================
+# 配置优先级:DEFAULTS < .env < CLI 参数
-# 数据库连接字符串,config/env_parser.py -> db.dsn,所有任务必需
+# ------------------------------------------------------------------------------
+# 数据库配置
+# ------------------------------------------------------------------------------
+# 完整 DSN(优先使用,如果设置了则忽略下面的 host/port/name/user/password)
PG_DSN=postgresql://local-Python:Neo-local-1991125@100.64.0.4:5432/LLZQ-test
-# 数据库连接超时秒,config/env_parser.py -> db.connect_timeout_sec
+
+# 分离式配置(如果不使用 DSN,可以单独配置以下参数)
+# PG_HOST=localhost
+# PG_PORT=5432
+# PG_NAME=your_database
+# PG_USER=your_user
+# PG_PASSWORD=your_password
+
+# 连接超时(秒,范围 1-20)
PG_CONNECT_TIMEOUT=10
-# 门店/租户ID,config/env_parser.py -> app.store_id,任务调度记录使用
-STORE_ID=2790685415443269
-# 时区标识,config/env_parser.py -> app.timezone
-TIMEZONE=Asia/Taipei
+# ------------------------------------------------------------------------------
+# 数据库 Schema 配置
+# ------------------------------------------------------------------------------
+# OLTP 业务数据 schema(默认 billiards)
+SCHEMA_OLTP=billiards
-# API 基础地址,config/env_parser.py -> api.base_url,FETCH 类任务调用
+# ETL 管理数据 schema(默认 etl_admin)
+SCHEMA_ETL=etl_admin
+
+# ------------------------------------------------------------------------------
+# API 配置
+# ------------------------------------------------------------------------------
API_BASE=https://pc.ficoo.vip/apiprod/admin/v1/
-# API 鉴权 Token,config/env_parser.py -> api.token,FETCH 类任务调用
-API_TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjbGllbnQtdHlwZSI6IjQiLCJ1c2VyLXR5cGUiOiIxIiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93cy8yMDA4LzA2L2lkZW50aXR5L2NsYWltcy9yb2xlIjoiMTIiLCJyb2xlLWlkIjoiMTIiLCJ0ZW5hbnQtaWQiOiIyNzkwNjgzMTYwNzA5OTU3Iiwibmlja25hbWUiOiLnp5_miLfnrqHnkIblkZjvvJrmganmgakxIiwic2l0ZS1pZCI6IjAiLCJtb2JpbGUiOiIxMzgxMDUwMjMwNCIsInNpZCI6IjI5NTA0ODk2NTgzOTU4NDUiLCJzdGFmZi1pZCI6IjMwMDk5MTg2OTE1NTkwNDUiLCJvcmctaWQiOiIwIiwicm9sZS10eXBlIjoiMyIsInJlZnJlc2hUb2tlbiI6IlpWV3grVThBc2FYekFJeTRiaXF6MktwNjMxbTFNRlozV3pLaXNjOHREY289IiwicmVmcmVzaEV4cGlyeVRpbWUiOiIyMDI2LzEvMTcg5LiL5Y2INDoyMjo1OSIsIm5lZWRDaGVja1Rva2VuIjoiZmFsc2UiLCJleHAiOjE3Njg2MzgxNzksImlzcyI6InRlc3QiLCJhdWQiOiJVc2VyIn0.PVeAIx1iHqmHRNaQ4OMFPuOlHBoE47bR5TGJjZP-eOE
-# API 请求超时秒,config/env_parser.py -> api.timeout_sec
+API_TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjbGllbnQtdHlwZSI6IjQiLCJ1c2VyLXR5cGUiOiIxIiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93cy8yMDA4LzA2L2lkZW50aXR5L2NsYWltcy9yb2xlIjoiMTIiLCJyb2xlLWlkIjoiMTIiLCJ0ZW5hbnQtaWQiOiIyNzkwNjgzMTYwNzA5OTU3Iiwibmlja25hbWUiOiLnp5_miLfnrqHnkIblkZjvvJrmganmgakxIiwic2l0ZS1pZCI6IjAiLCJtb2JpbGUiOiIxMzgxMDUwMjMwNCIsInNpZCI6IjI5NTA0ODk2NTgzOTU4NDUiLCJzdGFmZi1pZCI6IjMwMDk5MTg2OTE1NTkwNDUiLCJvcmctaWQiOiIwIiwicm9sZS10eXBlIjoiMyIsInJlZnJlc2hUb2tlbiI6Iks1ZnBhYlRTNkFsR0FpMmN4WGYrMHdJVkk0L2UvTVQrSVBHM3V5VWRrSjg9IiwicmVmcmVzaEV4cGlyeVRpbWUiOiIyMDI2LzEvMzEg5LiL5Y2IMTA6MTQ6NTEiLCJuZWVkQ2hlY2tUb2tlbiI6ImZhbHNlIiwiZXhwIjoxNzY5ODY4ODkxLCJpc3MiOiJ0ZXN0IiwiYXVkIjoiVXNlciJ9.BH3-iwwrBczb8aFfI__6kwe3AIsEPacN9TruaTrQ3nY
+
+# API 请求超时(秒)
API_TIMEOUT=20
-# API 分页大小,config/env_parser.py -> api.page_size
+
+# 分页大小
API_PAGE_SIZE=200
-# API 最大重试次数,config/env_parser.py -> api.retries.max_attempts
+
+# 最大重试次数
API_RETRY_MAX=3
-# 日志根目录,config/env_parser.py -> io.log_root,Init/任务运行写日志
-LOG_ROOT=C:\dev\LLTQ\export\LOG
-# JSON 导出根目录,config/env_parser.py -> io.export_root,FETCH 产出及 INIT 准备
-EXPORT_ROOT=C:\dev\LLTQ\export\JSON
+# 重试退避时间(JSON 数组格式,单位秒)
+# API_RETRY_BACKOFF=[1, 2, 4]
-# FETCH 模式本地输出目录,config/env_parser.py -> pipeline.fetch_root
-FETCH_ROOT=C:\dev\LLTQ\export\JSON
-# 本地入库 JSON 目录,config/env_parser.py -> pipeline.ingest_source_dir,MANUAL_INGEST/INGEST_ONLY 使用
-INGEST_SOURCE_DIR=C:\dev\LLTQ\export\test-json-doc
+# ------------------------------------------------------------------------------
+# 门店配置
+# ------------------------------------------------------------------------------
+STORE_ID=2790685415443269
+TIMEZONE=Asia/Taipei
-# JSON 漂亮格式输出开关,config/env_parser.py -> io.write_pretty_json
+# ------------------------------------------------------------------------------
+# 路径配置
+# ------------------------------------------------------------------------------
+# 导出根目录
+EXPORT_ROOT=export/JSON
+
+# 日志根目录
+LOG_ROOT=export/LOG
+
+# 在线抓取 JSON 输出目录
+FETCH_ROOT=export/JSON
+
+# 本地入库数据源目录(INGEST_ONLY 模式使用)
+INGEST_SOURCE_DIR=export/test-json-doc
+
+# ------------------------------------------------------------------------------
+# 流水线配置
+# ------------------------------------------------------------------------------
+# 运行模式:FULL(抓取+入库)、FETCH_ONLY(仅抓取)、INGEST_ONLY(仅入库)
+PIPELINE_FLOW=FULL
+
+# JSON 美化输出(调试用,会增加文件大小)
WRITE_PRETTY_JSON=false
-# 运行流程:FULL / FETCH_ONLY / INGEST_ONLY,config/env_parser.py -> pipeline.flow
-PIPELINE_FLOW=FULL
-# 指定任务列表(逗号分隔,覆盖默认),config/env_parser.py -> run.tasks
-# RUN_TASKS=INIT_ODS_SCHEMA,MANUAL_INGEST
-
-# 固定回溯窗口(可选):同时设置 WINDOW_START + WINDOW_END,将覆盖游标/当前时间窗口
-# WINDOW_START=2025-07-01 00:00:00
-# WINDOW_END=2025-08-01 00:00:00
-
-# 窗口/补偿参数,config/env_parser.py -> run.*
+# ------------------------------------------------------------------------------
+# 时间窗口配置
+# ------------------------------------------------------------------------------
+# 冗余窗口(秒),向前多抓取的时间避免边界数据丢失
OVERLAP_SECONDS=120
+
+# 忙时窗口大小(分钟)
WINDOW_BUSY_MIN=30
+
+# 闲时窗口大小(分钟)
WINDOW_IDLE_MIN=180
+
+# 闲时窗口定义(HH:MM 格式)
IDLE_START=04:00
IDLE_END=16:00
+
+# 窗口切分单位(month/none),用于长时间回溯任务按月切分
+WINDOW_SPLIT_UNIT=month
+
+# 窗口前后补偿小时数,用于捕获边界数据
+WINDOW_COMPENSATION_HOURS=2
+
+# 允许空结果推进窗口
ALLOW_EMPTY_RESULT_ADVANCE=true
+
+# ------------------------------------------------------------------------------
+# 数据完整性检查配置
+# ------------------------------------------------------------------------------
+# 检查模式:history(历史全量)、recent(最近增量)
+INTEGRITY_MODE=history
+
+# 历史检查起始日期(history 模式使用)
+INTEGRITY_HISTORY_START=2025-07-01
+
+# 历史检查结束日期(留空表示到当前)
+INTEGRITY_HISTORY_END=
+
+# 是否包含维度表校验
+INTEGRITY_INCLUDE_DIMENSIONS=true
+
+# 发现丢失数据时是否自动补全
+INTEGRITY_AUTO_BACKFILL=true
+
+# 自动执行完整性检查(ETL 完成后自动触发)
+INTEGRITY_AUTO_CHECK=false
+
+# 指定要校验的 ODS 任务代码(逗号分隔,留空表示全部)
+# INTEGRITY_ODS_TASK_CODES=ODS_PAYMENT,ODS_MEMBER
+
+# ------------------------------------------------------------------------------
+# 默认任务列表(逗号分隔,可被 CLI --tasks 参数覆盖)
+# ------------------------------------------------------------------------------
+# RUN_TASKS=ODS_PAYMENT,ODS_MEMBER,ODS_SETTLEMENT_RECORDS,DWD_LOAD_FROM_ODS
\ No newline at end of file
diff --git a/etl_billiards/ETL_Manager.exe - 快捷方式.lnk b/etl_billiards/ETL_Manager.exe - 快捷方式.lnk
new file mode 100644
index 0000000..6ec35ca
Binary files /dev/null and b/etl_billiards/ETL_Manager.exe - 快捷方式.lnk differ
diff --git a/etl_billiards/ETL_Manager.spec b/etl_billiards/ETL_Manager.spec
new file mode 100644
index 0000000..66892de
--- /dev/null
+++ b/etl_billiards/ETL_Manager.spec
@@ -0,0 +1,44 @@
+# -*- mode: python ; coding: utf-8 -*-
+
+
+a = Analysis(
+ ['C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\gui\\main.py'],
+ pathex=[],
+ binaries=[],
+ datas=[('C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\gui\\resources', 'gui/resources'), ('C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\database\\schema_dwd_doc.sql', 'database'), ('C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\database\\schema_dws.sql', 'database'), ('C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\database\\schema_etl_admin.sql', 'database'), ('C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\database\\schema_ODS_doc.sql', 'database'), ('C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\database\\seed_ods_tasks.sql', 'database'), ('C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\database\\seed_scheduler_tasks.sql', 'database')],
+ hiddenimports=['PySide6.QtCore', 'PySide6.QtGui', 'PySide6.QtWidgets', 'psycopg2', 'psycopg2.extras', 'psycopg2.extensions', 'gui.models.task_model', 'gui.models.schedule_model', 'gui.utils.cli_builder', 'gui.utils.config_helper', 'gui.utils.app_settings', 'gui.workers.task_worker', 'gui.workers.db_worker', 'gui.widgets.settings_dialog'],
+ hookspath=[],
+ hooksconfig={},
+ runtime_hooks=[],
+ excludes=['matplotlib', 'numpy', 'pandas', 'scipy', 'PIL', 'cv2', 'tkinter'],
+ noarchive=False,
+ optimize=0,
+)
+pyz = PYZ(a.pure)
+
+exe = EXE(
+ pyz,
+ a.scripts,
+ [],
+ exclude_binaries=True,
+ name='ETL_Manager',
+ debug=False,
+ bootloader_ignore_signals=False,
+ strip=False,
+ upx=True,
+ console=False,
+ disable_windowed_traceback=False,
+ argv_emulation=False,
+ target_arch=None,
+ codesign_identity=None,
+ entitlements_file=None,
+)
+coll = COLLECT(
+ exe,
+ a.binaries,
+ a.datas,
+ strip=False,
+ upx=True,
+ upx_exclude=[],
+ name='ETL_Manager',
+)
diff --git a/etl_billiards/cli/main.py b/etl_billiards/cli/main.py
index 9268f74..3fea875 100644
--- a/etl_billiards/cli/main.py
+++ b/etl_billiards/cli/main.py
@@ -57,6 +57,17 @@ def parse_args():
action="store_true",
help="强制使用 window_start/window_end,不走 MAX(fetched_at) 兜底",
)
+ parser.add_argument(
+ "--window-split-unit",
+ dest="window_split_unit",
+ help="窗口切分单位(month/none),默认来自配置 run.window_split.unit",
+ )
+ parser.add_argument(
+ "--window-compensation-hours",
+ dest="window_compensation_hours",
+ type=int,
+ help="窗口前后补偿小时数,默认来自配置 run.window_split.compensation_hours",
+ )
# 目录参数
parser.add_argument("--export-root", help="导出根目录")
@@ -134,6 +145,12 @@ def build_cli_overrides(args) -> dict:
overrides["run"]["window_override"]["end"] = args.window_end
if args.force_window_override:
overrides.setdefault("run", {})["force_window_override"] = True
+ if args.window_split_unit:
+ overrides.setdefault("run", {}).setdefault("window_split", {})["unit"] = args.window_split_unit
+ if args.window_compensation_hours is not None:
+ overrides.setdefault("run", {}).setdefault("window_split", {})[
+ "compensation_hours"
+ ] = args.window_compensation_hours
# 运行窗口
if args.idle_start:
diff --git a/etl_billiards/config/defaults.py b/etl_billiards/config/defaults.py
index dfe57af..1aab083 100644
--- a/etl_billiards/config/defaults.py
+++ b/etl_billiards/config/defaults.py
@@ -58,6 +58,10 @@ DEFAULTS = {
"default_idle": 180,
},
"overlap_seconds": 120,
+ "window_split": {
+ "unit": "month",
+ "compensation_hours": 2,
+ },
"idle_window": {
"start": "04:00",
"end": "16:00",
@@ -65,8 +69,8 @@ DEFAULTS = {
"allow_empty_result_advance": True,
},
"io": {
- "export_root": r"C:\dev\LLTQ\export\JSON",
- "log_root": r"C:\dev\LLTQ\export\LOG",
+ "export_root": "export/JSON",
+ "log_root": "export/LOG",
"manifest_name": "manifest.json",
"ingest_report_name": "ingest_report.json",
"write_pretty_json": True,
@@ -76,7 +80,7 @@ DEFAULTS = {
# 运行流程:FETCH_ONLY(仅在线抓取落盘)、INGEST_ONLY(本地清洗入库)、FULL(抓取 + 清洗入库)
"flow": "FULL",
# 在线抓取 JSON 输出根目录(按任务、run_id 与时间自动创建子目录)
- "fetch_root": r"C:\dev\LLTQ\export\JSON",
+ "fetch_root": "export/JSON",
# 本地清洗入库时的 JSON 输入目录(为空则默认使用本次抓取目录)
"ingest_source_dir": "",
},
@@ -97,10 +101,19 @@ DEFAULTS = {
},
"ods": {
# ODS 离线重建/回放相关(仅开发/运维使用)
- "json_doc_dir": r"C:\dev\LLTQ\export\test-json-doc",
+ "json_doc_dir": "export/test-json-doc",
"include_files": "",
"drop_schema_first": True,
},
+ "integrity": {
+ "mode": "history",
+ "history_start": "2025-07-01",
+ "history_end": "",
+ "include_dimensions": False,
+ "auto_check": False,
+ "ods_task_codes": "",
+ },
+
}
# 任务代码常量
diff --git a/etl_billiards/database/schema_ODS_doc.sql b/etl_billiards/database/schema_ODS_doc.sql
index 4714568..d194c25 100644
--- a/etl_billiards/database/schema_ODS_doc.sql
+++ b/etl_billiards/database/schema_ODS_doc.sql
@@ -25,7 +25,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.member_profiles (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.member_profiles IS 'ODS 原始明细表:会员档案/会员账户信息。来源:C:/dev/LLTQ/export/test-json-doc/member_profiles.json;分析:member_profiles-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.member_profiles IS 'ODS 原始明细表:会员档案/会员账户信息。来源:export/test-json-doc/member_profiles.json;分析:member_profiles-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.member_profiles.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】member_profiles.json - data.tenantMemberInfos - tenant_id。';
COMMENT ON COLUMN billiards_ods.member_profiles.register_site_id IS '【说明】会员的注册门店 ID。 【示例】2790685415443269(用于会员的注册门店 ID)。 【JSON字段】member_profiles.json - data.tenantMemberInfos - register_site_id。';
COMMENT ON COLUMN billiards_ods.member_profiles.site_name IS '【说明】注册门店名称,属于冗余字段,用于直接展示。 【示例】朗朗桌球(注册门店名称,属于冗余字段,用于直接展示)。 【JSON字段】member_profiles.json - data.tenantMemberInfos - site_name。';
@@ -42,7 +42,7 @@ COMMENT ON COLUMN billiards_ods.member_profiles.status IS '【说明】帐户状
COMMENT ON COLUMN billiards_ods.member_profiles.user_status IS '【说明】用户账号状态(偏“用户逻辑”层面的状态)。 【示例】1(用于用户账号状态(偏“用户逻辑”层面的状态))。 【JSON字段】member_profiles.json - data.tenantMemberInfos - user_status。';
COMMENT ON COLUMN billiards_ods.member_profiles.create_time IS '【说明】会员账户的创建时间(即这条档案/这张卡在系统中被创建的时间)。 【示例】2025-11-08 01:29:33(用于会员账户的创建时间(即这条档案/这张卡在系统中被创建的时间))。 【JSON字段】member_profiles.json - data.tenantMemberInfos - create_time。';
COMMENT ON COLUMN billiards_ods.member_profiles.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】member_profiles.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】member_profiles.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.member_profiles.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/member_profiles.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】member_profiles.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.member_profiles.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/member_profiles.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】member_profiles.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.member_profiles.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】member_profiles.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.member_profiles.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】member_profiles.json - data.tenantMemberInfos - $。';
@@ -79,7 +79,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.member_balance_changes (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.member_balance_changes IS 'ODS 原始明细表:会员余额变更流水。来源:C:/dev/LLTQ/export/test-json-doc/member_balance_changes.json;分析:member_balance_changes-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.member_balance_changes IS 'ODS 原始明细表:会员余额变更流水。来源:export/test-json-doc/member_balance_changes.json;分析:member_balance_changes-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.member_balance_changes.tenant_id IS '【说明】租户/商户 ID,本数据中是固定值(同一品牌/商户)。 【示例】2790683160709957(用于租户/商户 ID,本数据中是固定值(同一品牌/商户))。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - tenant_id。';
COMMENT ON COLUMN billiards_ods.member_balance_changes.site_id IS '【说明】非 0:记录所属的具体门店 ID(与其他 JSON 内的 site_id 一致)。 【示例】2790685415443269(用于非 0:记录所属的具体门店 ID(与其他 JSON 内的 site_id 一致))。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - site_id。';
COMMENT ON COLUMN billiards_ods.member_balance_changes.register_site_id IS '【说明】会员卡的“注册门店 ID”,即办卡所在门店。 【示例】2790685415443269(用于会员卡的“注册门店 ID”,即办卡所在门店)。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - register_site_id。';
@@ -106,7 +106,7 @@ COMMENT ON COLUMN billiards_ods.member_balance_changes.operator_name IS '【说
COMMENT ON COLUMN billiards_ods.member_balance_changes.is_delete IS '【说明】逻辑删除标记(0=否,1=是)。 【示例】0(用于逻辑删除标记(0=否,1=是))。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - is_delete。';
COMMENT ON COLUMN billiards_ods.member_balance_changes.create_time IS '【说明】本条余额变更记录的创建时间,通常接近交易发生时间。 【示例】2025-11-09 22:52:48(用于本条余额变更记录的创建时间,通常接近交易发生时间)。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - create_time。';
COMMENT ON COLUMN billiards_ods.member_balance_changes.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】member_balance_changes.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】member_balance_changes.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.member_balance_changes.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/member_balance_changes.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】member_balance_changes.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/member_balance_changes.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】member_balance_changes.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.member_balance_changes.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】member_balance_changes.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.member_balance_changes.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - $。';
@@ -187,7 +187,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.member_stored_value_cards (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.member_stored_value_cards IS 'ODS 原始明细表:会员储值/卡券账户列表。来源:C:/dev/LLTQ/export/test-json-doc/member_stored_value_cards.json;分析:member_stored_value_cards-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.member_stored_value_cards IS 'ODS 原始明细表:会员储值/卡券账户列表。来源:export/test-json-doc/member_stored_value_cards.json;分析:member_stored_value_cards-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenant_id IS '【说明】租户/品牌 ID,与其他 JSON 中 tenant_id 一致。 【示例】2790683160709957(用于租户/品牌 ID,与其他 JSON 中 tenant_id 一致)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tenant_id。';
COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenant_member_id IS '【说明】当前商户(品牌/租户)中会员的主键 ID。 【示例】2955204541320325(用于当前商户(品牌/租户)中会员的主键 ID)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tenant_member_id。';
COMMENT ON COLUMN billiards_ods.member_stored_value_cards.system_member_id IS '【说明】系统级会员 ID(跨门店统一主键)。 【示例】2955204540009605(用于系统级会员 ID(跨门店统一主键))。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - system_member_id。';
@@ -258,7 +258,7 @@ COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenantName IS '【说
COMMENT ON COLUMN billiards_ods.member_stored_value_cards.pdAssisnatLevel IS '【说明】允许使用的“陪打/助教等级”列表。 【示例】[](用于允许使用的“陪打/助教等级”列表)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - pdAssisnatLevel。';
COMMENT ON COLUMN billiards_ods.member_stored_value_cards.cxAssisnatLevel IS '【说明】可能是“促销活动中的助教等级限制”(命名中 cx 多为“促销”缩写)。 【示例】[](用于可能是“促销活动中的助教等级限制”(命名中 cx 多为“促销”缩写))。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - cxAssisnatLevel。';
COMMENT ON COLUMN billiards_ods.member_stored_value_cards.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】member_stored_value_cards.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】member_stored_value_cards.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.member_stored_value_cards.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/member_stored_value_cards.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】member_stored_value_cards.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/member_stored_value_cards.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】member_stored_value_cards.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.member_stored_value_cards.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】member_stored_value_cards.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.member_stored_value_cards.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - $。';
@@ -331,7 +331,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.recharge_settlements (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.recharge_settlements IS 'ODS 原始明细表:充值结算记录。来源:C:/dev/LLTQ/export/test-json-doc/recharge_settlements.json;分析:recharge_settlements-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.recharge_settlements IS 'ODS 原始明细表:充值结算记录。来源:export/test-json-doc/recharge_settlements.json;分析:recharge_settlements-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.recharge_settlements.id IS '【说明】门店 ID。 【示例】NULL(用于门店 ID)。 【JSON字段】recharge_settlements.json - $ - id。';
COMMENT ON COLUMN billiards_ods.recharge_settlements.tenantid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】recharge_settlements.json - $ - tenantid。';
COMMENT ON COLUMN billiards_ods.recharge_settlements.siteid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】recharge_settlements.json - $ - siteid。';
@@ -394,7 +394,7 @@ COMMENT ON COLUMN billiards_ods.recharge_settlements.isfirst IS '【说明】来
COMMENT ON COLUMN billiards_ods.recharge_settlements.rechargecardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - rechargecardamount。';
COMMENT ON COLUMN billiards_ods.recharge_settlements.giftcardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - giftcardamount。';
COMMENT ON COLUMN billiards_ods.recharge_settlements.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】recharge_settlements.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】recharge_settlements.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.recharge_settlements.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/recharge_settlements.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】recharge_settlements.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/recharge_settlements.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】recharge_settlements.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.recharge_settlements.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】recharge_settlements.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.recharge_settlements.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】recharge_settlements.json - $ - $。';
@@ -467,7 +467,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.settlement_records (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.settlement_records IS 'ODS 原始明细表:结账/结算记录。来源:C:/dev/LLTQ/export/test-json-doc/settlement_records.json;分析:settlement_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.settlement_records IS 'ODS 原始明细表:结账/结算记录。来源:export/test-json-doc/settlement_records.json;分析:settlement_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.settlement_records.id IS '【说明】结账记录主键 ID(订单结算 ID)。 【示例】NULL(用于结账记录主键 ID(订单结算 ID))。 【JSON字段】settlement_records.json - $ - id。';
COMMENT ON COLUMN billiards_ods.settlement_records.tenantid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_records.json - $ - tenantid。';
COMMENT ON COLUMN billiards_ods.settlement_records.siteid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_records.json - $ - siteid。';
@@ -530,7 +530,7 @@ COMMENT ON COLUMN billiards_ods.settlement_records.isfirst IS '【说明】来
COMMENT ON COLUMN billiards_ods.settlement_records.rechargecardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - rechargecardamount。';
COMMENT ON COLUMN billiards_ods.settlement_records.giftcardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - giftcardamount。';
COMMENT ON COLUMN billiards_ods.settlement_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】settlement_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】settlement_records.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.settlement_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/settlement_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】settlement_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.settlement_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/settlement_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】settlement_records.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.settlement_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】settlement_records.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.settlement_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】settlement_records.json - $ - $。';
@@ -555,7 +555,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.assistant_cancellation_records (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.assistant_cancellation_records IS 'ODS 原始明细表:助教作废/取消记录。来源:C:/dev/LLTQ/export/test-json-doc/assistant_cancellation_records.json;分析:assistant_cancellation_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.assistant_cancellation_records IS 'ODS 原始明细表:助教作废/取消记录。来源:export/test-json-doc/assistant_cancellation_records.json;分析:assistant_cancellation_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.id IS '【说明】本表主键 ID,用于唯一标识一条记录。 【示例】2957675849518789(本表主键 ID,用于唯一标识一条记录)。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - id。';
COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.siteId IS '【说明】门店 ID,即该废除记录所在门店。 【示例】2790685415443269(用于门店 ID,即该废除记录所在门店)。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - siteId。';
COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.siteProfile IS '【说明】门店信息快照。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(用于门店信息快照)。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - siteProfile。';
@@ -570,7 +570,7 @@ COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableName IS '【
COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.trashReason IS '【说明】用于记录“废除原因”的文本描述,例如“顾客临时有事取消”“录入错误”“更换助教”等。 【示例】NULL(用于记录“废除原因”的文本描述,例如“顾客临时有事取消”“录入错误”“更换助教”等)。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - trashReason。';
COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.createTime IS '【说明】这条“助教废除记录”被创建的时间,即系统正式记录“废除”操作的时刻。 【示例】2025-11-09 19:23:29(用于这条“助教废除记录”被创建的时间,即系统正式记录“废除”操作的时刻)。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - createTime。';
COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】assistant_cancellation_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】assistant_cancellation_records.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/assistant_cancellation_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】assistant_cancellation_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/assistant_cancellation_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】assistant_cancellation_records.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】assistant_cancellation_records.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - $。';
@@ -644,7 +644,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.assistant_accounts_master (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.assistant_accounts_master IS 'ODS 原始明细表:助教档案主数据。来源:C:/dev/LLTQ/export/test-json-doc/assistant_accounts_master.json;分析:assistant_accounts_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.assistant_accounts_master IS 'ODS 原始明细表:助教档案主数据。来源:export/test-json-doc/assistant_accounts_master.json;分析:assistant_accounts_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.assistant_accounts_master.id IS '【说明】助教账号主键 ID,在“助教流水.json”中对应 site_assistant_id。 【示例】2947562271297029(用于助教账号主键 ID,在“助教流水.json”中对应 site_assistant_id)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - id。';
COMMENT ON COLUMN billiards_ods.assistant_accounts_master.tenant_id IS '【说明】品牌/租户 ID,对应“非球科技”系统中该商户的唯一标识。 【示例】2790683160709957(用于品牌/租户 ID,对应“非球科技”系统中该商户的唯一标识)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - tenant_id。';
COMMENT ON COLUMN billiards_ods.assistant_accounts_master.site_id IS '【说明】门店 ID,对应本次数据的这家球房(朗朗桌球)。 【示例】2790685415443269(用于门店 ID,对应本次数据的这家球房(朗朗桌球))。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - site_id。';
@@ -708,7 +708,7 @@ COMMENT ON COLUMN billiards_ods.assistant_accounts_master.light_equipment_id IS
COMMENT ON COLUMN billiards_ods.assistant_accounts_master.entry_sign_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】0(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - entry_sign_status。';
COMMENT ON COLUMN billiards_ods.assistant_accounts_master.resign_sign_status IS '【说明】离职协议签署状态,类似上面。 【示例】0(用于离职协议签署状态,类似上面)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - resign_sign_status。';
COMMENT ON COLUMN billiards_ods.assistant_accounts_master.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】assistant_accounts_master.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】assistant_accounts_master.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.assistant_accounts_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/assistant_accounts_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】assistant_accounts_master.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/assistant_accounts_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】assistant_accounts_master.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.assistant_accounts_master.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】assistant_accounts_master.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.assistant_accounts_master.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - $。';
@@ -784,7 +784,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.assistant_service_records (
fetched_at TIMESTAMPTZ DEFAULT now()
);
-COMMENT ON TABLE billiards_ods.assistant_service_records IS 'ODS 原始明细表:助教服务流水。来源:C:/dev/LLTQ/export/test-json-doc/assistant_service_records.json;分析:assistant_service_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.assistant_service_records IS 'ODS 原始明细表:助教服务流水。来源:export/test-json-doc/assistant_service_records.json;分析:assistant_service_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.assistant_service_records.id IS '【说明】本条助教流水记录的主键 ID(流水唯一标识)。 【示例】2957913441292165(用于本条助教流水记录的主键 ID(流水唯一标识))。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - id。';
COMMENT ON COLUMN billiards_ods.assistant_service_records.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - tenant_id。';
COMMENT ON COLUMN billiards_ods.assistant_service_records.site_id IS '【说明】门店 ID,本数据中指“朗朗桌球”这一家门店。 【示例】2790685415443269(用于门店 ID,本数据中指“朗朗桌球”这一家门店)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - site_id。';
@@ -851,7 +851,7 @@ COMMENT ON COLUMN billiards_ods.assistant_service_records.is_not_responding IS '
COMMENT ON COLUMN billiards_ods.assistant_service_records.is_confirm IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。 【示例】2(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_confirm。';
COMMENT ON COLUMN billiards_ods.assistant_service_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - $。';
COMMENT ON COLUMN billiards_ods.assistant_service_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】assistant_service_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】assistant_service_records.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.assistant_service_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/assistant_service_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】assistant_service_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/assistant_service_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】assistant_service_records.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.assistant_service_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】assistant_service_records.json - ETL元数据 - 无。';
@@ -887,7 +887,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.site_tables_master (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.site_tables_master IS 'ODS 原始明细表:门店桌台主数据。来源:C:/dev/LLTQ/export/test-json-doc/site_tables_master.json;分析:site_tables_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.site_tables_master IS 'ODS 原始明细表:门店桌台主数据。来源:export/test-json-doc/site_tables_master.json;分析:site_tables_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.site_tables_master.id IS '【说明】台桌主键 ID。 【示例】2791964216463493(用于台桌主键 ID)。 【JSON字段】site_tables_master.json - data.siteTables - id。';
COMMENT ON COLUMN billiards_ods.site_tables_master.site_id IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【JSON字段】site_tables_master.json - data.siteTables - site_id。';
COMMENT ON COLUMN billiards_ods.site_tables_master.siteName IS '【说明】门店名称快照,冗余字段,配合 site_id 使用。 【示例】朗朗桌球(用于门店名称快照,冗余字段,配合 site_id 使用)。 【JSON字段】site_tables_master.json - data.siteTables - siteName。';
@@ -913,7 +913,7 @@ COMMENT ON COLUMN billiards_ods.site_tables_master.table_status IS '【说明】
COMMENT ON COLUMN billiards_ods.site_tables_master.temporary_light_second IS '【说明】临时点灯时长(秒),例如手动临时开灯一段时间。 【示例】0(用于临时点灯时长(秒),例如手动临时开灯一段时间)。 【JSON字段】site_tables_master.json - data.siteTables - temporary_light_second。';
COMMENT ON COLUMN billiards_ods.site_tables_master.virtual_table IS '【说明】当前值:全部为 0。 【示例】0(用于当前值:全部为 0)。 【JSON字段】site_tables_master.json - data.siteTables - virtual_table。';
COMMENT ON COLUMN billiards_ods.site_tables_master.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】site_tables_master.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】site_tables_master.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.site_tables_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/site_tables_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】site_tables_master.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/site_tables_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】site_tables_master.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.site_tables_master.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】site_tables_master.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.site_tables_master.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】site_tables_master.json - data.siteTables - $。';
@@ -945,7 +945,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.table_fee_discount_records (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.table_fee_discount_records IS 'ODS 原始明细表:台费折扣记录。来源:C:/dev/LLTQ/export/test-json-doc/table_fee_discount_records.json;分析:table_fee_discount_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.table_fee_discount_records IS 'ODS 原始明细表:台费折扣记录。来源:export/test-json-doc/table_fee_discount_records.json;分析:table_fee_discount_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.table_fee_discount_records.id IS '【说明】台费打折 / 调整流水主键 ID。 【示例】2957913441881989(用于台费打折 / 调整流水主键 ID)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - id。';
COMMENT ON COLUMN billiards_ods.table_fee_discount_records.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - tenant_id。';
COMMENT ON COLUMN billiards_ods.table_fee_discount_records.site_id IS '【说明】门店 ID,本批数据全部为同一家门店(朗朗桌球)。 【示例】2790685415443269(用于门店 ID,本批数据全部为同一家门店(朗朗桌球))。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - site_id。';
@@ -967,7 +967,7 @@ COMMENT ON COLUMN billiards_ods.table_fee_discount_records.order_trade_no IS '
COMMENT ON COLUMN billiards_ods.table_fee_discount_records.is_delete IS '【说明】逻辑删除标记(0=否,1=是)。 【示例】0(用于逻辑删除标记(0=否,1=是))。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - is_delete。';
COMMENT ON COLUMN billiards_ods.table_fee_discount_records.create_time IS '【说明】台费调整记录的创建时间,即打折操作被执行的时间戳。 【示例】2025-11-09 23:25:11(用于台费调整记录的创建时间,即打折操作被执行的时间戳)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - create_time。';
COMMENT ON COLUMN billiards_ods.table_fee_discount_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】table_fee_discount_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】table_fee_discount_records.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.table_fee_discount_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/table_fee_discount_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】table_fee_discount_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/table_fee_discount_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】table_fee_discount_records.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.table_fee_discount_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】table_fee_discount_records.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.table_fee_discount_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - $。';
@@ -1018,7 +1018,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.table_fee_transactions (
fetched_at TIMESTAMPTZ DEFAULT now()
);
-COMMENT ON TABLE billiards_ods.table_fee_transactions IS 'ODS 原始明细表:台费流水。来源:C:/dev/LLTQ/export/test-json-doc/table_fee_transactions.json;分析:table_fee_transactions-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.table_fee_transactions IS 'ODS 原始明细表:台费流水。来源:export/test-json-doc/table_fee_transactions.json;分析:table_fee_transactions-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.table_fee_transactions.id IS '【说明】台费流水记录主键(事实表主键)。 【示例】2957924029058885(用于台费流水记录主键(事实表主键))。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - id。';
COMMENT ON COLUMN billiards_ods.table_fee_transactions.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - tenant_id。';
COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_id IS '【说明】门店 ID,本次数据全部来自同一门店(朗朗桌球)。 【示例】2790685415443269(用于门店 ID,本次数据全部来自同一门店(朗朗桌球))。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_id。';
@@ -1060,7 +1060,7 @@ COMMENT ON COLUMN billiards_ods.table_fee_transactions.salesman_user_id IS '【
COMMENT ON COLUMN billiards_ods.table_fee_transactions.create_time IS '【说明】这条台费流水记录的创建时间,通常接近结账时间。 【示例】2025-11-09 23:35:57(用于这条台费流水记录的创建时间,通常接近结账时间)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - create_time。';
COMMENT ON COLUMN billiards_ods.table_fee_transactions.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - $。';
COMMENT ON COLUMN billiards_ods.table_fee_transactions.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】table_fee_transactions.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】table_fee_transactions.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.table_fee_transactions.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/table_fee_transactions.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】table_fee_transactions.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/table_fee_transactions.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】table_fee_transactions.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.table_fee_transactions.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】table_fee_transactions.json - ETL元数据 - 无。';
@@ -1090,7 +1090,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.goods_stock_movements (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.goods_stock_movements IS 'ODS 原始明细表:商品库存变动流水。来源:C:/dev/LLTQ/export/test-json-doc/goods_stock_movements.json;分析:goods_stock_movements-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.goods_stock_movements IS 'ODS 原始明细表:商品库存变动流水。来源:export/test-json-doc/goods_stock_movements.json;分析:goods_stock_movements-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.goods_stock_movements.siteGoodsStockId IS '【说明】门店某个“商品库存记录”的主键 ID。 【示例】2957911857581957(用于门店某个“商品库存记录”的主键 ID)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - siteGoodsStockId。';
COMMENT ON COLUMN billiards_ods.goods_stock_movements.tenantId IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - tenantId。';
COMMENT ON COLUMN billiards_ods.goods_stock_movements.siteId IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - siteId。';
@@ -1111,7 +1111,7 @@ COMMENT ON COLUMN billiards_ods.goods_stock_movements.remark IS '【说明】备
COMMENT ON COLUMN billiards_ods.goods_stock_movements.operatorName IS '【说明】执行此次库存变动的操作人。 【示例】收银员:郑丽珊(用于执行此次库存变动的操作人)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - operatorName。';
COMMENT ON COLUMN billiards_ods.goods_stock_movements.createTime IS '【说明】这条库存变动记录的创建时间,即发生库存变更的时间点。 【示例】2025-11-09 23:23:34(用于这条库存变动记录的创建时间,即发生库存变更的时间点)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - createTime。';
COMMENT ON COLUMN billiards_ods.goods_stock_movements.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】goods_stock_movements.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】goods_stock_movements.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.goods_stock_movements.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/goods_stock_movements.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】goods_stock_movements.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/goods_stock_movements.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】goods_stock_movements.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.goods_stock_movements.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】goods_stock_movements.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.goods_stock_movements.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - $。';
@@ -1134,7 +1134,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.stock_goods_category_tree (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.stock_goods_category_tree IS 'ODS 原始明细表:商品分类树。来源:C:/dev/LLTQ/export/test-json-doc/stock_goods_category_tree.json;分析:stock_goods_category_tree-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.stock_goods_category_tree IS 'ODS 原始明细表:商品分类树。来源:export/test-json-doc/stock_goods_category_tree.json;分析:stock_goods_category_tree-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.id IS '【说明】分类节点主键 ID(在商品分类维度中的唯一标识)。 【示例】2790683528350533(用于分类节点主键 ID(在商品分类维度中的唯一标识))。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - id。';
COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.tenant_id IS '【说明】租户 ID(品牌/商户 ID)。 【示例】2790683160709957(用于租户 ID(品牌/商户 ID))。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - tenant_id。';
COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.category_name IS '【说明】分类名称(实际业务分类名称)。 【示例】槟榔(用于分类名称(实际业务分类名称))。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - category_name。';
@@ -1147,7 +1147,7 @@ COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.categoryBoxes IS '【
COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.sort IS '【说明】分类的排序序号,用于前端展示顺序的控制。 【示例】1(分类的排序序号,用于前端展示顺序的控制)。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - sort。';
COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.is_warehousing IS '【说明】本文件可视为“所有参与库存管理的商品分类清单”,因此均为 1。 【示例】1(用于本文件可视为“所有参与库存管理的商品分类清单”,因此均为 1)。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - is_warehousing。';
COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】stock_goods_category_tree.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】stock_goods_category_tree.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/stock_goods_category_tree.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】stock_goods_category_tree.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/stock_goods_category_tree.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】stock_goods_category_tree.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】stock_goods_category_tree.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - $。';
@@ -1173,7 +1173,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.goods_stock_summary (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.goods_stock_summary IS 'ODS 原始明细表:商品库存汇总。来源:C:/dev/LLTQ/export/test-json-doc/goods_stock_summary.json;分析:goods_stock_summary-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.goods_stock_summary IS 'ODS 原始明细表:商品库存汇总。来源:export/test-json-doc/goods_stock_summary.json;分析:goods_stock_summary-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.goods_stock_summary.siteGoodsId IS '【说明】门店商品 ID,本库存汇总表的主键,对应某个具体商品在本店的唯一标识。 【示例】2791953867886725(用于门店商品 ID,本库存汇总表的主键,对应某个具体商品在本店的唯一标识)。 【JSON字段】goods_stock_summary.json - $ - siteGoodsId。';
COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsName IS '【说明】商品名称,冗余于门店商品档案的 goods_name。 【示例】东方树叶(用于商品名称,冗余于门店商品档案的 goods_name)。 【JSON字段】goods_stock_summary.json - $ - goodsName。';
COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsUnit IS '【说明】商品的计量单位(售卖单位)。 【示例】瓶(用于商品的计量单位(售卖单位))。 【JSON字段】goods_stock_summary.json - $ - goodsUnit。';
@@ -1189,7 +1189,7 @@ COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeSaleMoney IS '【说明
COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeInventory IS '【说明】查询区间内的 盘点调整净变动量(盘盈–盘亏)。 【示例】0(用于查询区间内的 盘点调整净变动量(盘盈–盘亏))。 【JSON字段】goods_stock_summary.json - $ - rangeInventory。';
COMMENT ON COLUMN billiards_ods.goods_stock_summary.currentStock IS '【说明】导出时刻的实时库存数量。 【示例】118(用于导出时刻的实时库存数量)。 【JSON字段】goods_stock_summary.json - $ - currentStock。';
COMMENT ON COLUMN billiards_ods.goods_stock_summary.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】goods_stock_summary.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】goods_stock_summary.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.goods_stock_summary.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/goods_stock_summary.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】goods_stock_summary.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.goods_stock_summary.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/goods_stock_summary.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】goods_stock_summary.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.goods_stock_summary.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】goods_stock_summary.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.goods_stock_summary.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】goods_stock_summary.json - $ - $。';
@@ -1212,7 +1212,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.payment_transactions (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.payment_transactions IS 'ODS 原始明细表:支付流水。来源:C:/dev/LLTQ/export/test-json-doc/payment_transactions.json;分析:payment_transactions-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.payment_transactions IS 'ODS 原始明细表:支付流水。来源:export/test-json-doc/payment_transactions.json;分析:payment_transactions-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.payment_transactions.id IS '【说明】支付流水记录的主键 ID。 【示例】2957924026486597(用于支付流水记录的主键 ID)。 【JSON字段】payment_transactions.json - $ - id。';
COMMENT ON COLUMN billiards_ods.payment_transactions.site_id IS '【说明】支付记录所属的门店 ID。 【示例】2790685415443269(用于支付记录所属的门店 ID)。 【JSON字段】payment_transactions.json - $ - site_id。';
COMMENT ON COLUMN billiards_ods.payment_transactions.siteProfile IS '【说明】门店信息快照,与其他 JSON 中的 siteProfile 结构一致。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(用于门店信息快照,与其他 JSON 中的 siteProfile 结构一致)。 【JSON字段】payment_transactions.json - $ - siteProfile。';
@@ -1225,7 +1225,7 @@ COMMENT ON COLUMN billiards_ods.payment_transactions.create_time IS '【说明
COMMENT ON COLUMN billiards_ods.payment_transactions.payment_method IS '【说明】支付方式枚举,例如微信、支付宝、现金、银行卡、储值卡等某一种。 【示例】4(用于支付方式枚举,例如微信、支付宝、现金、银行卡、储值卡等某一种)。 【JSON字段】payment_transactions.json - $ - payment_method。';
COMMENT ON COLUMN billiards_ods.payment_transactions.online_pay_channel IS '【说明】每一笔结账单(settleList.id)对应一条支付记录(当前样本中是一条记录,relate_id 唯一)。 【示例】0(用于每一笔结账单(settleList.id)对应一条支付记录(当前样本中是一条记录,relate_id 唯一))。 【JSON字段】payment_transactions.json - $ - online_pay_channel。';
COMMENT ON COLUMN billiards_ods.payment_transactions.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】payment_transactions.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】payment_transactions.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.payment_transactions.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/payment_transactions.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】payment_transactions.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.payment_transactions.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/payment_transactions.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】payment_transactions.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.payment_transactions.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】payment_transactions.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.payment_transactions.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】payment_transactions.json - $ - $。';
@@ -1269,7 +1269,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.refund_transactions (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.refund_transactions IS 'ODS 原始明细表:退款流水。来源:C:/dev/LLTQ/export/test-json-doc/refund_transactions.json;分析:refund_transactions-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.refund_transactions IS 'ODS 原始明细表:退款流水。来源:export/test-json-doc/refund_transactions.json;分析:refund_transactions-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.refund_transactions.id IS '【说明】本条 退款流水 的唯一 ID。 【示例】2955202296416389(用于本条 退款流水 的唯一 ID)。 【JSON字段】refund_transactions.json - $ - id。';
COMMENT ON COLUMN billiards_ods.refund_transactions.tenant_id IS '【说明】租户/品牌 ID,全系统维度标识该商户。 【示例】2790683160709957(用于租户/品牌 ID,全系统维度标识该商户)。 【JSON字段】refund_transactions.json - $ - tenant_id。';
COMMENT ON COLUMN billiards_ods.refund_transactions.tenantName IS '【说明】租户(商户)名称。 【示例】朗朗桌球(用于租户(商户)名称)。 【JSON字段】refund_transactions.json - $ - tenantName。';
@@ -1303,7 +1303,7 @@ COMMENT ON COLUMN billiards_ods.refund_transactions.is_delete IS '【说明】
COMMENT ON COLUMN billiards_ods.refund_transactions.balance_frozen_amount IS '【说明】涉及会员储值卡退款时,暂时冻结的余额金额。 【示例】0.0(用于涉及会员储值卡退款时,暂时冻结的余额金额)。 【JSON字段】refund_transactions.json - $ - balance_frozen_amount。';
COMMENT ON COLUMN billiards_ods.refund_transactions.card_frozen_amount IS '【说明】与上一个类似,偏向“某张卡的被冻结金额”,也与会员卡/储值账户相关。 【示例】0.0(用于与上一个类似,偏向“某张卡的被冻结金额”,也与会员卡/储值账户相关)。 【JSON字段】refund_transactions.json - $ - card_frozen_amount。';
COMMENT ON COLUMN billiards_ods.refund_transactions.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】refund_transactions.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】refund_transactions.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.refund_transactions.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/refund_transactions.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】refund_transactions.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/refund_transactions.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】refund_transactions.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.refund_transactions.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】refund_transactions.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.refund_transactions.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】refund_transactions.json - $ - $。';
@@ -1341,7 +1341,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.platform_coupon_redemption_records (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.platform_coupon_redemption_records IS 'ODS 原始明细表:平台券核销/使用记录。来源:C:/dev/LLTQ/export/test-json-doc/platform_coupon_redemption_records.json;分析:platform_coupon_redemption_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.platform_coupon_redemption_records IS 'ODS 原始明细表:平台券核销/使用记录。来源:export/test-json-doc/platform_coupon_redemption_records.json;分析:platform_coupon_redemption_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.id IS '【说明】本条平台验券记录在本系统内的主键 ID。 【示例】2957929042218501(用于本条平台验券记录在本系统内的主键 ID)。 【JSON字段】platform_coupon_redemption_records.json - $ - id。';
COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.verify_id IS '【说明】平台核销记录 ID(某些平台会为每一次核销生成一个唯一 ID)。 【示例】7570689090418149418(用于平台核销记录 ID(某些平台会为每一次核销生成一个唯一 ID))。 【JSON字段】platform_coupon_redemption_records.json - $ - verify_id。';
COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.certificate_id IS '【说明】平台侧的凭证 ID(通常由第三方团购平台生成的券实例 ID)。 【示例】5008024789379597447(用于平台侧的凭证 ID(通常由第三方团购平台生成的券实例 ID))。 【JSON字段】platform_coupon_redemption_records.json - $ - certificate_id。';
@@ -1369,7 +1369,7 @@ COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.operator_name
COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.is_delete IS '【说明】把平台验券记录挂到本门店的一条订单上。 【示例】0(用于把平台验券记录挂到本门店的一条订单上)。 【JSON字段】platform_coupon_redemption_records.json - $ - is_delete。';
COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.siteProfile IS '【说明】门店信息快照。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(用于门店信息快照)。 【JSON字段】platform_coupon_redemption_records.json - $ - siteProfile。';
COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】platform_coupon_redemption_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】platform_coupon_redemption_records.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/platform_coupon_redemption_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】platform_coupon_redemption_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/platform_coupon_redemption_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】platform_coupon_redemption_records.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】platform_coupon_redemption_records.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】platform_coupon_redemption_records.json - $ - $。';
@@ -1412,7 +1412,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.tenant_goods_master (
fetched_at TIMESTAMPTZ DEFAULT now()
);
-COMMENT ON TABLE billiards_ods.tenant_goods_master IS 'ODS 原始明细表:租户商品主数据。来源:C:/dev/LLTQ/export/test-json-doc/tenant_goods_master.json;分析:tenant_goods_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.tenant_goods_master IS 'ODS 原始明细表:租户商品主数据。来源:export/test-json-doc/tenant_goods_master.json;分析:tenant_goods_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.tenant_goods_master.id IS '【说明】商品档案主键 ID,唯一标识一条商品。 【示例】2791925230096261(用于商品档案主键 ID,唯一标识一条商品)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - id。';
COMMENT ON COLUMN billiards_ods.tenant_goods_master.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - tenant_id。';
COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_name IS '【说明】商品名称(前台展示名称)。 【示例】东方树叶(用于商品名称(前台展示名称))。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_name。';
@@ -1446,7 +1446,7 @@ COMMENT ON COLUMN billiards_ods.tenant_goods_master.create_time IS '【说明】
COMMENT ON COLUMN billiards_ods.tenant_goods_master.update_time IS '【说明】商品档案最近一次修改时间。 【示例】2025-10-29 23:51:38(用于商品档案最近一次修改时间)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - update_time。';
COMMENT ON COLUMN billiards_ods.tenant_goods_master.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - $。';
COMMENT ON COLUMN billiards_ods.tenant_goods_master.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】tenant_goods_master.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】tenant_goods_master.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.tenant_goods_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/tenant_goods_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】tenant_goods_master.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/tenant_goods_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】tenant_goods_master.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.tenant_goods_master.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】tenant_goods_master.json - ETL元数据 - 无。';
@@ -1492,7 +1492,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.group_buy_packages (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.group_buy_packages IS 'ODS 原始明细表:团购套餐主数据。来源:C:/dev/LLTQ/export/test-json-doc/group_buy_packages.json;分析:group_buy_packages-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.group_buy_packages IS 'ODS 原始明细表:团购套餐主数据。来源:export/test-json-doc/group_buy_packages.json;分析:group_buy_packages-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.group_buy_packages.id IS '【说明】门店侧套餐 ID,本文件内部的主键。 【示例】2939215004469573(用于门店侧套餐 ID,本文件内部的主键)。 【JSON字段】group_buy_packages.json - data.packageCouponList - id。';
COMMENT ON COLUMN billiards_ods.group_buy_packages.package_id IS '【说明】“上层套餐 ID” 或“总部/系统级套餐 ID”。 【示例】1814707240811572(用于“上层套餐 ID” 或“总部/系统级套餐 ID”)。 【JSON字段】group_buy_packages.json - data.packageCouponList - package_id。';
COMMENT ON COLUMN billiards_ods.group_buy_packages.package_name IS '【说明】团购套餐名称,用于前台展示和核销界面。 【示例】早场特惠一小时(团购套餐名称,用于前台展示和核销界面)。 【JSON字段】group_buy_packages.json - data.packageCouponList - package_name。';
@@ -1529,7 +1529,7 @@ COMMENT ON COLUMN billiards_ods.group_buy_packages.area_tag_type IS '【说明
COMMENT ON COLUMN billiards_ods.group_buy_packages.creator_name IS '【说明】创建人信息,一般包含“角色:姓名”。 【示例】店长:郑丽珊(用于创建人信息,一般包含“角色:姓名”)。 【JSON字段】group_buy_packages.json - data.packageCouponList - creator_name。';
COMMENT ON COLUMN billiards_ods.group_buy_packages.create_time IS '【说明】该套餐在系统中创建的时间。 【示例】2025-10-27 18:24:09(用于该套餐在系统中创建的时间)。 【JSON字段】group_buy_packages.json - data.packageCouponList - create_time。';
COMMENT ON COLUMN billiards_ods.group_buy_packages.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】group_buy_packages.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】group_buy_packages.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.group_buy_packages.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/group_buy_packages.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】group_buy_packages.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/group_buy_packages.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】group_buy_packages.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.group_buy_packages.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】group_buy_packages.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.group_buy_packages.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】group_buy_packages.json - data.packageCouponList - $。';
@@ -1584,7 +1584,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.group_buy_redemption_records (
fetched_at TIMESTAMPTZ DEFAULT now()
);
-COMMENT ON TABLE billiards_ods.group_buy_redemption_records IS 'ODS 原始明细表:团购核销记录。来源:C:/dev/LLTQ/export/test-json-doc/group_buy_redemption_records.json;分析:group_buy_redemption_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.group_buy_redemption_records IS 'ODS 原始明细表:团购核销记录。来源:export/test-json-doc/group_buy_redemption_records.json;分析:group_buy_redemption_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.id IS '【说明】本条“团购套餐流水”记录的 主键 ID。 【示例】2957924029615941(用于本条“团购套餐流水”记录的 主键 ID)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - id。';
COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - tenant_id。';
COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.site_id IS '【说明】门店 ID,与其它 JSON 中一致。 【示例】2790685415443269(用于门店 ID,与其它 JSON 中一致)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - site_id。';
@@ -1630,7 +1630,7 @@ COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.is_delete IS '【
COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.create_time IS '【说明】本条团购套餐使用流水创建时间(即券核销时间,或与结账时间接近)。 【示例】2025-11-09 23:35:57(用于本条团购套餐使用流水创建时间(即券核销时间,或与结账时间接近))。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - create_time。';
COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - $。';
COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】group_buy_redemption_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】group_buy_redemption_records.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/group_buy_redemption_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】group_buy_redemption_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/group_buy_redemption_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】group_buy_redemption_records.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】group_buy_redemption_records.json - ETL元数据 - 无。';
@@ -1679,7 +1679,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.settlement_ticket_details (
fetched_at TIMESTAMPTZ DEFAULT now()
);
-COMMENT ON TABLE billiards_ods.settlement_ticket_details IS 'ODS 原始明细表:结算小票明细。来源:C:/dev/LLTQ/export/test-json-doc/settlement_ticket_details.json;分析:settlement_ticket_details-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.settlement_ticket_details IS 'ODS 原始明细表:结算小票明细。来源:export/test-json-doc/settlement_ticket_details.json;分析:settlement_ticket_details-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderSettleId IS '【说明】结算单 ID(和顶层字段相同,再次冗余)。 【示例】2957922914357125(用于结算单 ID(和顶层字段相同,再次冗余))。 【JSON字段】settlement_ticket_details.json - $ - orderSettleId。';
COMMENT ON COLUMN billiards_ods.settlement_ticket_details.actualPayment IS '【说明】本单实际支付金额总和(顾客本次实际付出:现金 + 线上 + 会员余额等)。 【示例】NULL(用于本单实际支付金额总和(顾客本次实际付出:现金 + 线上 + 会员余额等))。 【JSON字段】settlement_ticket_details.json - $ - actualPayment。';
COMMENT ON COLUMN billiards_ods.settlement_ticket_details.adjustAmount IS '【说明】人工调价/整单调整金额(例如手工改价、折扣调整),是所有类型的手工调整合计。 【示例】NULL(用于人工调价/整单调整金额(例如手工改价、折扣调整),是所有类型的手工调整合计)。 【JSON字段】settlement_ticket_details.json - $ - adjustAmount。';
@@ -1720,7 +1720,7 @@ COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderItem IS '【说
COMMENT ON COLUMN billiards_ods.settlement_ticket_details.tenantMemberCardLogs IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_ticket_details.json - $ - tenantMemberCardLogs。';
COMMENT ON COLUMN billiards_ods.settlement_ticket_details.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】settlement_ticket_details.json - $ - $。';
COMMENT ON COLUMN billiards_ods.settlement_ticket_details.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】settlement_ticket_details.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】settlement_ticket_details.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.settlement_ticket_details.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/settlement_ticket_details.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】settlement_ticket_details.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/settlement_ticket_details.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】settlement_ticket_details.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.settlement_ticket_details.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】settlement_ticket_details.json - ETL元数据 - 无。';
@@ -1776,7 +1776,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.store_goods_master (
fetched_at TIMESTAMPTZ DEFAULT now()
);
-COMMENT ON TABLE billiards_ods.store_goods_master IS 'ODS 原始明细表:门店商品主数据。来源:C:/dev/LLTQ/export/test-json-doc/store_goods_master.json;分析:store_goods_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.store_goods_master IS 'ODS 原始明细表:门店商品主数据。来源:export/test-json-doc/store_goods_master.json;分析:store_goods_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.store_goods_master.id IS '【说明】门店商品 ID,门店维度的商品主键。 【示例】2793025851560005(用于门店商品 ID,门店维度的商品主键)。 【JSON字段】store_goods_master.json - data.orderGoodsList - id。';
COMMENT ON COLUMN billiards_ods.store_goods_master.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】store_goods_master.json - data.orderGoodsList - tenant_id。';
COMMENT ON COLUMN billiards_ods.store_goods_master.site_id IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【JSON字段】store_goods_master.json - data.orderGoodsList - site_id。';
@@ -1823,7 +1823,7 @@ COMMENT ON COLUMN billiards_ods.store_goods_master.create_time IS '【说明】
COMMENT ON COLUMN billiards_ods.store_goods_master.update_time IS '【说明】最后一次修改该商品档案的时间(包括价格调整、状态变更等)。 【示例】2025-11-09 07:23:47(用于最后一次修改该商品档案的时间(包括价格调整、状态变更等))。 【JSON字段】store_goods_master.json - data.orderGoodsList - update_time。';
COMMENT ON COLUMN billiards_ods.store_goods_master.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】store_goods_master.json - data.orderGoodsList - $。';
COMMENT ON COLUMN billiards_ods.store_goods_master.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】store_goods_master.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】store_goods_master.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.store_goods_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/store_goods_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】store_goods_master.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/store_goods_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】store_goods_master.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.store_goods_master.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】store_goods_master.json - ETL元数据 - 无。';
@@ -1885,7 +1885,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.store_goods_sales_records (
fetched_at TIMESTAMPTZ DEFAULT now()
);
-COMMENT ON TABLE billiards_ods.store_goods_sales_records IS 'ODS 原始明细表:门店商品销售流水。来源:C:/dev/LLTQ/export/test-json-doc/store_goods_sales_records.json;分析:store_goods_sales_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.store_goods_sales_records IS 'ODS 原始明细表:门店商品销售流水。来源:export/test-json-doc/store_goods_sales_records.json;分析:store_goods_sales_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.store_goods_sales_records.id IS '【说明】本条「门店销售流水」记录的主键 ID。 【示例】2957924029550406(用于本条「门店销售流水」记录的主键 ID)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - id。';
COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - tenant_id。';
COMMENT ON COLUMN billiards_ods.store_goods_sales_records.site_id IS '【说明】门店 ID(系统主键)。 【示例】2790685415443269(用于门店 ID(系统主键))。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - site_id。';
@@ -1939,7 +1939,7 @@ COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_goods_category_
COMMENT ON COLUMN billiards_ods.store_goods_sales_records.create_time IS '【说明】销售记录创建时间,通常就是结账时间或录入时间。 【示例】2025-11-09 23:35:57(用于销售记录创建时间,通常就是结账时间或录入时间)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - create_time。';
COMMENT ON COLUMN billiards_ods.store_goods_sales_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - $。';
COMMENT ON COLUMN billiards_ods.store_goods_sales_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】store_goods_sales_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】store_goods_sales_records.json - ETL元数据 - 无。';
-COMMENT ON COLUMN billiards_ods.store_goods_sales_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/store_goods_sales_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】store_goods_sales_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/store_goods_sales_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】store_goods_sales_records.json - ETL元数据 - 无。';
COMMENT ON COLUMN billiards_ods.store_goods_sales_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】store_goods_sales_records.json - ETL元数据 - 无。';
diff --git a/etl_billiards/database/schema_dwd_doc.sql b/etl_billiards/database/schema_dwd_doc.sql
index 17d5955..15bf56c 100644
--- a/etl_billiards/database/schema_dwd_doc.sql
+++ b/etl_billiards/database/schema_dwd_doc.sql
@@ -1324,7 +1324,8 @@ CREATE TABLE IF NOT EXISTS dwd_store_goods_sale_Ex (
push_money NUMERIC(18,2),
is_single_order INTEGER,
sales_type INTEGER,
- operator_id BIGINT
+ operator_id BIGINT,
+ PRIMARY KEY (store_goods_sale_id)
);
COMMENT ON TABLE billiards_dwd.dwd_store_goods_sale_ex IS 'DWD 明细事实表(扩展字段表):dwd_store_goods_sale_ex。ODS 来源表:billiards_ods.store_goods_sales_records(对应 JSON:store_goods_sales_records.json;分析:store_goods_sales_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
diff --git a/etl_billiards/database/seed_scheduler_tasks.sql b/etl_billiards/database/seed_scheduler_tasks.sql
index 94bf66d..2c62a61 100644
--- a/etl_billiards/database/seed_scheduler_tasks.sql
+++ b/etl_billiards/database/seed_scheduler_tasks.sql
@@ -17,6 +17,7 @@ task_codes AS (
'ASSISTANTS',
'COUPON_USAGE',
'CHECK_CUTOFF',
+ 'DATA_INTEGRITY_CHECK',
'DWD_LOAD_FROM_ODS',
'DWD_QUALITY_CHECK',
'INIT_DWD_SCHEMA',
diff --git a/etl_billiards/dist/ETL_Manager/ETL_Manager.exe b/etl_billiards/dist/ETL_Manager/ETL_Manager.exe
new file mode 100644
index 0000000..4c8e672
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/ETL_Manager.exe differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/LIBBZ2.dll b/etl_billiards/dist/ETL_Manager/_internal/LIBBZ2.dll
new file mode 100644
index 0000000..74d8857
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/LIBBZ2.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/MSVCP140.dll b/etl_billiards/dist/ETL_Manager/_internal/MSVCP140.dll
new file mode 100644
index 0000000..5a1cb64
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/MSVCP140.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/MSVCP140.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/MSVCP140.dll
new file mode 100644
index 0000000..cefb988
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/MSVCP140.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/MSVCP140_1.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/MSVCP140_1.dll
new file mode 100644
index 0000000..9346cb5
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/MSVCP140_1.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/MSVCP140_2.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/MSVCP140_2.dll
new file mode 100644
index 0000000..038f5af
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/MSVCP140_2.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Core.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Core.dll
new file mode 100644
index 0000000..3bb514e
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Core.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Gui.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Gui.dll
new file mode 100644
index 0000000..cf497ab
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Gui.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Network.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Network.dll
new file mode 100644
index 0000000..629346d
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Network.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6OpenGL.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6OpenGL.dll
new file mode 100644
index 0000000..fa371dd
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6OpenGL.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Pdf.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Pdf.dll
new file mode 100644
index 0000000..8cf71ef
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Pdf.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Qml.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Qml.dll
new file mode 100644
index 0000000..bfc290c
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Qml.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6QmlMeta.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6QmlMeta.dll
new file mode 100644
index 0000000..a821374
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6QmlMeta.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6QmlModels.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6QmlModels.dll
new file mode 100644
index 0000000..0fd70ad
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6QmlModels.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6QmlWorkerScript.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6QmlWorkerScript.dll
new file mode 100644
index 0000000..3643679
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6QmlWorkerScript.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Quick.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Quick.dll
new file mode 100644
index 0000000..ae1a24e
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Quick.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Svg.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Svg.dll
new file mode 100644
index 0000000..453ad91
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Svg.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6VirtualKeyboard.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6VirtualKeyboard.dll
new file mode 100644
index 0000000..5feca02
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6VirtualKeyboard.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Widgets.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Widgets.dll
new file mode 100644
index 0000000..046f4d0
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/Qt6Widgets.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/VCRUNTIME140.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/VCRUNTIME140.dll
new file mode 100644
index 0000000..cee70b5
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/VCRUNTIME140.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/VCRUNTIME140_1.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/VCRUNTIME140_1.dll
new file mode 100644
index 0000000..a46c5ba
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/VCRUNTIME140_1.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/opengl32sw.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/opengl32sw.dll
new file mode 100644
index 0000000..7ab91c2
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/opengl32sw.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/generic/qtuiotouchplugin.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/generic/qtuiotouchplugin.dll
new file mode 100644
index 0000000..dcfacd8
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/generic/qtuiotouchplugin.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/iconengines/qsvgicon.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/iconengines/qsvgicon.dll
new file mode 100644
index 0000000..61b6ecb
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/iconengines/qsvgicon.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qgif.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qgif.dll
new file mode 100644
index 0000000..1185f94
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qgif.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qicns.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qicns.dll
new file mode 100644
index 0000000..6e75f1c
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qicns.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qico.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qico.dll
new file mode 100644
index 0000000..af589da
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qico.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qjpeg.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qjpeg.dll
new file mode 100644
index 0000000..6986cae
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qjpeg.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qpdf.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qpdf.dll
new file mode 100644
index 0000000..ff752a3
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qpdf.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qsvg.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qsvg.dll
new file mode 100644
index 0000000..cb9b8cd
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qsvg.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qtga.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qtga.dll
new file mode 100644
index 0000000..0b5911a
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qtga.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qtiff.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qtiff.dll
new file mode 100644
index 0000000..f5ed6dc
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qtiff.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qwbmp.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qwbmp.dll
new file mode 100644
index 0000000..7e284a8
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qwbmp.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qwebp.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qwebp.dll
new file mode 100644
index 0000000..1bf4197
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/imageformats/qwebp.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/networkinformation/qnetworklistmanager.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/networkinformation/qnetworklistmanager.dll
new file mode 100644
index 0000000..a1c740e
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/networkinformation/qnetworklistmanager.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/platforminputcontexts/qtvirtualkeyboardplugin.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/platforminputcontexts/qtvirtualkeyboardplugin.dll
new file mode 100644
index 0000000..3476b34
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/platforminputcontexts/qtvirtualkeyboardplugin.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/platforms/qdirect2d.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/platforms/qdirect2d.dll
new file mode 100644
index 0000000..4ba4f87
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/platforms/qdirect2d.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/platforms/qminimal.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/platforms/qminimal.dll
new file mode 100644
index 0000000..1cce328
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/platforms/qminimal.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/platforms/qoffscreen.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/platforms/qoffscreen.dll
new file mode 100644
index 0000000..96d07fa
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/platforms/qoffscreen.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/platforms/qwindows.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/platforms/qwindows.dll
new file mode 100644
index 0000000..64e6c14
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/platforms/qwindows.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/styles/qmodernwindowsstyle.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/styles/qmodernwindowsstyle.dll
new file mode 100644
index 0000000..a06741c
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/styles/qmodernwindowsstyle.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/tls/qcertonlybackend.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/tls/qcertonlybackend.dll
new file mode 100644
index 0000000..123843a
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/tls/qcertonlybackend.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/tls/qopensslbackend.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/tls/qopensslbackend.dll
new file mode 100644
index 0000000..63b120e
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/tls/qopensslbackend.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/tls/qschannelbackend.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/tls/qschannelbackend.dll
new file mode 100644
index 0000000..ac0ad9f
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/plugins/tls/qschannelbackend.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/pyside6.abi3.dll b/etl_billiards/dist/ETL_Manager/_internal/PySide6/pyside6.abi3.dll
new file mode 100644
index 0000000..fd9bc40
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/pyside6.abi3.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_ar.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_ar.qm
new file mode 100644
index 0000000..ddce1e8
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_ar.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_bg.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_bg.qm
new file mode 100644
index 0000000..3b5c3ad
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_bg.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_ca.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_ca.qm
new file mode 100644
index 0000000..6b46339
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_ca.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_cs.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_cs.qm
new file mode 100644
index 0000000..95be1ea
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_cs.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_da.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_da.qm
new file mode 100644
index 0000000..3ffc148
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_da.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_de.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_de.qm
new file mode 100644
index 0000000..dec7e14
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_de.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_en.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_en.qm
new file mode 100644
index 0000000..937ea3e
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_en.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_es.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_es.qm
new file mode 100644
index 0000000..7ea8766
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_es.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_fa.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_fa.qm
new file mode 100644
index 0000000..b964c32
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_fa.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_fi.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_fi.qm
new file mode 100644
index 0000000..a4cb291
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_fi.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_fr.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_fr.qm
new file mode 100644
index 0000000..7d74c4a
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_fr.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_gd.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_gd.qm
new file mode 100644
index 0000000..7b4d040
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_gd.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_gl.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_gl.qm
new file mode 100644
index 0000000..5255734
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_gl.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_he.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_he.qm
new file mode 100644
index 0000000..c9d3107
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_he.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_ar.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_ar.qm
new file mode 100644
index 0000000..aa92f02
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_ar.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_bg.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_bg.qm
new file mode 100644
index 0000000..c65d260
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_bg.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_ca.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_ca.qm
new file mode 100644
index 0000000..43fd055
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_ca.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_cs.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_cs.qm
new file mode 100644
index 0000000..fd50d84
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_cs.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_da.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_da.qm
new file mode 100644
index 0000000..2c26d75
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_da.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_de.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_de.qm
new file mode 100644
index 0000000..a6b85a0
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_de.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_en.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_en.qm
new file mode 100644
index 0000000..937ea3e
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_en.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_es.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_es.qm
new file mode 100644
index 0000000..94e3967
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_es.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_fr.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_fr.qm
new file mode 100644
index 0000000..4703e91
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_fr.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_gl.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_gl.qm
new file mode 100644
index 0000000..aef1ab6
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_gl.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_hr.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_hr.qm
new file mode 100644
index 0000000..2151a78
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_hr.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_hu.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_hu.qm
new file mode 100644
index 0000000..6c4db44
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_hu.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_it.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_it.qm
new file mode 100644
index 0000000..e3bc252
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_it.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_ja.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_ja.qm
new file mode 100644
index 0000000..e64507a
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_ja.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_ka.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_ka.qm
new file mode 100644
index 0000000..ec0ad83
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_ka.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_ko.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_ko.qm
new file mode 100644
index 0000000..f6b1d13
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_ko.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_nl.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_nl.qm
new file mode 100644
index 0000000..eb22989
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_nl.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_nn.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_nn.qm
new file mode 100644
index 0000000..aa47765
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_nn.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_pl.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_pl.qm
new file mode 100644
index 0000000..c2b82b2
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_pl.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_pt_BR.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_pt_BR.qm
new file mode 100644
index 0000000..21b5d02
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_pt_BR.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_ru.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_ru.qm
new file mode 100644
index 0000000..2a7d88b
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_ru.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_sk.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_sk.qm
new file mode 100644
index 0000000..8a4a447
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_sk.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_sl.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_sl.qm
new file mode 100644
index 0000000..fd122a6
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_sl.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_sv.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_sv.qm
new file mode 100644
index 0000000..834bdf7
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_sv.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_tr.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_tr.qm
new file mode 100644
index 0000000..52178a8
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_tr.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_uk.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_uk.qm
new file mode 100644
index 0000000..192d28d
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_uk.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_zh_CN.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_zh_CN.qm
new file mode 100644
index 0000000..2eb396f
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_zh_CN.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_zh_TW.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_zh_TW.qm
new file mode 100644
index 0000000..0f41b44
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_help_zh_TW.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_hr.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_hr.qm
new file mode 100644
index 0000000..0a1f8cd
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_hr.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_hu.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_hu.qm
new file mode 100644
index 0000000..c6908fc
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_hu.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_it.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_it.qm
new file mode 100644
index 0000000..9cfb64c
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_it.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_ja.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_ja.qm
new file mode 100644
index 0000000..cd4aea4
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_ja.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_ka.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_ka.qm
new file mode 100644
index 0000000..ec430b0
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_ka.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_ko.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_ko.qm
new file mode 100644
index 0000000..b8528c9
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_ko.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_lg.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_lg.qm
new file mode 100644
index 0000000..3e7e410
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_lg.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_lt.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_lt.qm
new file mode 100644
index 0000000..e9c36fe
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_lt.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_lv.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_lv.qm
new file mode 100644
index 0000000..6c1126a
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_lv.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_nl.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_nl.qm
new file mode 100644
index 0000000..936ca0d
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_nl.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_nn.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_nn.qm
new file mode 100644
index 0000000..58c5ca1
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_nn.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_pl.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_pl.qm
new file mode 100644
index 0000000..19d6c0f
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_pl.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_pt_BR.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_pt_BR.qm
new file mode 100644
index 0000000..fe8dc29
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_pt_BR.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_pt_PT.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_pt_PT.qm
new file mode 100644
index 0000000..03353ea
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_pt_PT.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_ru.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_ru.qm
new file mode 100644
index 0000000..3268b91
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_ru.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_sk.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_sk.qm
new file mode 100644
index 0000000..a9b0035
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_sk.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_sl.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_sl.qm
new file mode 100644
index 0000000..bc2073b
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_sl.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_sv.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_sv.qm
new file mode 100644
index 0000000..f8c9010
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_sv.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_tr.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_tr.qm
new file mode 100644
index 0000000..4163108
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_tr.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_uk.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_uk.qm
new file mode 100644
index 0000000..42abff3
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_uk.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_zh_CN.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_zh_CN.qm
new file mode 100644
index 0000000..f35616c
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_zh_CN.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_zh_TW.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_zh_TW.qm
new file mode 100644
index 0000000..ea03c3d
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qt_zh_TW.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_ar.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_ar.qm
new file mode 100644
index 0000000..32861b8
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_ar.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_bg.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_bg.qm
new file mode 100644
index 0000000..faeb167
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_bg.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_ca.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_ca.qm
new file mode 100644
index 0000000..4e362dc
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_ca.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_cs.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_cs.qm
new file mode 100644
index 0000000..459ef26
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_cs.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_da.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_da.qm
new file mode 100644
index 0000000..4ede24b
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_da.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_de.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_de.qm
new file mode 100644
index 0000000..50202fe
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_de.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_en.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_en.qm
new file mode 100644
index 0000000..937ea3e
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_en.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_es.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_es.qm
new file mode 100644
index 0000000..1a13157
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_es.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_fa.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_fa.qm
new file mode 100644
index 0000000..aadc0c1
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_fa.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_fi.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_fi.qm
new file mode 100644
index 0000000..934aecd
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_fi.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_fr.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_fr.qm
new file mode 100644
index 0000000..19f0ba5
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_fr.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_gd.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_gd.qm
new file mode 100644
index 0000000..3fe3841
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_gd.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_he.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_he.qm
new file mode 100644
index 0000000..95ed0c7
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_he.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_hr.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_hr.qm
new file mode 100644
index 0000000..4ed06fb
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_hr.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_hu.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_hu.qm
new file mode 100644
index 0000000..291bb89
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_hu.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_it.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_it.qm
new file mode 100644
index 0000000..a4175b5
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_it.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_ja.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_ja.qm
new file mode 100644
index 0000000..acd2f03
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_ja.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_ka.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_ka.qm
new file mode 100644
index 0000000..2756e92
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_ka.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_ko.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_ko.qm
new file mode 100644
index 0000000..20e4661
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_ko.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_lg.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_lg.qm
new file mode 100644
index 0000000..1cc6285
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_lg.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_lv.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_lv.qm
new file mode 100644
index 0000000..f88a761
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_lv.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_nl.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_nl.qm
new file mode 100644
index 0000000..de4e74a
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_nl.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_nn.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_nn.qm
new file mode 100644
index 0000000..506ec45
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_nn.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_pl.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_pl.qm
new file mode 100644
index 0000000..3c4e03b
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_pl.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_pt_BR.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_pt_BR.qm
new file mode 100644
index 0000000..6fabd0e
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_pt_BR.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_ru.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_ru.qm
new file mode 100644
index 0000000..c1a2286
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_ru.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_sk.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_sk.qm
new file mode 100644
index 0000000..55a377e
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_sk.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_sv.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_sv.qm
new file mode 100644
index 0000000..f86d8d0
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_sv.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_tr.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_tr.qm
new file mode 100644
index 0000000..efed395
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_tr.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_uk.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_uk.qm
new file mode 100644
index 0000000..21a3038
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_uk.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_zh_CN.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_zh_CN.qm
new file mode 100644
index 0000000..6591a69
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_zh_CN.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_zh_TW.qm b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_zh_TW.qm
new file mode 100644
index 0000000..f32a72f
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/PySide6/translations/qtbase_zh_TW.qm differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/VCRUNTIME140.dll b/etl_billiards/dist/ETL_Manager/_internal/VCRUNTIME140.dll
new file mode 100644
index 0000000..2e2bb47
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/VCRUNTIME140.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/VCRUNTIME140_1.dll b/etl_billiards/dist/ETL_Manager/_internal/VCRUNTIME140_1.dll
new file mode 100644
index 0000000..dd0c100
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/VCRUNTIME140_1.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/base_library.zip b/etl_billiards/dist/ETL_Manager/_internal/base_library.zip
new file mode 100644
index 0000000..7353740
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/base_library.zip differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/comerr64.dll b/etl_billiards/dist/ETL_Manager/_internal/comerr64.dll
new file mode 100644
index 0000000..fb5f3e9
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/comerr64.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/database/schema_ODS_doc.sql b/etl_billiards/dist/ETL_Manager/_internal/database/schema_ODS_doc.sql
new file mode 100644
index 0000000..d194c25
--- /dev/null
+++ b/etl_billiards/dist/ETL_Manager/_internal/database/schema_ODS_doc.sql
@@ -0,0 +1,1945 @@
+SET client_encoding TO "UTF8";
+
+DROP SCHEMA IF EXISTS billiards_ods CASCADE;
+CREATE SCHEMA IF NOT EXISTS billiards_ods;
+
+CREATE TABLE IF NOT EXISTS billiards_ods.member_profiles (
+ tenant_id BIGINT,
+ register_site_id BIGINT,
+ site_name TEXT,
+ id BIGINT PRIMARY KEY,
+ system_member_id BIGINT,
+ member_card_grade_code BIGINT,
+ member_card_grade_name TEXT,
+ mobile TEXT,
+ nickname TEXT,
+ point NUMERIC(18,2),
+ growth_value NUMERIC(18,2),
+ referrer_member_id BIGINT,
+ status INT,
+ user_status INT,
+ create_time TIMESTAMP,
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now(),
+ payload JSONB NOT NULL
+);
+
+COMMENT ON TABLE billiards_ods.member_profiles IS 'ODS 原始明细表:会员档案/会员账户信息。来源:export/test-json-doc/member_profiles.json;分析:member_profiles-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.member_profiles.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】member_profiles.json - data.tenantMemberInfos - tenant_id。';
+COMMENT ON COLUMN billiards_ods.member_profiles.register_site_id IS '【说明】会员的注册门店 ID。 【示例】2790685415443269(用于会员的注册门店 ID)。 【JSON字段】member_profiles.json - data.tenantMemberInfos - register_site_id。';
+COMMENT ON COLUMN billiards_ods.member_profiles.site_name IS '【说明】注册门店名称,属于冗余字段,用于直接展示。 【示例】朗朗桌球(注册门店名称,属于冗余字段,用于直接展示)。 【JSON字段】member_profiles.json - data.tenantMemberInfos - site_name。';
+COMMENT ON COLUMN billiards_ods.member_profiles.id IS '【说明】这是“租户内会员账户”的主键 ID。 【示例】2955204541320325(用于这是“租户内会员账户”的主键 ID)。 【JSON字段】member_profiles.json - data.tenantMemberInfos - id。';
+COMMENT ON COLUMN billiards_ods.member_profiles.system_member_id IS '【说明】这是“系统级会员 ID”,在全平台唯一,用来把一个会员在不同门店/不同卡类型下的账户统一到一个“人”的维度上。 【示例】2955204540009605(用于这是“系统级会员 ID”,在全平台唯一,用来把一个会员在不同门店/不同卡类型下的账户统一到一个“人”的维度上)。 【JSON字段】member_profiles.json - data.tenantMemberInfos - system_member_id。';
+COMMENT ON COLUMN billiards_ods.member_profiles.member_card_grade_code IS '【说明】这两个字段是成对出现的:一个数值码,一个中文名称。 【示例】2790683528022853(用于这两个字段是成对出现的:一个数值码,一个中文名称)。 【JSON字段】member_profiles.json - data.tenantMemberInfos - member_card_grade_code。';
+COMMENT ON COLUMN billiards_ods.member_profiles.member_card_grade_name IS '【说明】这是“会员卡种类/等级”的定义字段。 【示例】储值卡(用于这是“会员卡种类/等级”的定义字段)。 【JSON字段】member_profiles.json - data.tenantMemberInfos - member_card_grade_name。';
+COMMENT ON COLUMN billiards_ods.member_profiles.mobile IS '【说明】会员绑定的手机号码。 【示例】18620043391(用于会员绑定的手机号码)。 【JSON字段】member_profiles.json - data.tenantMemberInfos - mobile。';
+COMMENT ON COLUMN billiards_ods.member_profiles.nickname IS '【说明】会员在当前租户下的显示名称(可以是姓名,也可以是昵称)。 【示例】胡先生(用于会员在当前租户下的显示名称(可以是姓名,也可以是昵称))。 【JSON字段】member_profiles.json - data.tenantMemberInfos - nickname。';
+COMMENT ON COLUMN billiards_ods.member_profiles.point IS '【说明】当前积分余额(这条会员账户的积分值)。 【示例】0.0(用于当前积分余额(这条会员账户的积分值))。 【JSON字段】member_profiles.json - data.tenantMemberInfos - point。';
+COMMENT ON COLUMN billiards_ods.member_profiles.growth_value IS '【说明】成长值 / 经验值,用于会员等级晋升的累计指标。 【示例】0.0(成长值 / 经验值,用于会员等级晋升的累计指标)。 【JSON字段】member_profiles.json - data.tenantMemberInfos - growth_value。';
+COMMENT ON COLUMN billiards_ods.member_profiles.referrer_member_id IS '【说明】推荐人会员 ID,用于记录该会员是由哪位老会员推荐。 【示例】0(推荐人会员 ID,用于记录该会员是由哪位老会员推荐)。 【JSON字段】member_profiles.json - data.tenantMemberInfos - referrer_member_id。';
+COMMENT ON COLUMN billiards_ods.member_profiles.status IS '【说明】帐户状态(偏“卡状态/档案状态”)。 【示例】1(用于帐户状态(偏“卡状态/档案状态”))。 【JSON字段】member_profiles.json - data.tenantMemberInfos - status。';
+COMMENT ON COLUMN billiards_ods.member_profiles.user_status IS '【说明】用户账号状态(偏“用户逻辑”层面的状态)。 【示例】1(用于用户账号状态(偏“用户逻辑”层面的状态))。 【JSON字段】member_profiles.json - data.tenantMemberInfos - user_status。';
+COMMENT ON COLUMN billiards_ods.member_profiles.create_time IS '【说明】会员账户的创建时间(即这条档案/这张卡在系统中被创建的时间)。 【示例】2025-11-08 01:29:33(用于会员账户的创建时间(即这条档案/这张卡在系统中被创建的时间))。 【JSON字段】member_profiles.json - data.tenantMemberInfos - create_time。';
+COMMENT ON COLUMN billiards_ods.member_profiles.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】member_profiles.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】member_profiles.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.member_profiles.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/member_profiles.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】member_profiles.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.member_profiles.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】member_profiles.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.member_profiles.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】member_profiles.json - data.tenantMemberInfos - $。';
+
+
+CREATE TABLE IF NOT EXISTS billiards_ods.member_balance_changes (
+ tenant_id BIGINT,
+ site_id BIGINT,
+ register_site_id BIGINT,
+ registerSiteName TEXT,
+ paySiteName TEXT,
+ id BIGINT PRIMARY KEY,
+ tenant_member_id BIGINT,
+ tenant_member_card_id BIGINT,
+ system_member_id BIGINT,
+ memberName TEXT,
+ memberMobile TEXT,
+ card_type_id BIGINT,
+ memberCardTypeName TEXT,
+ account_data NUMERIC(18,2),
+ before NUMERIC(18,2),
+ after NUMERIC(18,2),
+ refund_amount NUMERIC(18,2),
+ from_type INT,
+ payment_method INT,
+ relate_id BIGINT,
+ remark TEXT,
+ operator_id BIGINT,
+ operator_name TEXT,
+ is_delete INT,
+ create_time TIMESTAMP,
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now(),
+ payload JSONB NOT NULL
+);
+
+COMMENT ON TABLE billiards_ods.member_balance_changes IS 'ODS 原始明细表:会员余额变更流水。来源:export/test-json-doc/member_balance_changes.json;分析:member_balance_changes-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.tenant_id IS '【说明】租户/商户 ID,本数据中是固定值(同一品牌/商户)。 【示例】2790683160709957(用于租户/商户 ID,本数据中是固定值(同一品牌/商户))。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - tenant_id。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.site_id IS '【说明】非 0:记录所属的具体门店 ID(与其他 JSON 内的 site_id 一致)。 【示例】2790685415443269(用于非 0:记录所属的具体门店 ID(与其他 JSON 内的 site_id 一致))。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - site_id。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.register_site_id IS '【说明】会员卡的“注册门店 ID”,即办卡所在门店。 【示例】2790685415443269(用于会员卡的“注册门店 ID”,即办卡所在门店)。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - register_site_id。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.registerSiteName IS '【说明】卡片的注册门店名称(办卡地点),和 register_site_id 配套。 【示例】朗朗桌球(用于卡片的注册门店名称(办卡地点),和 register_site_id 配套)。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - registerSiteName。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.paySiteName IS '【说明】发生本次余额变更的门店名称(即本次消费/充值所在门店)。 【示例】朗朗桌球(用于发生本次余额变更的门店名称(即本次消费/充值所在门店))。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - paySiteName。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.id IS '【说明】余额变更记录的主键 ID,唯一标识这一条“账户余额变化事件”。 【示例】2957881605869253(用于余额变更记录的主键 ID,唯一标识这一条“账户余额变化事件”)。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - id。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.tenant_member_id IS '【说明】商户维度的会员 ID(租户内会员主键)。 【示例】2799212845565701(用于商户维度的会员 ID(租户内会员主键))。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - tenant_member_id。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.tenant_member_card_id IS '【说明】会员卡账户 ID,在租户内唯一标识某张卡。 【示例】2799219999295237(用于会员卡账户 ID,在租户内唯一标识某张卡)。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - tenant_member_card_id。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.system_member_id IS '【说明】系统级(全局)会员 ID。 【示例】2799212844549893(用于系统级(全局)会员 ID)。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - system_member_id。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.memberName IS '【说明】会员姓名或称呼(非昵称字段)。 【示例】曾丹烨(用于会员姓名或称呼(非昵称字段))。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - memberName。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.memberMobile IS '【说明】会员手机号。 【示例】13922213242(用于会员手机号)。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - memberMobile。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.card_type_id IS '【说明】卡种类型 ID,用于区分不同卡种。 【示例】2793249295533893(卡种类型 ID,用于区分不同卡种)。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - card_type_id。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.memberCardTypeName IS '【说明】卡种名称,与 card_type_id 一一对应,是一个 卡种枚举名称。 【示例】储值卡(用于卡种名称,与 card_type_id 一一对应,是一个 卡种枚举名称)。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - memberCardTypeName。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.account_data IS '【说明】本次变动的金额(元),正数表示增加,负数表示减少。 【示例】-120.0(用于本次变动的金额(元),正数表示增加,负数表示减少)。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - account_data。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.before IS '【说明】本次变动前,该卡账户的余额(元)。 【示例】816.3(用于本次变动前,该卡账户的余额(元))。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - before。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.after IS '【说明】本次变动后,该卡账户的余额(元)。 【示例】696.3(用于本次变动后,该卡账户的余额(元))。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - after。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.refund_amount IS '【说明】可能用于标记“其中有多少金额是以‘退款’形式回流的”,或区分“退回余额”和“原路退回”两种模式。 【示例】0.0(可能用于标记“其中有多少金额是以‘退款’形式回流的”,或区分“退回余额”和“原路退回”两种模式)。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - refund_amount。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.from_type IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - from_type。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.payment_method IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】0(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - payment_method。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.relate_id IS '【说明】例如某次充值记录的 ID、某张订单/结算单 ID、某次活动抵用券核销记录 ID 等。 【示例】2957881518788421(用于例如某次充值记录的 ID、某张订单/结算单 ID、某次活动抵用券核销记录 ID 等)。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - relate_id。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.remark IS '【说明】当为空时,说明这条变动没有额外备注说明。 【示例】充值退款(用于当为空时,说明这条变动没有额外备注说明)。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - remark。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.operator_id IS '【说明】执行此次余额变更操作的员工 ID。 【示例】2790687322443013(用于执行此次余额变更操作的员工 ID)。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - operator_id。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.operator_name IS '【说明】操作员姓名(带职位前缀),是对 operator_id 的可读冗余字段。 【示例】收银员:郑丽珊(用于操作员姓名(带职位前缀),是对 operator_id 的可读冗余字段)。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - operator_name。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.is_delete IS '【说明】逻辑删除标记(0=否,1=是)。 【示例】0(用于逻辑删除标记(0=否,1=是))。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - is_delete。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.create_time IS '【说明】本条余额变更记录的创建时间,通常接近交易发生时间。 【示例】2025-11-09 22:52:48(用于本条余额变更记录的创建时间,通常接近交易发生时间)。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - create_time。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】member_balance_changes.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】member_balance_changes.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/member_balance_changes.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】member_balance_changes.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】member_balance_changes.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - $。';
+
+
+CREATE TABLE IF NOT EXISTS billiards_ods.member_stored_value_cards (
+ tenant_id BIGINT,
+ tenant_member_id BIGINT,
+ system_member_id BIGINT,
+ register_site_id BIGINT,
+ site_name TEXT,
+ id BIGINT PRIMARY KEY,
+ member_card_grade_code BIGINT,
+ member_card_grade_code_name TEXT,
+ member_card_type_name TEXT,
+ member_name TEXT,
+ member_mobile TEXT,
+ card_type_id BIGINT,
+ card_no TEXT,
+ card_physics_type TEXT,
+ balance NUMERIC(18,2),
+ denomination NUMERIC(18,2),
+ table_discount NUMERIC(10,4),
+ goods_discount NUMERIC(10,4),
+ assistant_discount NUMERIC(10,4),
+ assistant_reward_discount NUMERIC(10,4),
+ table_service_discount NUMERIC(10,4),
+ assistant_service_discount NUMERIC(10,4),
+ coupon_discount NUMERIC(10,4),
+ goods_service_discount NUMERIC(10,4),
+ assistant_discount_sub_switch INT,
+ table_discount_sub_switch INT,
+ goods_discount_sub_switch INT,
+ assistant_reward_discount_sub_switch INT,
+ table_service_deduct_radio NUMERIC(10,4),
+ assistant_service_deduct_radio NUMERIC(10,4),
+ goods_service_deduct_radio NUMERIC(10,4),
+ assistant_deduct_radio NUMERIC(10,4),
+ table_deduct_radio NUMERIC(10,4),
+ goods_deduct_radio NUMERIC(10,4),
+ coupon_deduct_radio NUMERIC(10,4),
+ assistant_reward_deduct_radio NUMERIC(10,4),
+ tableCardDeduct NUMERIC(18,2),
+ tableServiceCardDeduct NUMERIC(18,2),
+ goodsCarDeduct NUMERIC(18,2),
+ goodsServiceCardDeduct NUMERIC(18,2),
+ assistantCardDeduct NUMERIC(18,2),
+ assistantServiceCardDeduct NUMERIC(18,2),
+ assistantRewardCardDeduct NUMERIC(18,2),
+ cardSettleDeduct NUMERIC(18,2),
+ couponCardDeduct NUMERIC(18,2),
+ deliveryFeeDeduct NUMERIC(18,2),
+ use_scene INT,
+ able_cross_site INT,
+ able_site_transfer INT,
+ is_allow_give INT,
+ is_allow_order_deduct INT,
+ is_delete INT,
+ bind_password TEXT,
+ goods_discount_range_type INT,
+ goodsCategoryId BIGINT,
+ tableAreaId BIGINT,
+ effect_site_id BIGINT,
+ start_time TIMESTAMP,
+ end_time TIMESTAMP,
+ disable_start_time TIMESTAMP,
+ disable_end_time TIMESTAMP,
+ last_consume_time TIMESTAMP,
+ create_time TIMESTAMP,
+ status INT,
+ sort INT,
+ tenantAvatar TEXT,
+ tenantName TEXT,
+ pdAssisnatLevel TEXT,
+ cxAssisnatLevel TEXT,
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now(),
+ payload JSONB NOT NULL
+);
+
+COMMENT ON TABLE billiards_ods.member_stored_value_cards IS 'ODS 原始明细表:会员储值/卡券账户列表。来源:export/test-json-doc/member_stored_value_cards.json;分析:member_stored_value_cards-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenant_id IS '【说明】租户/品牌 ID,与其他 JSON 中 tenant_id 一致。 【示例】2790683160709957(用于租户/品牌 ID,与其他 JSON 中 tenant_id 一致)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tenant_id。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenant_member_id IS '【说明】当前商户(品牌/租户)中会员的主键 ID。 【示例】2955204541320325(用于当前商户(品牌/租户)中会员的主键 ID)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tenant_member_id。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.system_member_id IS '【说明】系统级会员 ID(跨门店统一主键)。 【示例】2955204540009605(用于系统级会员 ID(跨门店统一主键))。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - system_member_id。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.register_site_id IS '【说明】卡首次办理的门店 ID。 【示例】2790685415443269(用于卡首次办理的门店 ID)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - register_site_id。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.site_name IS '【说明】卡归属门店名称(视图中的展示字段)。 【示例】朗朗桌球(用于卡归属门店名称(视图中的展示字段))。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - site_name。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.id IS '【说明】本表主键 ID,用于唯一标识一条记录。 【示例】2955206162843781(本表主键 ID,用于唯一标识一条记录)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - id。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_card_grade_code IS '【说明】卡等级/卡类代码,和下面两个名称字段一一对应。 【示例】2790683528022856(用于卡等级/卡类代码,和下面两个名称字段一一对应)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_card_grade_code。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_card_grade_code_name IS '【说明】卡等级/卡类名称。 【示例】活动抵用券(用于卡等级/卡类名称)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_card_grade_code_name。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_card_type_name IS '【说明】卡类型名称,实际与 member_card_grade_code_name 一致。 【示例】活动抵用券(用于卡类型名称,实际与 member_card_grade_code_name 一致)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_card_type_name。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_name IS '【说明】持卡会员姓名快照。 【示例】胡先生(用于持卡会员姓名快照)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_name。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_mobile IS '【说明】持卡会员手机号快照。 【示例】18620043391(用于持卡会员手机号快照)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_mobile。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.card_type_id IS '【说明】卡种 ID(定义“这是哪一种卡”)。 【示例】2793266846533445(用于卡种 ID(定义“这是哪一种卡”))。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - card_type_id。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.card_no IS '【说明】实体卡物理卡号/条码号。 【示例】NULL(用于实体卡物理卡号/条码号)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - card_no。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.card_physics_type IS '【说明】物理卡类型。 【示例】1(用于物理卡类型)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - card_physics_type。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.balance IS '【说明】当前卡内余额(主要针对储值卡、部分券卡)。 【示例】0.0(用于当前卡内余额(主要针对储值卡、部分券卡))。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - balance。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.denomination IS '【说明】采用“几折”的记法:10=不打折,9=九折,8=八折。 【示例】0.0(用于采用“几折”的记法:10=不打折,9=九折,8=八折)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - denomination。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_discount。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_discount。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_discount。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_reward_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_reward_discount。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_service_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_service_discount。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_service_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_service_discount。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.coupon_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - coupon_discount。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_service_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_service_discount。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_discount_sub_switch IS '【说明】数量/时长字段,用于统计与计量。 【示例】2(数量/时长字段,用于统计与计量)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_discount_sub_switch。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_discount_sub_switch IS '【说明】数量/时长字段,用于统计与计量。 【示例】2(数量/时长字段,用于统计与计量)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_discount_sub_switch。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_discount_sub_switch IS '【说明】数量/时长字段,用于统计与计量。 【示例】2(数量/时长字段,用于统计与计量)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_discount_sub_switch。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_reward_discount_sub_switch IS '【说明】数量/时长字段,用于统计与计量。 【示例】2(数量/时长字段,用于统计与计量)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_reward_discount_sub_switch。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_service_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_service_deduct_radio。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_service_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_service_deduct_radio。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_service_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_service_deduct_radio。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_deduct_radio。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_deduct_radio。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_deduct_radio。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.coupon_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - coupon_deduct_radio。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_reward_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_reward_deduct_radio。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tableCardDeduct IS '【说明】针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则)。 【示例】0.0(用于针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则))。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tableCardDeduct。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tableServiceCardDeduct IS '【说明】如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置。 【示例】0.0(用于如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tableServiceCardDeduct。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goodsCarDeduct IS '【说明】针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则)。 【示例】0.0(用于针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则))。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goodsCarDeduct。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goodsServiceCardDeduct IS '【说明】如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置。 【示例】0.0(用于如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goodsServiceCardDeduct。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistantCardDeduct IS '【说明】针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则)。 【示例】0.0(用于针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则))。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistantCardDeduct。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistantServiceCardDeduct IS '【说明】如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置。 【示例】0.0(用于如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistantServiceCardDeduct。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistantRewardCardDeduct IS '【说明】助教奖励金方向扣款的配置。 【示例】0.0(用于助教奖励金方向扣款的配置)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistantRewardCardDeduct。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.cardSettleDeduct IS '【说明】结算时从卡中扣除的金额上限/规则配置(视图级。 【示例】0.0(用于结算时从卡中扣除的金额上限/规则配置(视图级)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - cardSettleDeduct。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.couponCardDeduct IS '【说明】与卡绑定的“券额度扣除配置”。 【示例】0.0(用于与卡绑定的“券额度扣除配置”)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - couponCardDeduct。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.deliveryFeeDeduct IS '【说明】配送费可否/多少从卡中抵扣,目前无业务发生。 【示例】0.0(用于配送费可否/多少从卡中抵扣,目前无业务发生)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - deliveryFeeDeduct。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.use_scene IS '【说明】卡使用场景说明(比如“仅店内使用”“仅团建”等),本门店尚未使用此字段。 【示例】NULL(用于卡使用场景说明(比如“仅店内使用”“仅团建”等),本门店尚未使用此字段)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - use_scene。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.able_cross_site IS '【说明】是否允许跨店使用。 【示例】1(用于是否允许跨店使用)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - able_cross_site。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.able_site_transfer IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。 【示例】NULL(布尔/开关字段,用于表示权限、可用性或状态开关)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - able_site_transfer。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.is_allow_give IS '【说明】是否允许转赠/转让给其他会员。 【示例】0(用于是否允许转赠/转让给其他会员)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - is_allow_give。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.is_allow_order_deduct IS '【说明】是否允许在“订单层面统一扣款”。 【示例】0(用于是否允许在“订单层面统一扣款”)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - is_allow_order_deduct。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.is_delete IS '【说明】逻辑删除标志。 【示例】0(用于逻辑删除标志)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - is_delete。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.bind_password IS '【说明】卡绑定密码,用于消费或查询验证(目前未启用)。 【示例】NULL(卡绑定密码,用于消费或查询验证(目前未启用))。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - bind_password。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_discount_range_type IS '【说明】数量/时长字段,用于统计与计量。 【示例】1(数量/时长字段,用于统计与计量)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_discount_range_type。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goodsCategoryId IS '【说明】可用的商品分类 ID 列表。 【示例】[](用于可用的商品分类 ID 列表)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goodsCategoryId。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tableAreaId IS '【说明】限定可使用的台区 ID 列表。 【示例】[](用于限定可使用的台区 ID 列表)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tableAreaId。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.effect_site_id IS '【说明】卡片限定生效门店 ID。 【示例】0(用于卡片限定生效门店 ID)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - effect_site_id。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.start_time IS '【说明】卡片生效开始时间(有效期起始)。 【示例】2025-11-08 01:31:12(用于卡片生效开始时间(有效期起始))。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - start_time。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.end_time IS '【说明】卡片有效期结束时间。 【示例】2225-01-01 00:00:00(用于卡片有效期结束时间)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - end_time。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.disable_start_time IS '【说明】停用时间段(比如临时冻结卡的起止时间)。 【示例】0001-01-01 00:00:00(用于停用时间段(比如临时冻结卡的起止时间))。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - disable_start_time。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.disable_end_time IS '【说明】停用时间段(比如临时冻结卡的起止时间)。 【示例】0001-01-01 00:00:00(用于停用时间段(比如临时冻结卡的起止时间))。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - disable_end_time。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.last_consume_time IS '【说明】最近一次消费时间。 【示例】2025-11-09 07:48:23(用于最近一次消费时间)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - last_consume_time。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.create_time IS '【说明】卡片创建时间(开卡时间)。 【示例】2025-11-08 01:31:12(用于卡片创建时间(开卡时间))。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - create_time。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.status IS '【说明】状态枚举,用于标识记录当前业务状态。 【示例】1(状态枚举,用于标识记录当前业务状态。)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - status。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.sort IS '【说明】在前端展示或某些列表中的排序权重。 【示例】1(用于在前端展示或某些列表中的排序权重)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - sort。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenantAvatar IS '【说明】品牌头像 URL(未配置)。 【示例】NULL(用于品牌头像 URL(未配置))。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tenantAvatar。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenantName IS '【说明】租户/品牌名称(当前导出为空)。 【示例】NULL(用于租户/品牌名称(当前导出为空))。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tenantName。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.pdAssisnatLevel IS '【说明】允许使用的“陪打/助教等级”列表。 【示例】[](用于允许使用的“陪打/助教等级”列表)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - pdAssisnatLevel。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.cxAssisnatLevel IS '【说明】可能是“促销活动中的助教等级限制”(命名中 cx 多为“促销”缩写)。 【示例】[](用于可能是“促销活动中的助教等级限制”(命名中 cx 多为“促销”缩写))。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - cxAssisnatLevel。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】member_stored_value_cards.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】member_stored_value_cards.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/member_stored_value_cards.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】member_stored_value_cards.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】member_stored_value_cards.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - $。';
+
+
+CREATE TABLE IF NOT EXISTS billiards_ods.recharge_settlements (
+ id BIGINT PRIMARY KEY,
+ tenantid BIGINT,
+ siteid BIGINT,
+ sitename TEXT,
+ balanceamount NUMERIC(18,2),
+ cardamount NUMERIC(18,2),
+ cashamount NUMERIC(18,2),
+ couponamount NUMERIC(18,2),
+ createtime TIMESTAMPTZ,
+ memberid BIGINT,
+ membername TEXT,
+ tenantmembercardid BIGINT,
+ membercardtypename TEXT,
+ memberphone TEXT,
+ tableid BIGINT,
+ consumemoney NUMERIC(18,2),
+ onlineamount NUMERIC(18,2),
+ operatorid BIGINT,
+ operatorname TEXT,
+ revokeorderid BIGINT,
+ revokeordername TEXT,
+ revoketime TIMESTAMPTZ,
+ payamount NUMERIC(18,2),
+ pointamount NUMERIC(18,2),
+ refundamount NUMERIC(18,2),
+ settlename TEXT,
+ settlerelateid BIGINT,
+ settlestatus INT,
+ settletype INT,
+ paytime TIMESTAMPTZ,
+ roundingamount NUMERIC(18,2),
+ paymentmethod INT,
+ adjustamount NUMERIC(18,2),
+ assistantcxmoney NUMERIC(18,2),
+ assistantpdmoney NUMERIC(18,2),
+ couponsaleamount NUMERIC(18,2),
+ memberdiscountamount NUMERIC(18,2),
+ tablechargemoney NUMERIC(18,2),
+ goodsmoney NUMERIC(18,2),
+ realgoodsmoney NUMERIC(18,2),
+ servicemoney NUMERIC(18,2),
+ prepaymoney NUMERIC(18,2),
+ salesmanname TEXT,
+ orderremark TEXT,
+ salesmanuserid BIGINT,
+ canberevoked BOOLEAN,
+ pointdiscountprice NUMERIC(18,2),
+ pointdiscountcost NUMERIC(18,2),
+ activitydiscount NUMERIC(18,2),
+ serialnumber BIGINT,
+ assistantmanualdiscount NUMERIC(18,2),
+ allcoupondiscount NUMERIC(18,2),
+ goodspromotionmoney NUMERIC(18,2),
+ assistantpromotionmoney NUMERIC(18,2),
+ isusecoupon BOOLEAN,
+ isusediscount BOOLEAN,
+ isactivity BOOLEAN,
+ isbindmember BOOLEAN,
+ isfirst INT,
+ rechargecardamount NUMERIC(18,2),
+ giftcardamount NUMERIC(18,2),
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now(),
+ payload JSONB NOT NULL
+);
+
+COMMENT ON TABLE billiards_ods.recharge_settlements IS 'ODS 原始明细表:充值结算记录。来源:export/test-json-doc/recharge_settlements.json;分析:recharge_settlements-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.id IS '【说明】门店 ID。 【示例】NULL(用于门店 ID)。 【JSON字段】recharge_settlements.json - $ - id。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.tenantid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】recharge_settlements.json - $ - tenantid。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.siteid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】recharge_settlements.json - $ - siteid。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.sitename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】recharge_settlements.json - $ - sitename。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.balanceamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - balanceamount。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.cardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - cardamount。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.cashamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - cashamount。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.couponamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - couponamount。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.createtime IS '【说明】时间字段,用于记录业务时间点/发生时间。 【示例】NULL(时间字段,用于记录业务时间点/发生时间)。 【JSON字段】recharge_settlements.json - $ - createtime。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.memberid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】recharge_settlements.json - $ - memberid。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.membername IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】recharge_settlements.json - $ - membername。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.tenantmembercardid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】recharge_settlements.json - $ - tenantmembercardid。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.membercardtypename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】recharge_settlements.json - $ - membercardtypename。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.memberphone IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】recharge_settlements.json - $ - memberphone。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.tableid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】recharge_settlements.json - $ - tableid。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.consumemoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - consumemoney。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.onlineamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - onlineamount。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.operatorid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】recharge_settlements.json - $ - operatorid。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.operatorname IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】recharge_settlements.json - $ - operatorname。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.revokeorderid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】recharge_settlements.json - $ - revokeorderid。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.revokeordername IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】recharge_settlements.json - $ - revokeordername。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.revoketime IS '【说明】时间字段,用于记录业务时间点/发生时间。 【示例】NULL(时间字段,用于记录业务时间点/发生时间)。 【JSON字段】recharge_settlements.json - $ - revoketime。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.payamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - payamount。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.pointamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - pointamount。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.refundamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - refundamount。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.settlename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】recharge_settlements.json - $ - settlename。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.settlerelateid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】recharge_settlements.json - $ - settlerelateid。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.settlestatus IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】recharge_settlements.json - $ - settlestatus。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.settletype IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】recharge_settlements.json - $ - settletype。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.paytime IS '【说明】时间字段,用于记录业务时间点/发生时间。 【示例】NULL(时间字段,用于记录业务时间点/发生时间)。 【JSON字段】recharge_settlements.json - $ - paytime。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.roundingamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - roundingamount。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.paymentmethod IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】recharge_settlements.json - $ - paymentmethod。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.adjustamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - adjustamount。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantcxmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - assistantcxmoney。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantpdmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - assistantpdmoney。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.couponsaleamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - couponsaleamount。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.memberdiscountamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - memberdiscountamount。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.tablechargemoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - tablechargemoney。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.goodsmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - goodsmoney。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.realgoodsmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - realgoodsmoney。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.servicemoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - servicemoney。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.prepaymoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - prepaymoney。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.salesmanname IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】recharge_settlements.json - $ - salesmanname。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.orderremark IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】recharge_settlements.json - $ - orderremark。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.salesmanuserid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】recharge_settlements.json - $ - salesmanuserid。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.canberevoked IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】recharge_settlements.json - $ - canberevoked。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.pointdiscountprice IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - pointdiscountprice。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.pointdiscountcost IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - pointdiscountcost。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.activitydiscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【JSON字段】recharge_settlements.json - $ - activitydiscount。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.serialnumber IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【JSON字段】recharge_settlements.json - $ - serialnumber。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantmanualdiscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【JSON字段】recharge_settlements.json - $ - assistantmanualdiscount。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.allcoupondiscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【JSON字段】recharge_settlements.json - $ - allcoupondiscount。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.goodspromotionmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - goodspromotionmoney。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantpromotionmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - assistantpromotionmoney。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.isusecoupon IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】recharge_settlements.json - $ - isusecoupon。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.isusediscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【JSON字段】recharge_settlements.json - $ - isusediscount。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.isactivity IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】recharge_settlements.json - $ - isactivity。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.isbindmember IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】recharge_settlements.json - $ - isbindmember。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.isfirst IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】recharge_settlements.json - $ - isfirst。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.rechargecardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - rechargecardamount。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.giftcardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】recharge_settlements.json - $ - giftcardamount。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】recharge_settlements.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】recharge_settlements.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/recharge_settlements.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】recharge_settlements.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】recharge_settlements.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】recharge_settlements.json - $ - $。';
+
+
+CREATE TABLE IF NOT EXISTS billiards_ods.settlement_records (
+ id BIGINT PRIMARY KEY,
+ tenantid BIGINT,
+ siteid BIGINT,
+ sitename TEXT,
+ balanceamount NUMERIC(18,2),
+ cardamount NUMERIC(18,2),
+ cashamount NUMERIC(18,2),
+ couponamount NUMERIC(18,2),
+ createtime TIMESTAMPTZ,
+ memberid BIGINT,
+ membername TEXT,
+ tenantmembercardid BIGINT,
+ membercardtypename TEXT,
+ memberphone TEXT,
+ tableid BIGINT,
+ consumemoney NUMERIC(18,2),
+ onlineamount NUMERIC(18,2),
+ operatorid BIGINT,
+ operatorname TEXT,
+ revokeorderid BIGINT,
+ revokeordername TEXT,
+ revoketime TIMESTAMPTZ,
+ payamount NUMERIC(18,2),
+ pointamount NUMERIC(18,2),
+ refundamount NUMERIC(18,2),
+ settlename TEXT,
+ settlerelateid BIGINT,
+ settlestatus INT,
+ settletype INT,
+ paytime TIMESTAMPTZ,
+ roundingamount NUMERIC(18,2),
+ paymentmethod INT,
+ adjustamount NUMERIC(18,2),
+ assistantcxmoney NUMERIC(18,2),
+ assistantpdmoney NUMERIC(18,2),
+ couponsaleamount NUMERIC(18,2),
+ memberdiscountamount NUMERIC(18,2),
+ tablechargemoney NUMERIC(18,2),
+ goodsmoney NUMERIC(18,2),
+ realgoodsmoney NUMERIC(18,2),
+ servicemoney NUMERIC(18,2),
+ prepaymoney NUMERIC(18,2),
+ salesmanname TEXT,
+ orderremark TEXT,
+ salesmanuserid BIGINT,
+ canberevoked BOOLEAN,
+ pointdiscountprice NUMERIC(18,2),
+ pointdiscountcost NUMERIC(18,2),
+ activitydiscount NUMERIC(18,2),
+ serialnumber BIGINT,
+ assistantmanualdiscount NUMERIC(18,2),
+ allcoupondiscount NUMERIC(18,2),
+ goodspromotionmoney NUMERIC(18,2),
+ assistantpromotionmoney NUMERIC(18,2),
+ isusecoupon BOOLEAN,
+ isusediscount BOOLEAN,
+ isactivity BOOLEAN,
+ isbindmember BOOLEAN,
+ isfirst INT,
+ rechargecardamount NUMERIC(18,2),
+ giftcardamount NUMERIC(18,2),
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now(),
+ payload JSONB NOT NULL
+);
+
+COMMENT ON TABLE billiards_ods.settlement_records IS 'ODS 原始明细表:结账/结算记录。来源:export/test-json-doc/settlement_records.json;分析:settlement_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.settlement_records.id IS '【说明】结账记录主键 ID(订单结算 ID)。 【示例】NULL(用于结账记录主键 ID(订单结算 ID))。 【JSON字段】settlement_records.json - $ - id。';
+COMMENT ON COLUMN billiards_ods.settlement_records.tenantid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_records.json - $ - tenantid。';
+COMMENT ON COLUMN billiards_ods.settlement_records.siteid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_records.json - $ - siteid。';
+COMMENT ON COLUMN billiards_ods.settlement_records.sitename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】settlement_records.json - $ - sitename。';
+COMMENT ON COLUMN billiards_ods.settlement_records.balanceamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - balanceamount。';
+COMMENT ON COLUMN billiards_ods.settlement_records.cardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - cardamount。';
+COMMENT ON COLUMN billiards_ods.settlement_records.cashamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - cashamount。';
+COMMENT ON COLUMN billiards_ods.settlement_records.couponamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - couponamount。';
+COMMENT ON COLUMN billiards_ods.settlement_records.createtime IS '【说明】时间字段,用于记录业务时间点/发生时间。 【示例】NULL(时间字段,用于记录业务时间点/发生时间)。 【JSON字段】settlement_records.json - $ - createtime。';
+COMMENT ON COLUMN billiards_ods.settlement_records.memberid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_records.json - $ - memberid。';
+COMMENT ON COLUMN billiards_ods.settlement_records.membername IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】settlement_records.json - $ - membername。';
+COMMENT ON COLUMN billiards_ods.settlement_records.tenantmembercardid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_records.json - $ - tenantmembercardid。';
+COMMENT ON COLUMN billiards_ods.settlement_records.membercardtypename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】settlement_records.json - $ - membercardtypename。';
+COMMENT ON COLUMN billiards_ods.settlement_records.memberphone IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_records.json - $ - memberphone。';
+COMMENT ON COLUMN billiards_ods.settlement_records.tableid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_records.json - $ - tableid。';
+COMMENT ON COLUMN billiards_ods.settlement_records.consumemoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - consumemoney。';
+COMMENT ON COLUMN billiards_ods.settlement_records.onlineamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - onlineamount。';
+COMMENT ON COLUMN billiards_ods.settlement_records.operatorid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_records.json - $ - operatorid。';
+COMMENT ON COLUMN billiards_ods.settlement_records.operatorname IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】settlement_records.json - $ - operatorname。';
+COMMENT ON COLUMN billiards_ods.settlement_records.revokeorderid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_records.json - $ - revokeorderid。';
+COMMENT ON COLUMN billiards_ods.settlement_records.revokeordername IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】settlement_records.json - $ - revokeordername。';
+COMMENT ON COLUMN billiards_ods.settlement_records.revoketime IS '【说明】时间字段,用于记录业务时间点/发生时间。 【示例】NULL(时间字段,用于记录业务时间点/发生时间)。 【JSON字段】settlement_records.json - $ - revoketime。';
+COMMENT ON COLUMN billiards_ods.settlement_records.payamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - payamount。';
+COMMENT ON COLUMN billiards_ods.settlement_records.pointamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - pointamount。';
+COMMENT ON COLUMN billiards_ods.settlement_records.refundamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - refundamount。';
+COMMENT ON COLUMN billiards_ods.settlement_records.settlename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】settlement_records.json - $ - settlename。';
+COMMENT ON COLUMN billiards_ods.settlement_records.settlerelateid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_records.json - $ - settlerelateid。';
+COMMENT ON COLUMN billiards_ods.settlement_records.settlestatus IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_records.json - $ - settlestatus。';
+COMMENT ON COLUMN billiards_ods.settlement_records.settletype IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_records.json - $ - settletype。';
+COMMENT ON COLUMN billiards_ods.settlement_records.paytime IS '【说明】时间字段,用于记录业务时间点/发生时间。 【示例】NULL(时间字段,用于记录业务时间点/发生时间)。 【JSON字段】settlement_records.json - $ - paytime。';
+COMMENT ON COLUMN billiards_ods.settlement_records.roundingamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - roundingamount。';
+COMMENT ON COLUMN billiards_ods.settlement_records.paymentmethod IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_records.json - $ - paymentmethod。';
+COMMENT ON COLUMN billiards_ods.settlement_records.adjustamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - adjustamount。';
+COMMENT ON COLUMN billiards_ods.settlement_records.assistantcxmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - assistantcxmoney。';
+COMMENT ON COLUMN billiards_ods.settlement_records.assistantpdmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - assistantpdmoney。';
+COMMENT ON COLUMN billiards_ods.settlement_records.couponsaleamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - couponsaleamount。';
+COMMENT ON COLUMN billiards_ods.settlement_records.memberdiscountamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - memberdiscountamount。';
+COMMENT ON COLUMN billiards_ods.settlement_records.tablechargemoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - tablechargemoney。';
+COMMENT ON COLUMN billiards_ods.settlement_records.goodsmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - goodsmoney。';
+COMMENT ON COLUMN billiards_ods.settlement_records.realgoodsmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - realgoodsmoney。';
+COMMENT ON COLUMN billiards_ods.settlement_records.servicemoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - servicemoney。';
+COMMENT ON COLUMN billiards_ods.settlement_records.prepaymoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - prepaymoney。';
+COMMENT ON COLUMN billiards_ods.settlement_records.salesmanname IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】settlement_records.json - $ - salesmanname。';
+COMMENT ON COLUMN billiards_ods.settlement_records.orderremark IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_records.json - $ - orderremark。';
+COMMENT ON COLUMN billiards_ods.settlement_records.salesmanuserid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_records.json - $ - salesmanuserid。';
+COMMENT ON COLUMN billiards_ods.settlement_records.canberevoked IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_records.json - $ - canberevoked。';
+COMMENT ON COLUMN billiards_ods.settlement_records.pointdiscountprice IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - pointdiscountprice。';
+COMMENT ON COLUMN billiards_ods.settlement_records.pointdiscountcost IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - pointdiscountcost。';
+COMMENT ON COLUMN billiards_ods.settlement_records.activitydiscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【JSON字段】settlement_records.json - $ - activitydiscount。';
+COMMENT ON COLUMN billiards_ods.settlement_records.serialnumber IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【JSON字段】settlement_records.json - $ - serialnumber。';
+COMMENT ON COLUMN billiards_ods.settlement_records.assistantmanualdiscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【JSON字段】settlement_records.json - $ - assistantmanualdiscount。';
+COMMENT ON COLUMN billiards_ods.settlement_records.allcoupondiscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【JSON字段】settlement_records.json - $ - allcoupondiscount。';
+COMMENT ON COLUMN billiards_ods.settlement_records.goodspromotionmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - goodspromotionmoney。';
+COMMENT ON COLUMN billiards_ods.settlement_records.assistantpromotionmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - assistantpromotionmoney。';
+COMMENT ON COLUMN billiards_ods.settlement_records.isusecoupon IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_records.json - $ - isusecoupon。';
+COMMENT ON COLUMN billiards_ods.settlement_records.isusediscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【JSON字段】settlement_records.json - $ - isusediscount。';
+COMMENT ON COLUMN billiards_ods.settlement_records.isactivity IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_records.json - $ - isactivity。';
+COMMENT ON COLUMN billiards_ods.settlement_records.isbindmember IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_records.json - $ - isbindmember。';
+COMMENT ON COLUMN billiards_ods.settlement_records.isfirst IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_records.json - $ - isfirst。';
+COMMENT ON COLUMN billiards_ods.settlement_records.rechargecardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - rechargecardamount。';
+COMMENT ON COLUMN billiards_ods.settlement_records.giftcardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】settlement_records.json - $ - giftcardamount。';
+COMMENT ON COLUMN billiards_ods.settlement_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】settlement_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】settlement_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.settlement_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/settlement_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】settlement_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.settlement_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】settlement_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.settlement_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】settlement_records.json - $ - $。';
+
+
+CREATE TABLE IF NOT EXISTS billiards_ods.assistant_cancellation_records (
+ id BIGINT PRIMARY KEY,
+ siteId BIGINT,
+ siteProfile JSONB,
+ assistantName TEXT,
+ assistantAbolishAmount NUMERIC(18,2),
+ assistantOn INT,
+ pdChargeMinutes INT,
+ tableAreaId BIGINT,
+ tableArea TEXT,
+ tableId BIGINT,
+ tableName TEXT,
+ trashReason TEXT,
+ createTime TIMESTAMP,
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now(),
+ payload JSONB NOT NULL
+);
+
+COMMENT ON TABLE billiards_ods.assistant_cancellation_records IS 'ODS 原始明细表:助教作废/取消记录。来源:export/test-json-doc/assistant_cancellation_records.json;分析:assistant_cancellation_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.id IS '【说明】本表主键 ID,用于唯一标识一条记录。 【示例】2957675849518789(本表主键 ID,用于唯一标识一条记录)。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - id。';
+COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.siteId IS '【说明】门店 ID,即该废除记录所在门店。 【示例】2790685415443269(用于门店 ID,即该废除记录所在门店)。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - siteId。';
+COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.siteProfile IS '【说明】门店信息快照。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(用于门店信息快照)。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - siteProfile。';
+COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.assistantName IS '【说明】助教姓名/对外展示名称。 【示例】泡芙(用于助教姓名/对外展示名称)。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - assistantName。';
+COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.assistantAbolishAmount IS '【说明】与“助教废除”关联的金额字段。 【示例】5.83(用于与“助教废除”关联的金额字段)。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - assistantAbolishAmount。';
+COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.assistantOn IS '【说明】助教编号(工号/序号)。 【示例】27(用于助教编号(工号/序号))。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - assistantOn。';
+COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.pdChargeMinutes IS '【说明】“已发生的计费时长(分钟)”,即这次助教服务在被废除前已经累计了多少分钟。 【示例】214(用于“已发生的计费时长(分钟)”,即这次助教服务在被废除前已经累计了多少分钟)。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - pdChargeMinutes。';
+COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableAreaId IS '【说明】台桌所在区域 ID。 【示例】2791963816579205(用于台桌所在区域 ID)。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - tableAreaId。';
+COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableArea IS '【说明】台桌所属区域名称。 【示例】C区(用于台桌所属区域名称)。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - tableArea。';
+COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableId IS '【说明】球台/桌子的 ID。 【示例】2793016660660357(用于球台/桌子的 ID)。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - tableId。';
+COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableName IS '【说明】台桌名称/编号,供人阅读。 【示例】C1(用于台桌名称/编号,供人阅读)。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - tableName。';
+COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.trashReason IS '【说明】用于记录“废除原因”的文本描述,例如“顾客临时有事取消”“录入错误”“更换助教”等。 【示例】NULL(用于记录“废除原因”的文本描述,例如“顾客临时有事取消”“录入错误”“更换助教”等)。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - trashReason。';
+COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.createTime IS '【说明】这条“助教废除记录”被创建的时间,即系统正式记录“废除”操作的时刻。 【示例】2025-11-09 19:23:29(用于这条“助教废除记录”被创建的时间,即系统正式记录“废除”操作的时刻)。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - createTime。';
+COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】assistant_cancellation_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】assistant_cancellation_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/assistant_cancellation_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】assistant_cancellation_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】assistant_cancellation_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - $。';
+
+
+CREATE TABLE IF NOT EXISTS billiards_ods.assistant_accounts_master (
+ id BIGINT PRIMARY KEY,
+ tenant_id BIGINT,
+ site_id BIGINT,
+ assistant_no TEXT,
+ nickname TEXT,
+ real_name TEXT,
+ mobile TEXT,
+ team_id BIGINT,
+ team_name TEXT,
+ user_id BIGINT,
+ level TEXT,
+ assistant_status INT,
+ work_status INT,
+ leave_status INT,
+ entry_time TIMESTAMP,
+ resign_time TIMESTAMP,
+ start_time TIMESTAMP,
+ end_time TIMESTAMP,
+ create_time TIMESTAMP,
+ update_time TIMESTAMP,
+ order_trade_no TEXT,
+ staff_id BIGINT,
+ staff_profile_id BIGINT,
+ system_role_id BIGINT,
+ avatar TEXT,
+ birth_date TIMESTAMP,
+ gender INT,
+ height NUMERIC(18,2),
+ weight NUMERIC(18,2),
+ job_num TEXT,
+ show_status INT,
+ show_sort INT,
+ sum_grade NUMERIC(18,2),
+ assistant_grade NUMERIC(18,2),
+ get_grade_times INT,
+ introduce TEXT,
+ video_introduction_url TEXT,
+ group_id BIGINT,
+ group_name TEXT,
+ shop_name TEXT,
+ charge_way INT,
+ entry_type INT,
+ allow_cx INT,
+ is_guaranteed INT,
+ salary_grant_enabled INT,
+ light_status INT,
+ online_status INT,
+ is_delete INT,
+ cx_unit_price NUMERIC(18,2),
+ pd_unit_price NUMERIC(18,2),
+ last_table_id BIGINT,
+ last_table_name TEXT,
+ person_org_id BIGINT,
+ serial_number BIGINT,
+ is_team_leader INT,
+ criticism_status INT,
+ last_update_name TEXT,
+ ding_talk_synced INT,
+ site_light_cfg_id BIGINT,
+ light_equipment_id TEXT,
+ entry_sign_status INT,
+ resign_sign_status INT,
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now(),
+ payload JSONB NOT NULL
+);
+
+COMMENT ON TABLE billiards_ods.assistant_accounts_master IS 'ODS 原始明细表:助教档案主数据。来源:export/test-json-doc/assistant_accounts_master.json;分析:assistant_accounts_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.id IS '【说明】助教账号主键 ID,在“助教流水.json”中对应 site_assistant_id。 【示例】2947562271297029(用于助教账号主键 ID,在“助教流水.json”中对应 site_assistant_id)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - id。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.tenant_id IS '【说明】品牌/租户 ID,对应“非球科技”系统中该商户的唯一标识。 【示例】2790683160709957(用于品牌/租户 ID,对应“非球科技”系统中该商户的唯一标识)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - tenant_id。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.site_id IS '【说明】门店 ID,对应本次数据的这家球房(朗朗桌球)。 【示例】2790685415443269(用于门店 ID,对应本次数据的这家球房(朗朗桌球))。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - site_id。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.assistant_no IS '【说明】助教工号 / 编号,便于业务侧识别。 【示例】31(用于助教工号 / 编号,便于业务侧识别)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - assistant_no。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.nickname IS '【说明】助教在前台展示的昵称,如“佳怡”“周周”“球球”等。 【示例】小然(用于助教在前台展示的昵称,如“佳怡”“周周”“球球”等)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - nickname。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.real_name IS '【说明】助教真实姓名,如“何海婷”“梁婷婷”等。 【示例】张静然(用于助教真实姓名,如“何海婷”“梁婷婷”等)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - real_name。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.mobile IS '【说明】助教手机号,用于登录绑定、通知、钉钉同步等。 【示例】15119679931(助教手机号,用于登录绑定、通知、钉钉同步等)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - mobile。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.team_id IS '【说明】助教所属团队 ID。 【示例】2792011585884037(用于助教所属团队 ID)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - team_id。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.team_name IS '【说明】团队名称,展示用,和 team_id 一一对应。 【示例】1组(用于团队名称,展示用,和 team_id 一一对应)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - team_name。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.user_id IS '【说明】系统级“用户账号 ID”,通常对应登录账号。 【示例】2947562270838277(用于系统级“用户账号 ID”,通常对应登录账号)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - user_id。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.level IS '【说明】10 × 24。 【示例】20(用于10 × 24)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - level。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.assistant_status IS '【说明】1 × 48。 【示例】1(用于1 × 48)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - assistant_status。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.work_status IS '【说明】当 leave_status = 0 时,work_status = 1。 【示例】2(用于当 leave_status = 0 时,work_status = 1)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - work_status。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.leave_status IS '【说明】0 × 21。 【示例】1(用于0 × 21)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - leave_status。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.entry_time IS '【说明】入职时间。 【示例】2025-11-02 08:00:00(用于入职时间)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - entry_time。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.resign_time IS '【说明】离职日期。 【示例】2025-11-03 08:00:00(用于离职日期)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - resign_time。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.start_time IS '【说明】当前配置生效的开始日期。 【示例】2025-11-01 08:00:00(用于当前配置生效的开始日期)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - start_time。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.end_time IS '【说明】当前配置生效的结束日期(例如一个周期性的排班/合同周期)。 【示例】2025-12-01 08:00:00(用于当前配置生效的结束日期(例如一个周期性的排班/合同周期))。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - end_time。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.create_time IS '【说明】账号创建时间。 【示例】2025-11-02 15:55:26(用于账号创建时间)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - create_time。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.update_time IS '【说明】账号最近一次被修改的时间(例如修改等级、昵称等)。 【示例】2025-11-03 18:32:07(用于账号最近一次被修改的时间(例如修改等级、昵称等))。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - update_time。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.order_trade_no IS '【说明】该助教最近一次关联的订单号,用于快速跳转或回溯最近服务行为。 【示例】0(该助教最近一次关联的订单号,用于快速跳转或回溯最近服务行为)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - order_trade_no。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.staff_id IS '【说明】预留给“人事系统员工 ID”的字段,目前未接入或未启用。 【示例】0(用于预留给“人事系统员工 ID”的字段,目前未接入或未启用)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - staff_id。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.staff_profile_id IS '【说明】人事档案 ID,与第三方 HR 系统或内部员工档案集成使用,当前未启用。 【示例】0(用于人事档案 ID,与第三方 HR 系统或内部员工档案集成使用,当前未启用)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - staff_profile_id。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.system_role_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】10(标识类 ID 字段,用于关联/定位相关实体)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - system_role_id。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.avatar IS '【说明】助教头像地址。 【示例】https://oss.ficoo.vip/maUiImages/images/defaultAvatar.png(用于助教头像地址)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - avatar。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.birth_date IS '【说明】助教出生日期。 【示例】0001-01-01 00:00:00(用于助教出生日期)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - birth_date。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.gender IS '【说明】0 × 40。 【示例】0(用于0 × 40)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - gender。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.height IS '【说明】身高(单位:厘米)。 【示例】0.0(用于身高(单位:厘米))。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - height。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.weight IS '【说明】体重(单位:公斤)。 【示例】0.0(用于体重(单位:公斤))。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - weight。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.job_num IS '【说明】备用工号字段,目前未在该门店启用。 【示例】NULL(用于备用工号字段,目前未在该门店启用)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - job_num。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.show_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - show_status。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.show_sort IS '【说明】前台展示排序权重,值越小/越大对应不同的排序策略(当前看起来与 assistant_no 有一定对应关系)。 【示例】31(用于前台展示排序权重,值越小/越大对应不同的排序策略(当前看起来与 assistant_no 有一定对应关系))。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - show_sort。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.sum_grade IS '【说明】评分总和,用于计算平均分(assistant_grade = sum_grade / get_grade_times),当前为 0。 【示例】0.0(评分总和,用于计算平均分(assistant_grade = sum_grade / get_grade_times),当前为 0)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - sum_grade。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.assistant_grade IS '【说明】助教综合评分(员工维度的平均分 snapshot),当前尚未启用评分。 【示例】0.0(用于助教综合评分(员工维度的平均分 snapshot),当前尚未启用评分)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - assistant_grade。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.get_grade_times IS '【说明】累计被评分次数。 【示例】0(用于累计被评分次数)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - get_grade_times。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.introduce IS '【说明】个人简介文案,预留给助教自我介绍使用。 【示例】NULL(用于个人简介文案,预留给助教自我介绍使用)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - introduce。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.video_introduction_url IS '【说明】助教个人视频介绍地址。 【示例】https://oss.ficoo.vip/cbb/userVideo/1753096246308/175309624630830.mp4(用于助教个人视频介绍地址)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - video_introduction_url。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.group_id IS '【说明】上层“分组 ID”预留字段(例如集团/事业部),本门店未使用。 【示例】0(用于上层“分组 ID”预留字段(例如集团/事业部),本门店未使用)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - group_id。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.group_name IS '【说明】group_id 对应的名称,目前为空。 【示例】NULL(用于group_id 对应的名称,目前为空)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - group_name。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.shop_name IS '【说明】门店名称,冗余字段,用于展示。 【示例】朗朗桌球(门店名称,冗余字段,用于展示)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - shop_name。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.charge_way IS '【说明】2 代表当前门店为“计时收费”,其他值(1、3 等)可能对应按局、按课时等,当前未出现。 【示例】2(用于2 代表当前门店为“计时收费”,其他值(1、3 等)可能对应按局、按课时等,当前未出现)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - charge_way。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.entry_type IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - entry_type。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.allow_cx IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - allow_cx。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.is_guaranteed IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。 【示例】1(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - is_guaranteed。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.salary_grant_enabled IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】2(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - salary_grant_enabled。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.light_status IS '【说明】灯光控制状态,如 1=启用控制、2=不启用 或相反。 【示例】2(用于灯光控制状态,如 1=启用控制、2=不启用 或相反)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - light_status。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.online_status IS '【说明】在线状态。 【示例】1(用于在线状态)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - online_status。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.is_delete IS '【说明】逻辑删除标记(0=否,1=是)。 【示例】0(用于逻辑删除标记(0=否,1=是))。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - is_delete。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.cx_unit_price IS '【说明】促销时段的单价,本门店未在账号表层面设置。 【示例】0.0(用于促销时段的单价,本门店未在账号表层面设置)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - cx_unit_price。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.pd_unit_price IS '【说明】某种标准单价(例如“普通时段单价”),这里未在账号上配置(实际单价在助教商品或套餐配置中)。 【示例】0.0(用于某种标准单价(例如“普通时段单价”),这里未在账号上配置(实际单价在助教商品或套餐配置中))。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - pd_unit_price。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.last_table_id IS '【说明】该助教最近一次服务的球台 ID。 【示例】0(用于该助教最近一次服务的球台 ID)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - last_table_id。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.last_table_name IS '【说明】最近服务球台名称(展示用)。 【示例】TV(用于最近服务球台名称(展示用))。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - last_table_name。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.person_org_id IS '【说明】人事组织 ID,通常表示“某某门店-助教部-某小组”等层级组织。 【示例】2947562271215109(用于人事组织 ID,通常表示“某某门店-助教部-某小组”等层级组织)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - person_org_id。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.serial_number IS '【说明】系统内部生成的序列号或排序标识,用于全局排序或迁移。 【示例】0(系统内部生成的序列号或排序标识,用于全局排序或迁移)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - serial_number。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.is_team_leader IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。 【示例】0(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - is_team_leader。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.criticism_status IS '【说明】1 × 49。 【示例】1(用于1 × 49)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - criticism_status。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.last_update_name IS '【说明】最近修改该账号配置的管理员名称。 【示例】管理员:郑丽珊(用于最近修改该账号配置的管理员名称)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - last_update_name。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.ding_talk_synced IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - ding_talk_synced。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.site_light_cfg_id IS '【说明】门店灯控配置 ID,本门店未在助教账号维度启用。 【示例】0(用于门店灯控配置 ID,本门店未在助教账号维度启用)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - site_light_cfg_id。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.light_equipment_id IS '【说明】灯控设备 ID,如果开启“助教开台自动控制灯”,会通过该字段关联到灯控硬件。 【示例】NULL(用于灯控设备 ID,如果开启“助教开台自动控制灯”,会通过该字段关联到灯控硬件)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - light_equipment_id。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.entry_sign_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】0(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - entry_sign_status。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.resign_sign_status IS '【说明】离职协议签署状态,类似上面。 【示例】0(用于离职协议签署状态,类似上面)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - resign_sign_status。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】assistant_accounts_master.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】assistant_accounts_master.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/assistant_accounts_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】assistant_accounts_master.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】assistant_accounts_master.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - $。';
+
+
+CREATE TABLE IF NOT EXISTS billiards_ods.assistant_service_records (
+ id BIGINT PRIMARY KEY,
+ tenant_id BIGINT,
+ site_id BIGINT,
+ siteProfile JSONB,
+ site_table_id BIGINT,
+ order_settle_id BIGINT,
+ order_trade_no TEXT,
+ order_pay_id BIGINT,
+ order_assistant_id BIGINT,
+ order_assistant_type INT,
+ assistantName TEXT,
+ assistantNo TEXT,
+ assistant_level TEXT,
+ levelname TEXT,
+ site_assistant_id BIGINT,
+ skill_id BIGINT,
+ skillname TEXT,
+ system_member_id BIGINT,
+ tablename TEXT,
+ tenant_member_id BIGINT,
+ user_id BIGINT,
+ assistant_team_id BIGINT,
+ nickname TEXT,
+ ledger_name TEXT,
+ ledger_group_name TEXT,
+ ledger_amount NUMERIC(18,2),
+ ledger_count NUMERIC(18,4),
+ ledger_unit_price NUMERIC(18,4),
+ ledger_status INT,
+ ledger_start_time TIMESTAMP,
+ ledger_end_time TIMESTAMP,
+ manual_discount_amount NUMERIC(18,2),
+ member_discount_amount NUMERIC(18,2),
+ coupon_deduct_money NUMERIC(18,2),
+ service_money NUMERIC(18,2),
+ projected_income NUMERIC(18,2),
+ real_use_seconds INT,
+ income_seconds INT,
+ start_use_time TIMESTAMP,
+ last_use_time TIMESTAMP,
+ create_time TIMESTAMP,
+ is_single_order INT,
+ is_delete INT,
+ is_trash INT,
+ trash_reason TEXT,
+ trash_applicant_id BIGINT,
+ trash_applicant_name TEXT,
+ operator_id BIGINT,
+ operator_name TEXT,
+ salesman_name TEXT,
+ salesman_org_id BIGINT,
+ salesman_user_id BIGINT,
+ person_org_id BIGINT,
+ add_clock INT,
+ returns_clock INT,
+ composite_grade NUMERIC(10,2),
+ composite_grade_time TIMESTAMP,
+ skill_grade NUMERIC(10,2),
+ service_grade NUMERIC(10,2),
+ sum_grade NUMERIC(10,2),
+ grade_status INT,
+ get_grade_times INT,
+ is_not_responding INT,
+ is_confirm INT,
+ payload JSONB NOT NULL,
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now()
+);
+
+COMMENT ON TABLE billiards_ods.assistant_service_records IS 'ODS 原始明细表:助教服务流水。来源:export/test-json-doc/assistant_service_records.json;分析:assistant_service_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.id IS '【说明】本条助教流水记录的主键 ID(流水唯一标识)。 【示例】2957913441292165(用于本条助教流水记录的主键 ID(流水唯一标识))。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - id。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - tenant_id。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.site_id IS '【说明】门店 ID,本数据中指“朗朗桌球”这一家门店。 【示例】2790685415443269(用于门店 ID,本数据中指“朗朗桌球”这一家门店)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - site_id。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.siteProfile IS '【说明】门店信息快照,包括 id、shop_name、address 等,和其他 JSON 里的 siteProfile 一致。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(用于门店信息快照,包括 id、shop_name、address 等,和其他 JSON 里的 siteProfile 一致)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - siteProfile。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.site_table_id IS '【说明】球台 ID。 【示例】2793020259897413(用于球台 ID)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - site_table_id。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.order_settle_id IS '【说明】订单结算 ID,相当于“结账单号”的内部主键。 【示例】2957913171693253(用于订单结算 ID,相当于“结账单号”的内部主键)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_settle_id。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.order_trade_no IS '【说明】订单交易号,整个订单层面的编号。 【示例】2957784612605829(用于订单交易号,整个订单层面的编号)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_trade_no。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.order_pay_id IS '【说明】关联到“支付记录”的主键 ID。 【示例】0(用于关联到“支付记录”的主键 ID)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_pay_id。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.order_assistant_id IS '【说明】订单中“助教项目明细”的内部 ID。 【示例】2957788717240005(用于订单中“助教项目明细”的内部 ID)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_assistant_id。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.order_assistant_type IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_assistant_type。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.assistantName IS '【说明】助教姓名,如“何海婷”“胡敏”等。 【示例】何海婷(用于助教姓名,如“何海婷”“胡敏”等)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - assistantName。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.assistantNo IS '【说明】助教编号,例如 "27"。 【示例】27(用于助教编号,例如 "27")。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - assistantNo。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.assistant_level IS '【说明】助教等级名称,与 assistant_level 一一对应(初级/中级/高级/助教管理)。 【示例】10(用于助教等级名称,与 assistant_level 一一对应(初级/中级/高级/助教管理))。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - assistant_level。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.levelname IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - levelName。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.site_assistant_id IS '【说明】门店维度的助教 ID。 【示例】2946266869435205(用于门店维度的助教 ID)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - site_assistant_id。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.skill_id IS '【说明】助教服务“课程/技能”ID。 【示例】2790683529513797(用于助教服务“课程/技能”ID)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - skill_id。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.skillname IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - skillName。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.system_member_id IS '【说明】系统级会员 ID(全集团统一 ID)。 【示例】0(用于系统级会员 ID(全集团统一 ID))。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - system_member_id。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.tablename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - tableName。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.tenant_member_id IS '【说明】商户维度会员 ID(门店/品牌内的会员主键)。 【示例】0(用于商户维度会员 ID(门店/品牌内的会员主键))。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - tenant_member_id。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.user_id IS '【说明】助教对应的“用户账号 ID”(系统级用户)。 【示例】2946266868976453(用于助教对应的“用户账号 ID”(系统级用户))。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - user_id。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.assistant_team_id IS '【说明】助教所属团队 ID。 【示例】2792011585884037(用于助教所属团队 ID)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - assistant_team_id。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.nickname IS '【说明】助教对外昵称,如“佳怡”“周周”“球球”等。 【示例】泡芙(用于助教对外昵称,如“佳怡”“周周”“球球”等)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - nickname。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】27-泡芙(名称字段,用于展示与辅助识别)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_name。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_group_name IS '【说明】助教项目所属的“计费分组/套餐分组名称”,例如某种助教套餐或业务组名称。 【示例】NULL(用于助教项目所属的“计费分组/套餐分组名称”,例如某种助教套餐或业务组名称)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_group_name。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_amount IS '【说明】按标准单价计算出来的应收金额(近似 = ledger_unit_price × income_seconds / 3600)。 【示例】206.67(用于按标准单价计算出来的应收金额(近似 = ledger_unit_price × income_seconds / 3600))。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_amount。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_count IS '【说明】台账记录的计时总秒数。 【示例】7592(用于台账记录的计时总秒数)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_count。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_unit_price IS '【说明】助教服务 标准单价(通常是标价:每小时、每节课的单价)。 【示例】98.0(用于助教服务 标准单价(通常是标价:每小时、每节课的单价))。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_unit_price。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_status。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_start_time IS '【说明】台账层面记录的开始时间。 【示例】2025-11-09 21:18:18(用于台账层面记录的开始时间)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_start_time。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_end_time IS '【说明】台账层面的结束时间。 【示例】2025-11-09 23:24:50(用于台账层面的结束时间)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_end_time。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.manual_discount_amount IS '【说明】收银员手动给予的减免金额(人工改价)。 【示例】0.0(用于收银员手动给予的减免金额(人工改价))。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - manual_discount_amount。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.member_discount_amount IS '【说明】由会员卡折扣产生的优惠金额。 【示例】0.0(用于由会员卡折扣产生的优惠金额)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - member_discount_amount。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.coupon_deduct_money IS '【说明】由“优惠券/代金券/团购券”等 直接抵扣到这条助教服务上的金额。 【示例】0.0(用于由“优惠券/代金券/团购券”等 直接抵扣到这条助教服务上的金额)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - coupon_deduct_money。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.service_money IS '【说明】用于记录与助教结算的金额(平台预留的“成本/分成”字段)。 【示例】0.0(用于记录与助教结算的金额(平台预留的“成本/分成”字段))。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - service_money。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.projected_income IS '【说明】实际结算计入门店的金额(已经考虑折扣、卡权益、券等后的结果)。 【示例】168.0(用于实际结算计入门店的金额(已经考虑折扣、卡权益、券等后的结果))。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - projected_income。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.real_use_seconds IS '【说明】实际使用时长(秒)。 【示例】7592(用于实际使用时长(秒))。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - real_use_seconds。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.income_seconds IS '【说明】计费秒数 / 应计收入对应的时间。 【示例】7560(用于计费秒数 / 应计收入对应的时间)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - income_seconds。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.start_use_time IS '【说明】助教实际开始服务时间。 【示例】2025-11-09 21:18:18(用于助教实际开始服务时间)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - start_use_time。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.last_use_time IS '【说明】最后一次使用(实际服务)时间。 【示例】2025-11-09 23:24:50(用于最后一次使用(实际服务)时间)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - last_use_time。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.create_time IS '【说明】这条助教流水记录创建时间(一般接近结算/下单时间)。 【示例】2025-11-09 23:25:11(用于这条助教流水记录创建时间(一般接近结算/下单时间))。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - create_time。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.is_single_order IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。 【示例】1(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_single_order。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.is_delete IS '【说明】逻辑删除标志。 【示例】0(用于逻辑删除标志)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_delete。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.is_trash IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。 【示例】0(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_trash。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.trash_reason IS '【说明】废除原因(文本说明),例如“顾客取消”“录入错误”等。 【示例】NULL(用于废除原因(文本说明),例如“顾客取消”“录入错误”等)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - trash_reason。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.trash_applicant_id IS '【说明】提出废除申请的员工 ID(通常是操作员/管理员)。 【示例】0(用于提出废除申请的员工 ID(通常是操作员/管理员))。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - trash_applicant_id。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.trash_applicant_name IS '【说明】废除申请人姓名。 【示例】NULL(用于废除申请人姓名)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - trash_applicant_name。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.operator_id IS '【说明】操作员 ID(录入/结算这条助教服务的员工)。 【示例】2790687322443013(用于操作员 ID(录入/结算这条助教服务的员工))。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - operator_id。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.operator_name IS '【说明】操作员姓名,与 operator_id 一起使用,便于直接阅读。 【示例】收银员:郑丽珊(用于操作员姓名,与 operator_id 一起使用,便于直接阅读)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - operator_name。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.salesman_name IS '【说明】关联的“营业员/销售员姓名”,用于提成归属。 【示例】NULL(关联的“营业员/销售员姓名”,用于提成归属)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - salesman_name。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.salesman_org_id IS '【说明】营业员所属组织/部门 ID。 【示例】0(用于营业员所属组织/部门 ID)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - salesman_org_id。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.salesman_user_id IS '【说明】营业员用户 ID。 【示例】0(用于营业员用户 ID)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - salesman_user_id。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.person_org_id IS '【说明】助教所属“人事组织/部门 ID”。 【示例】2946266869336901(用于助教所属“人事组织/部门 ID”)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - person_org_id。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.add_clock IS '【说明】加钟秒数,即在原有预约/服务基础上临时追加的时长。 【示例】0(用于加钟秒数,即在原有预约/服务基础上临时追加的时长)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - add_clock。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.returns_clock IS '【说明】退钟秒数(取消加钟或提前结束退回的时间)。 【示例】0(用于退钟秒数(取消加钟或提前结束退回的时间))。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - returns_clock。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.composite_grade IS '【说明】综合评分(例如技能+服务加权后的平均分),当前数据没有实际评分。 【示例】0.0(用于综合评分(例如技能+服务加权后的平均分),当前数据没有实际评分)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - composite_grade。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.composite_grade_time IS '【说明】助教服务所在的球台名称(如 "A17"、"S1")。 【示例】0001-01-01 00:00:00(用于助教服务所在的球台名称(如 "A17"、"S1"))。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - composite_grade_time。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.skill_grade IS '【说明】顾客对“技能表现”的评分(整数或打分等级)。 【示例】0(用于顾客对“技能表现”的评分(整数或打分等级))。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - skill_grade。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.service_grade IS '【说明】顾客对“服务态度”的评分。 【示例】0(用于顾客对“服务态度”的评分)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - service_grade。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.sum_grade IS '【说明】累计评分总和(可能用于计算平均分),当前为 0。 【示例】0.0(累计评分总和(可能用于计算平均分),当前为 0)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - sum_grade。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.grade_status IS '【说明】1 = 未评价/正常。 【示例】1(用于1 = 未评价/正常)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - grade_status。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.get_grade_times IS '【说明】该条记录对应的评价次数(或该助教被评价次数快照)。 【示例】0(用于该条记录对应的评价次数(或该助教被评价次数快照))。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - get_grade_times。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.is_not_responding IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。 【示例】0(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_not_responding。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.is_confirm IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。 【示例】2(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_confirm。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - $。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】assistant_service_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】assistant_service_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/assistant_service_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】assistant_service_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】assistant_service_records.json - ETL元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS billiards_ods.site_tables_master (
+ id BIGINT PRIMARY KEY,
+ site_id BIGINT,
+ siteName TEXT,
+ "appletQrCodeUrl" TEXT,
+ areaName TEXT,
+ audit_status INT,
+ charge_free INT,
+ create_time TIMESTAMP,
+ delay_lights_time INT,
+ is_online_reservation INT,
+ is_rest_area INT,
+ light_status INT,
+ only_allow_groupon INT,
+ order_delay_time INT,
+ self_table INT,
+ show_status INT,
+ site_table_area_id BIGINT,
+ tableStatusName TEXT,
+ table_cloth_use_Cycle INT,
+ table_cloth_use_time TIMESTAMP,
+ table_name TEXT,
+ table_price NUMERIC(18,2),
+ table_status INT,
+ temporary_light_second INT,
+ virtual_table INT,
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now(),
+ payload JSONB NOT NULL
+);
+
+COMMENT ON TABLE billiards_ods.site_tables_master IS 'ODS 原始明细表:门店桌台主数据。来源:export/test-json-doc/site_tables_master.json;分析:site_tables_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.id IS '【说明】台桌主键 ID。 【示例】2791964216463493(用于台桌主键 ID)。 【JSON字段】site_tables_master.json - data.siteTables - id。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.site_id IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【JSON字段】site_tables_master.json - data.siteTables - site_id。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.siteName IS '【说明】门店名称快照,冗余字段,配合 site_id 使用。 【示例】朗朗桌球(用于门店名称快照,冗余字段,配合 site_id 使用)。 【JSON字段】site_tables_master.json - data.siteTables - siteName。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.areaName IS '【说明】区域名称,用于前台展示和区域维度管理。 【示例】A区(区域名称,用于前台展示和区域维度管理)。 【JSON字段】site_tables_master.json - data.siteTables - areaName。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.audit_status IS '【说明】当前值:全部为 2。 【示例】2(用于当前值:全部为 2)。 【JSON字段】site_tables_master.json - data.siteTables - audit_status。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.charge_free IS '【说明】当前值:全部为 0。 【示例】0(用于当前值:全部为 0)。 【JSON字段】site_tables_master.json - data.siteTables - charge_free。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.create_time IS '【说明】台桌配置的创建时间或最近一次创建/复制时间。 【示例】2025-07-15 17:52:54(用于台桌配置的创建时间或最近一次创建/复制时间)。 【JSON字段】site_tables_master.json - data.siteTables - create_time。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.delay_lights_time IS '【说明】台灯熄灭延迟时间(单位多半是秒或分钟),用于结账后延时关灯。 【示例】0(台灯熄灭延迟时间(单位多半是秒或分钟),用于结账后延时关灯)。 【JSON字段】site_tables_master.json - data.siteTables - delay_lights_time。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.is_online_reservation IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。 【示例】2(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【JSON字段】site_tables_master.json - data.siteTables - is_online_reservation。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.is_rest_area IS '【说明】当前值:全部为 0。 【示例】0(用于当前值:全部为 0)。 【JSON字段】site_tables_master.json - data.siteTables - is_rest_area。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.light_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】2(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】site_tables_master.json - data.siteTables - light_status。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.only_allow_groupon IS '【说明】小程序二维码 URL。 【示例】2(用于小程序二维码 URL)。 【JSON字段】site_tables_master.json - data.siteTables - only_allow_groupon。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.order_delay_time IS '【说明】订单层面允许的“自动延时时长”(例如到点后自动延长多少时间继续计费)。 【示例】0(用于订单层面允许的“自动延时时长”(例如到点后自动延长多少时间继续计费))。 【JSON字段】site_tables_master.json - data.siteTables - order_delay_time。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.self_table IS '【说明】当前值:全部为 1。 【示例】1(用于当前值:全部为 1)。 【JSON字段】site_tables_master.json - data.siteTables - self_table。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.show_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】site_tables_master.json - data.siteTables - show_status。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.site_table_area_id IS '【说明】门店维度的“台桌区域 ID”。 【示例】2791963794329671(用于门店维度的“台桌区域 ID”)。 【JSON字段】site_tables_master.json - data.siteTables - site_table_area_id。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.tableStatusName IS '【说明】table_status 的中文名称,仅为展示用途。 【示例】空闲中(用于table_status 的中文名称,仅为展示用途)。 【JSON字段】site_tables_master.json - data.siteTables - tableStatusName。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.table_cloth_use_Cycle IS '【说明】台呢使用周期阈值,例如达到某个秒数后提醒更换。 【示例】0(用于台呢使用周期阈值,例如达到某个秒数后提醒更换)。 【JSON字段】site_tables_master.json - data.siteTables - table_cloth_use_Cycle。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.table_cloth_use_time IS '【说明】时间字段,用于记录业务时间点/发生时间。 【示例】1863727(时间字段,用于记录业务时间点/发生时间。)。 【JSON字段】site_tables_master.json - data.siteTables - table_cloth_use_time。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.table_name IS '【说明】台号/台名称,用于前台操作界面展示,也出现在小票和各种流水中的 ledger_name 或 tableName 字段。 【示例】A1(台号/台名称,用于前台操作界面展示,也出现在小票和各种流水中的 ledger_name 或 tableName 字段)。 【JSON字段】site_tables_master.json - data.siteTables - table_name。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.table_price IS '【说明】设计上应为“台的基础单价”字段(例如按小时或按局单价)。 【示例】0.0(用于设计上应为“台的基础单价”字段(例如按小时或按局单价))。 【JSON字段】site_tables_master.json - data.siteTables - table_price。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.table_status IS '【说明】台当前运行状态,真实反映某一时刻台的占用/暂停情况。 【示例】1(用于台当前运行状态,真实反映某一时刻台的占用/暂停情况)。 【JSON字段】site_tables_master.json - data.siteTables - table_status。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.temporary_light_second IS '【说明】临时点灯时长(秒),例如手动临时开灯一段时间。 【示例】0(用于临时点灯时长(秒),例如手动临时开灯一段时间)。 【JSON字段】site_tables_master.json - data.siteTables - temporary_light_second。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.virtual_table IS '【说明】当前值:全部为 0。 【示例】0(用于当前值:全部为 0)。 【JSON字段】site_tables_master.json - data.siteTables - virtual_table。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】site_tables_master.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】site_tables_master.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/site_tables_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】site_tables_master.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】site_tables_master.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】site_tables_master.json - data.siteTables - $。';
+
+
+CREATE TABLE IF NOT EXISTS billiards_ods.table_fee_discount_records (
+ id BIGINT PRIMARY KEY,
+ tenant_id BIGINT,
+ site_id BIGINT,
+ siteProfile JSONB,
+ site_table_id BIGINT,
+ tableProfile JSONB,
+ tenant_table_area_id BIGINT,
+ adjust_type INT,
+ ledger_amount NUMERIC(18,2),
+ ledger_count NUMERIC(18,4),
+ ledger_name TEXT,
+ ledger_status INT,
+ applicant_id BIGINT,
+ applicant_name TEXT,
+ operator_id BIGINT,
+ operator_name TEXT,
+ order_settle_id BIGINT,
+ order_trade_no TEXT,
+ is_delete INT,
+ create_time TIMESTAMP,
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now(),
+ payload JSONB NOT NULL
+);
+
+COMMENT ON TABLE billiards_ods.table_fee_discount_records IS 'ODS 原始明细表:台费折扣记录。来源:export/test-json-doc/table_fee_discount_records.json;分析:table_fee_discount_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.id IS '【说明】台费打折 / 调整流水主键 ID。 【示例】2957913441881989(用于台费打折 / 调整流水主键 ID)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - id。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - tenant_id。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.site_id IS '【说明】门店 ID,本批数据全部为同一家门店(朗朗桌球)。 【示例】2790685415443269(用于门店 ID,本批数据全部为同一家门店(朗朗桌球))。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - site_id。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.siteProfile IS '【说明】门店信息快照,用于报表时直接读取,无需再联门店档案。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(门店信息快照,用于报表时直接读取,无需再联门店档案)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - siteProfile。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.site_table_id IS '【说明】台桌 ID。 【示例】2793020259897413(用于台桌 ID)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - site_table_id。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.tableProfile IS '【说明】折扣发生时,对应台桌的配置信息快照。 【示例】{"id": 2793020259897413, "tenant_id": 2790683160709957, "tenant_name": "", "siteName": "", "table_name": "S1", "site_ta…(用于折扣发生时,对应台桌的配置信息快照)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - tableProfile。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.tenant_table_area_id IS '【说明】租户维度的“台桌区域 ID”。 【示例】2791961347968901(用于租户维度的“台桌区域 ID”)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - tenant_table_area_id。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.adjust_type IS '【说明】文件名是“台费打折”,字段名为“调整类型”,当前所有记录都是 1,即“台费打折/台费减免”这一种调整类型。 【示例】1(用于文件名是“台费打折”,字段名为“调整类型”,当前所有记录都是 1,即“台费打折/台费减免”这一种调整类型)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - adjust_type。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_amount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】148.15(金额字段,用于计费/结算/分摊等金额计算。)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - ledger_amount。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_count IS '【说明】这里不是“秒数”,而是“调整次数/条数”的量化,目前固定为 1,表示“一次调账事件”。 【示例】1(用于这里不是“秒数”,而是“调整次数/条数”的量化,目前固定为 1,表示“一次调账事件”)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - ledger_count。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_name IS '【说明】设计上应该用于记录“调账项目名称”或“打折原因描述”(例如某种优惠规则名称),但当前门店并未使用该字段。 【示例】NULL(设计上应该用于记录“调账项目名称”或“打折原因描述”(例如某种优惠规则名称),但当前门店并未使用该字段)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - ledger_name。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - ledger_status。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.applicant_id IS '【说明】打折/调账申请人 ID。 【示例】2790687322443013(用于打折/调账申请人 ID)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - applicant_id。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.applicant_name IS '【说明】申请人姓名(带角色描述),为 applicant_id 的冗余显示字段。 【示例】收银员:郑丽珊(用于申请人姓名(带角色描述),为 applicant_id 的冗余显示字段)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - applicant_name。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.operator_id IS '【说明】实际执行调账操作的操作员 ID。 【示例】2790687322443013(用于实际执行调账操作的操作员 ID)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - operator_id。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.operator_name IS '【说明】操作员姓名。 【示例】收银员:郑丽珊(用于操作员姓名)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - operator_name。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.order_settle_id IS '【说明】结算单/小票 ID。 【示例】2957913171693253(用于结算单/小票 ID)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - order_settle_id。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.order_trade_no IS '【说明】订单交易号。 【示例】2957784612605829(用于订单交易号)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - order_trade_no。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.is_delete IS '【说明】逻辑删除标记(0=否,1=是)。 【示例】0(用于逻辑删除标记(0=否,1=是))。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - is_delete。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.create_time IS '【说明】台费调整记录的创建时间,即打折操作被执行的时间戳。 【示例】2025-11-09 23:25:11(用于台费调整记录的创建时间,即打折操作被执行的时间戳)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - create_time。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】table_fee_discount_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】table_fee_discount_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/table_fee_discount_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】table_fee_discount_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】table_fee_discount_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - $。';
+
+
+CREATE TABLE IF NOT EXISTS billiards_ods.table_fee_transactions (
+ id BIGINT PRIMARY KEY,
+ tenant_id BIGINT,
+ site_id BIGINT,
+ siteProfile JSONB,
+ site_table_id BIGINT,
+ site_table_area_id BIGINT,
+ site_table_area_name TEXT,
+ tenant_table_area_id BIGINT,
+ order_trade_no TEXT,
+ order_pay_id BIGINT,
+ order_settle_id BIGINT,
+ ledger_name TEXT,
+ ledger_amount NUMERIC(18,2),
+ ledger_count NUMERIC(18,4),
+ ledger_unit_price NUMERIC(18,4),
+ ledger_status INT,
+ ledger_start_time TIMESTAMP,
+ ledger_end_time TIMESTAMP,
+ start_use_time TIMESTAMP,
+ last_use_time TIMESTAMP,
+ real_table_use_seconds INT,
+ real_table_charge_money NUMERIC(18,2),
+ add_clock_seconds INT,
+ adjust_amount NUMERIC(18,2),
+ coupon_promotion_amount NUMERIC(18,2),
+ member_discount_amount NUMERIC(18,2),
+ used_card_amount NUMERIC(18,2),
+ mgmt_fee NUMERIC(18,2),
+ service_money NUMERIC(18,2),
+ fee_total NUMERIC(18,2),
+ is_single_order INT,
+ is_delete INT,
+ member_id BIGINT,
+ operator_id BIGINT,
+ operator_name TEXT,
+ salesman_name TEXT,
+ salesman_org_id BIGINT,
+ salesman_user_id BIGINT,
+ create_time TIMESTAMP,
+ payload JSONB NOT NULL,
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now()
+);
+
+COMMENT ON TABLE billiards_ods.table_fee_transactions IS 'ODS 原始明细表:台费流水。来源:export/test-json-doc/table_fee_transactions.json;分析:table_fee_transactions-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.id IS '【说明】台费流水记录主键(事实表主键)。 【示例】2957924029058885(用于台费流水记录主键(事实表主键))。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - id。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - tenant_id。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_id IS '【说明】门店 ID,本次数据全部来自同一门店(朗朗桌球)。 【示例】2790685415443269(用于门店 ID,本次数据全部来自同一门店(朗朗桌球))。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_id。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.siteProfile IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - siteProfile。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_table_id IS '【说明】球台 ID。 【示例】2793003705192517(用于球台 ID)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_table_id。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_table_area_id IS '【说明】门店内“台桌区域” ID(站在门店物理布局的角度)。 【示例】2791963794329671(用于门店内“台桌区域” ID(站在门店物理布局的角度))。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_table_area_id。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_table_area_name IS '【说明】台桌区域的名称,用于门店表现和区域统计。 【示例】A区(台桌区域的名称,用于门店表现和区域统计)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_table_area_name。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.tenant_table_area_id IS '【说明】租户维度的台桌区域 ID(品牌层面的同一类区域)。 【示例】2791960001957765(用于租户维度的台桌区域 ID(品牌层面的同一类区域))。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - tenant_table_area_id。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.order_trade_no IS '【说明】订单交易号,是整笔订单的主编号。 【示例】2957858167230149(用于订单交易号,是整笔订单的主编号)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - order_trade_no。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.order_pay_id IS '【说明】订单支付记录 ID。 【示例】0(用于订单支付记录 ID)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - order_pay_id。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.order_settle_id IS '【说明】结算单号/结账 ID,对应一次结账操作。 【示例】2957922914357125(用于结算单号/结账 ID,对应一次结账操作)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - order_settle_id。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_name IS '【说明】台号名称,实际展示给员工/顾客看的桌台编号。 【示例】A17(用于台号名称,实际展示给员工/顾客看的桌台编号)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_name。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_amount IS '【说明】按单价与计费时长计算出的原始应收台费金额。 【示例】48.0(用于按单价与计费时长计算出的原始应收台费金额)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_amount。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_count IS '【说明】台账记录的计费秒数,计费用秒数(应收时长)。 【示例】3600(用于台账记录的计费秒数,计费用秒数(应收时长))。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_count。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_unit_price IS '【说明】台费结算时设置的 每小时单价/计费单价。 【示例】48.0(用于台费结算时设置的 每小时单价/计费单价)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_unit_price。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_status。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_start_time IS '【说明】台账上的计费起始时间。 【示例】2025-11-09 22:28:57(用于台账上的计费起始时间)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_start_time。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_end_time IS '【说明】台账上的计费结束时间。 【示例】2025-11-09 23:28:57(用于台账上的计费结束时间)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_end_time。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.start_use_time IS '【说明】台开始使用的时间(实际开台时间)。 【示例】2025-11-09 22:28:57(用于台开始使用的时间(实际开台时间))。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - start_use_time。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.last_use_time IS '【说明】最后使用/操作时间。 【示例】2025-11-09 23:28:57(用于最后使用/操作时间)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - last_use_time。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.real_table_use_seconds IS '【说明】实际使用的总秒数(系统真实统计的使用时长)。 【示例】3600(用于实际使用的总秒数(系统真实统计的使用时长))。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - real_table_use_seconds。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.real_table_charge_money IS '【说明】台费中实际向顾客收取的金额(现金/实付维度,未含券方承担或内部调账的那一部分)。 【示例】0.0(用于台费中实际向顾客收取的金额(现金/实付维度,未含券方承担或内部调账的那一部分))。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - real_table_charge_money。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.add_clock_seconds IS '【说明】加钟秒数,在原有使用基础上追加的时长。 【示例】0(用于加钟秒数,在原有使用基础上追加的时长)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - add_clock_seconds。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.adjust_amount IS '【说明】调整金额/调账金额,用于将台费金额转移或冲减到其它项目,或手工调整。 【示例】0.0(调整金额/调账金额,用于将台费金额转移或冲减到其它项目,或手工调整)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - adjust_amount。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.coupon_promotion_amount IS '【说明】由优惠券/活动/团购(平台/门店促销)承担的优惠金额,直接抵扣在台费上。 【示例】48.0(用于由优惠券/活动/团购(平台/门店促销)承担的优惠金额,直接抵扣在台费上)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - coupon_promotion_amount。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.member_discount_amount IS '【说明】由会员权益产生的优惠金额,例如会员折扣、会员价等。 【示例】0.0(用于由会员权益产生的优惠金额,例如会员折扣、会员价等)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - member_discount_amount。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.used_card_amount IS '【说明】由储值卡、次卡等“卡内余额”抵扣的金额。 【示例】0.0(用于由储值卡、次卡等“卡内余额”抵扣的金额)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - used_card_amount。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.mgmt_fee IS '【说明】管理费字段,用于未来支持“台费附加管理费/服务费”的功能。 【示例】0.0(管理费字段,用于未来支持“台费附加管理费/服务费”的功能)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - mgmt_fee。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.service_money IS '【说明】门店用于记录“服务费/成本/分成金额”的字段,类似助教流水里的 service_money。 【示例】0.0(门店用于记录“服务费/成本/分成金额”的字段,类似助教流水里的 service_money)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - service_money。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.fee_total IS '【说明】各种附加费用(如管理费、服务费)合计值。 【示例】0.0(用于各种附加费用(如管理费、服务费)合计值)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - fee_total。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.is_single_order IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。 【示例】1(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - is_single_order。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.is_delete IS '【说明】逻辑删除标记(0=否,1=是)。 【示例】0(用于逻辑删除标记(0=否,1=是))。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - is_delete。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.member_id IS '【说明】门店/租户内的会员 ID。 【示例】0(用于门店/租户内的会员 ID)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - member_id。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.operator_id IS '【说明】操作员 ID,负责开台/结账的员工账号 ID。 【示例】2790687322443013(用于操作员 ID,负责开台/结账的员工账号 ID)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - operator_id。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.operator_name IS '【说明】操作员姓名(冗余字段),便于直接阅读,不必再联表员工档案。 【示例】收银员:郑丽珊(用于操作员姓名(冗余字段),便于直接阅读,不必再联表员工档案)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - operator_name。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.salesman_name IS '【说明】业务员/营业员姓名,如果台费有单独提成员工,这里记录归属人。 【示例】NULL(用于业务员/营业员姓名,如果台费有单独提成员工,这里记录归属人)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - salesman_name。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.salesman_org_id IS '【说明】营业员所属机构/部门 ID。 【示例】0(用于营业员所属机构/部门 ID)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - salesman_org_id。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.salesman_user_id IS '【说明】营业员的用户 ID(与 salesman_name 搭配)。 【示例】0(用于营业员的用户 ID(与 salesman_name 搭配))。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - salesman_user_id。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.create_time IS '【说明】这条台费流水记录的创建时间,通常接近结账时间。 【示例】2025-11-09 23:35:57(用于这条台费流水记录的创建时间,通常接近结账时间)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - create_time。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - $。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】table_fee_transactions.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】table_fee_transactions.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/table_fee_transactions.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】table_fee_transactions.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】table_fee_transactions.json - ETL元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS billiards_ods.goods_stock_movements (
+ siteGoodsStockId BIGINT PRIMARY KEY,
+ tenantId BIGINT,
+ siteId BIGINT,
+ siteGoodsId BIGINT,
+ goodsName TEXT,
+ goodsCategoryId BIGINT,
+ goodsSecondCategoryId BIGINT,
+ unit TEXT,
+ price NUMERIC(18,4),
+ stockType INT,
+ changeNum NUMERIC(18,4),
+ startNum NUMERIC(18,4),
+ endNum NUMERIC(18,4),
+ changeNumA NUMERIC(18,4),
+ startNumA NUMERIC(18,4),
+ endNumA NUMERIC(18,4),
+ remark TEXT,
+ operatorName TEXT,
+ createTime TIMESTAMP,
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now(),
+ payload JSONB NOT NULL
+);
+
+COMMENT ON TABLE billiards_ods.goods_stock_movements IS 'ODS 原始明细表:商品库存变动流水。来源:export/test-json-doc/goods_stock_movements.json;分析:goods_stock_movements-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.siteGoodsStockId IS '【说明】门店某个“商品库存记录”的主键 ID。 【示例】2957911857581957(用于门店某个“商品库存记录”的主键 ID)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - siteGoodsStockId。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.tenantId IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - tenantId。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.siteId IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - siteId。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.siteGoodsId IS '【说明】门店维度的商品 ID。 【示例】2793026183532613(用于门店维度的商品 ID)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - siteGoodsId。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.goodsName IS '【说明】商品名称。 【示例】阿萨姆(用于商品名称)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - goodsName。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.goodsCategoryId IS '【说明】商品一级分类 ID。 【示例】2790683528350539(用于商品一级分类 ID)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - goodsCategoryId。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.goodsSecondCategoryId IS '【说明】商品二级分类 ID。 【示例】2790683528350540(用于商品二级分类 ID)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - goodsSecondCategoryId。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.unit IS '【说明】库存计量单位。 【示例】瓶(用于库存计量单位)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - unit。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.price IS '【说明】商品单价(单位金额)。 【示例】8.0(用于商品单价(单位金额))。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - price。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.stockType IS '【说明】1:89 条。 【示例】1(用于1:89 条)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - stockType。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.changeNum IS '【说明】本次库存数量变化值。 【示例】-1(用于本次库存数量变化值)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - changeNum。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.startNum IS '【说明】变动前(这次出入库之前)的库存数量。 【示例】28(用于变动前(这次出入库之前)的库存数量)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - startNum。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.endNum IS '【说明】变动后(出入库之后)的库存数量。 【示例】27(用于变动后(出入库之后)的库存数量)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - endNum。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.changeNumA IS '【说明】辅助单位的变化量(与 changeNum 对应的第二计量单位变化),当前未使用。 【示例】0(用于辅助单位的变化量(与 changeNum 对应的第二计量单位变化),当前未使用)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - changeNumA。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.startNumA IS '【说明】辅助计量单位的起始库存(例如件/箱等第二单位)。 【示例】0(用于辅助计量单位的起始库存(例如件/箱等第二单位))。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - startNumA。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.endNumA IS '【说明】辅助单位的变动后库存,同样未启用。 【示例】0(用于辅助单位的变动后库存,同样未启用)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - endNumA。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.remark IS '【说明】备注信息,用于手工记录本次变更的特殊原因说明(例如“盘点差异调整”“报损”)。 【示例】NULL(备注信息,用于手工记录本次变更的特殊原因说明(例如“盘点差异调整”“报损”))。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - remark。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.operatorName IS '【说明】执行此次库存变动的操作人。 【示例】收银员:郑丽珊(用于执行此次库存变动的操作人)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - operatorName。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.createTime IS '【说明】这条库存变动记录的创建时间,即发生库存变更的时间点。 【示例】2025-11-09 23:23:34(用于这条库存变动记录的创建时间,即发生库存变更的时间点)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - createTime。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】goods_stock_movements.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】goods_stock_movements.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/goods_stock_movements.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】goods_stock_movements.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】goods_stock_movements.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - $。';
+
+
+CREATE TABLE IF NOT EXISTS billiards_ods.stock_goods_category_tree (
+ id BIGINT PRIMARY KEY,
+ tenant_id BIGINT,
+ category_name TEXT,
+ alias_name TEXT,
+ pid BIGINT,
+ business_name TEXT,
+ tenant_goods_business_id BIGINT,
+ open_salesman INT,
+ categoryBoxes JSONB,
+ sort INT,
+ is_warehousing INT,
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now(),
+ payload JSONB NOT NULL
+);
+
+COMMENT ON TABLE billiards_ods.stock_goods_category_tree IS 'ODS 原始明细表:商品分类树。来源:export/test-json-doc/stock_goods_category_tree.json;分析:stock_goods_category_tree-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.id IS '【说明】分类节点主键 ID(在商品分类维度中的唯一标识)。 【示例】2790683528350533(用于分类节点主键 ID(在商品分类维度中的唯一标识))。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - id。';
+COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.tenant_id IS '【说明】租户 ID(品牌/商户 ID)。 【示例】2790683160709957(用于租户 ID(品牌/商户 ID))。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - tenant_id。';
+COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.category_name IS '【说明】分类名称(实际业务分类名称)。 【示例】槟榔(用于分类名称(实际业务分类名称))。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - category_name。';
+COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.alias_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别。)。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - alias_name。';
+COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.pid IS '【说明】父级分类 ID。 【示例】0(用于父级分类 ID)。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - pid。';
+COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.business_name IS '【说明】业务大类名称。 【示例】槟榔(用于业务大类名称)。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - business_name。';
+COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.tenant_goods_business_id IS '【说明】业务大类 ID。 【示例】2790683528317766(用于业务大类 ID)。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - tenant_goods_business_id。';
+COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.open_salesman IS '【说明】是否启用“营业员”或“导购提成”相关的功能开关。 【示例】2(用于是否启用“营业员”或“导购提成”相关的功能开关)。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - open_salesman。';
+COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.categoryBoxes IS '【说明】子分类数组。 【示例】[{"id": 2790683528350534, "tenant_id": 2790683160709957, "category_name": "槟榔", "alias_name": "", "pid": 27906835283505…(用于子分类数组)。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - categoryBoxes。';
+COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.sort IS '【说明】分类的排序序号,用于前端展示顺序的控制。 【示例】1(分类的排序序号,用于前端展示顺序的控制)。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - sort。';
+COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.is_warehousing IS '【说明】本文件可视为“所有参与库存管理的商品分类清单”,因此均为 1。 【示例】1(用于本文件可视为“所有参与库存管理的商品分类清单”,因此均为 1)。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - is_warehousing。';
+COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】stock_goods_category_tree.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】stock_goods_category_tree.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/stock_goods_category_tree.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】stock_goods_category_tree.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】stock_goods_category_tree.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - $。';
+
+
+CREATE TABLE IF NOT EXISTS billiards_ods.goods_stock_summary (
+ siteGoodsId BIGINT PRIMARY KEY,
+ goodsName TEXT,
+ goodsUnit TEXT,
+ goodsCategoryId BIGINT,
+ goodsCategorySecondId BIGINT,
+ categoryName TEXT,
+ rangeStartStock NUMERIC(18,4),
+ rangeEndStock NUMERIC(18,4),
+ rangeIn NUMERIC(18,4),
+ rangeOut NUMERIC(18,4),
+ rangeSale NUMERIC(18,4),
+ rangeSaleMoney NUMERIC(18,2),
+ rangeInventory NUMERIC(18,4),
+ currentStock NUMERIC(18,4),
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now(),
+ payload JSONB NOT NULL
+);
+
+COMMENT ON TABLE billiards_ods.goods_stock_summary IS 'ODS 原始明细表:商品库存汇总。来源:export/test-json-doc/goods_stock_summary.json;分析:goods_stock_summary-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.goods_stock_summary.siteGoodsId IS '【说明】门店商品 ID,本库存汇总表的主键,对应某个具体商品在本店的唯一标识。 【示例】2791953867886725(用于门店商品 ID,本库存汇总表的主键,对应某个具体商品在本店的唯一标识)。 【JSON字段】goods_stock_summary.json - $ - siteGoodsId。';
+COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsName IS '【说明】商品名称,冗余于门店商品档案的 goods_name。 【示例】东方树叶(用于商品名称,冗余于门店商品档案的 goods_name)。 【JSON字段】goods_stock_summary.json - $ - goodsName。';
+COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsUnit IS '【说明】商品的计量单位(售卖单位)。 【示例】瓶(用于商品的计量单位(售卖单位))。 【JSON字段】goods_stock_summary.json - $ - goodsUnit。';
+COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsCategoryId IS '【说明】一级商品分类 ID。 【示例】2790683528350539(用于一级商品分类 ID)。 【JSON字段】goods_stock_summary.json - $ - goodsCategoryId。';
+COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsCategorySecondId IS '【说明】二级(次级)商品分类 ID,是 goodsCategoryId 的下级分类。 【示例】2790683528350540(用于二级(次级)商品分类 ID,是 goodsCategoryId 的下级分类)。 【JSON字段】goods_stock_summary.json - $ - goodsCategorySecondId。';
+COMMENT ON COLUMN billiards_ods.goods_stock_summary.categoryName IS '【说明】一级分类名称,属于冗余字段,用于直接展示。 【示例】酒水(一级分类名称,属于冗余字段,用于直接展示)。 【JSON字段】goods_stock_summary.json - $ - categoryName。';
+COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeStartStock IS '【说明】查询区间 起始时刻 的库存数量(期初库存)。 【示例】165(用于查询区间 起始时刻 的库存数量(期初库存))。 【JSON字段】goods_stock_summary.json - $ - rangeStartStock。';
+COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeEndStock IS '【说明】查询区间 结束时刻 的库存数量(期末库存)。 【示例】118(用于查询区间 结束时刻 的库存数量(期末库存))。 【JSON字段】goods_stock_summary.json - $ - rangeEndStock。';
+COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeIn IS '【说明】查询区间内的 入库数量汇总(正值),包括采购入库、调拨入库等。 【示例】450(用于查询区间内的 入库数量汇总(正值),包括采购入库、调拨入库等)。 【JSON字段】goods_stock_summary.json - $ - rangeIn。';
+COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeOut IS '【说明】查询区间内的 出库数量汇总,以 负数 表示从库存扣减(出库/销售)。 【示例】-497(用于查询区间内的 出库数量汇总,以 负数 表示从库存扣减(出库/销售))。 【JSON字段】goods_stock_summary.json - $ - rangeOut。';
+COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeSale IS '【说明】查询区间内,该商品的 销售数量汇总(售出多少“包/瓶/份”等)。 【示例】488(用于查询区间内,该商品的 销售数量汇总(售出多少“包/瓶/份”等))。 【JSON字段】goods_stock_summary.json - $ - rangeSale。';
+COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeSaleMoney IS '【说明】查询区间内,该商品销售的 金额小计(按商品维度汇总)。 【示例】3904.0(用于查询区间内,该商品销售的 金额小计(按商品维度汇总))。 【JSON字段】goods_stock_summary.json - $ - rangeSaleMoney。';
+COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeInventory IS '【说明】查询区间内的 盘点调整净变动量(盘盈–盘亏)。 【示例】0(用于查询区间内的 盘点调整净变动量(盘盈–盘亏))。 【JSON字段】goods_stock_summary.json - $ - rangeInventory。';
+COMMENT ON COLUMN billiards_ods.goods_stock_summary.currentStock IS '【说明】导出时刻的实时库存数量。 【示例】118(用于导出时刻的实时库存数量)。 【JSON字段】goods_stock_summary.json - $ - currentStock。';
+COMMENT ON COLUMN billiards_ods.goods_stock_summary.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】goods_stock_summary.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】goods_stock_summary.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.goods_stock_summary.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/goods_stock_summary.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】goods_stock_summary.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.goods_stock_summary.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】goods_stock_summary.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.goods_stock_summary.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】goods_stock_summary.json - $ - $。';
+
+
+CREATE TABLE IF NOT EXISTS billiards_ods.payment_transactions (
+ id BIGINT PRIMARY KEY,
+ site_id BIGINT,
+ siteProfile JSONB,
+ relate_type INT,
+ relate_id BIGINT,
+ pay_amount NUMERIC(18,2),
+ pay_status INT,
+ pay_time TIMESTAMP,
+ create_time TIMESTAMP,
+ payment_method INT,
+ online_pay_channel INT,
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now(),
+ payload JSONB NOT NULL
+);
+
+COMMENT ON TABLE billiards_ods.payment_transactions IS 'ODS 原始明细表:支付流水。来源:export/test-json-doc/payment_transactions.json;分析:payment_transactions-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.payment_transactions.id IS '【说明】支付流水记录的主键 ID。 【示例】2957924026486597(用于支付流水记录的主键 ID)。 【JSON字段】payment_transactions.json - $ - id。';
+COMMENT ON COLUMN billiards_ods.payment_transactions.site_id IS '【说明】支付记录所属的门店 ID。 【示例】2790685415443269(用于支付记录所属的门店 ID)。 【JSON字段】payment_transactions.json - $ - site_id。';
+COMMENT ON COLUMN billiards_ods.payment_transactions.siteProfile IS '【说明】门店信息快照,与其他 JSON 中的 siteProfile 结构一致。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(用于门店信息快照,与其他 JSON 中的 siteProfile 结构一致)。 【JSON字段】payment_transactions.json - $ - siteProfile。';
+COMMENT ON COLUMN billiards_ods.payment_transactions.relate_type IS '【说明】表示“这条支付记录关联的业务类型”。 【示例】2(用于表示“这条支付记录关联的业务类型”)。 【JSON字段】payment_transactions.json - $ - relate_type。';
+COMMENT ON COLUMN billiards_ods.payment_transactions.relate_id IS '【说明】关联业务记录的主键 ID(按 relate_type 不同指向不同表)。 【示例】2957922914357125(用于关联业务记录的主键 ID(按 relate_type 不同指向不同表))。 【JSON字段】payment_transactions.json - $ - relate_id。';
+COMMENT ON COLUMN billiards_ods.payment_transactions.pay_amount IS '【说明】本条支付流水的“支付金额”,单位为元。 【示例】10.0(用于本条支付流水的“支付金额”,单位为元)。 【JSON字段】payment_transactions.json - $ - pay_amount。';
+COMMENT ON COLUMN billiards_ods.payment_transactions.pay_status IS '【说明】支付状态枚举字段。 【示例】2(用于支付状态枚举字段)。 【JSON字段】payment_transactions.json - $ - pay_status。';
+COMMENT ON COLUMN billiards_ods.payment_transactions.pay_time IS '【说明】实际支付完成时间(支付状态变为成功的时间戳)。 【示例】2025-11-09 23:35:57(用于实际支付完成时间(支付状态变为成功的时间戳))。 【JSON字段】payment_transactions.json - $ - pay_time。';
+COMMENT ON COLUMN billiards_ods.payment_transactions.create_time IS '【说明】支付记录创建时间,通常与发起支付请求的时间一致(创建支付流水的时间戳)。 【示例】2025-11-09 23:35:57(用于支付记录创建时间,通常与发起支付请求的时间一致(创建支付流水的时间戳))。 【JSON字段】payment_transactions.json - $ - create_time。';
+COMMENT ON COLUMN billiards_ods.payment_transactions.payment_method IS '【说明】支付方式枚举,例如微信、支付宝、现金、银行卡、储值卡等某一种。 【示例】4(用于支付方式枚举,例如微信、支付宝、现金、银行卡、储值卡等某一种)。 【JSON字段】payment_transactions.json - $ - payment_method。';
+COMMENT ON COLUMN billiards_ods.payment_transactions.online_pay_channel IS '【说明】每一笔结账单(settleList.id)对应一条支付记录(当前样本中是一条记录,relate_id 唯一)。 【示例】0(用于每一笔结账单(settleList.id)对应一条支付记录(当前样本中是一条记录,relate_id 唯一))。 【JSON字段】payment_transactions.json - $ - online_pay_channel。';
+COMMENT ON COLUMN billiards_ods.payment_transactions.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】payment_transactions.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】payment_transactions.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.payment_transactions.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/payment_transactions.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】payment_transactions.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.payment_transactions.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】payment_transactions.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.payment_transactions.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】payment_transactions.json - $ - $。';
+
+
+CREATE TABLE IF NOT EXISTS billiards_ods.refund_transactions (
+ id BIGINT PRIMARY KEY,
+ tenant_id BIGINT,
+ tenantName TEXT,
+ site_id BIGINT,
+ siteProfile JSONB,
+ relate_type INT,
+ relate_id BIGINT,
+ pay_sn TEXT,
+ pay_amount NUMERIC(18,2),
+ refund_amount NUMERIC(18,2),
+ round_amount NUMERIC(18,2),
+ pay_status INT,
+ pay_time TIMESTAMP,
+ create_time TIMESTAMP,
+ payment_method INT,
+ pay_terminal INT,
+ pay_config_id BIGINT,
+ online_pay_channel INT,
+ online_pay_type INT,
+ channel_fee NUMERIC(18,2),
+ channel_payer_id TEXT,
+ channel_pay_no TEXT,
+ member_id BIGINT,
+ member_card_id BIGINT,
+ cashier_point_id BIGINT,
+ operator_id BIGINT,
+ action_type INT,
+ check_status INT,
+ is_revoke INT,
+ is_delete INT,
+ balance_frozen_amount NUMERIC(18,2),
+ card_frozen_amount NUMERIC(18,2),
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now(),
+ payload JSONB NOT NULL
+);
+
+COMMENT ON TABLE billiards_ods.refund_transactions IS 'ODS 原始明细表:退款流水。来源:export/test-json-doc/refund_transactions.json;分析:refund_transactions-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.id IS '【说明】本条 退款流水 的唯一 ID。 【示例】2955202296416389(用于本条 退款流水 的唯一 ID)。 【JSON字段】refund_transactions.json - $ - id。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.tenant_id IS '【说明】租户/品牌 ID,全系统维度标识该商户。 【示例】2790683160709957(用于租户/品牌 ID,全系统维度标识该商户)。 【JSON字段】refund_transactions.json - $ - tenant_id。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.tenantName IS '【说明】租户(商户)名称。 【示例】朗朗桌球(用于租户(商户)名称)。 【JSON字段】refund_transactions.json - $ - tenantName。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.site_id IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【JSON字段】refund_transactions.json - $ - site_id。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.siteProfile IS '【说明】门店信息快照,结构与其他 JSON 中的 siteProfile 完全一致。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(用于门店信息快照,结构与其他 JSON 中的 siteProfile 完全一致)。 【JSON字段】refund_transactions.json - $ - siteProfile。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.relate_type IS '【说明】本退款对应的“业务类型”。 【示例】5(用于本退款对应的“业务类型”)。 【JSON字段】refund_transactions.json - $ - relate_type。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.relate_id IS '【说明】本次退款关联的业务 ID。 【示例】2955078219057349(用于本次退款关联的业务 ID)。 【JSON字段】refund_transactions.json - $ - relate_id。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.pay_sn IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】0(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】refund_transactions.json - $ - pay_sn。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.pay_amount IS '【说明】本次退款的 资金变动金额。 【示例】-5000.0(用于本次退款的 资金变动金额)。 【JSON字段】refund_transactions.json - $ - pay_amount。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.refund_amount IS '【说明】设计上本应显示“实际退款金额”(正数),与 pay_amount 配合使用。 【示例】0.0(用于设计上本应显示“实际退款金额”(正数),与 pay_amount 配合使用)。 【JSON字段】refund_transactions.json - $ - refund_amount。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.round_amount IS '【说明】舍入金额/抹零金额。 【示例】0.0(用于舍入金额/抹零金额)。 【JSON字段】refund_transactions.json - $ - round_amount。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.pay_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】2(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】refund_transactions.json - $ - pay_status。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.pay_time IS '【说明】退款在支付渠道层面实际发生的时间。 【示例】2025-11-08 01:27:16(用于退款在支付渠道层面实际发生的时间)。 【JSON字段】refund_transactions.json - $ - pay_time。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.create_time IS '【说明】本条退款流水在系统内创建时间。 【示例】2025-11-08 01:27:16(用于本条退款流水在系统内创建时间)。 【JSON字段】refund_transactions.json - $ - create_time。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.payment_method IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】4(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】refund_transactions.json - $ - payment_method。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.pay_terminal IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】refund_transactions.json - $ - pay_terminal。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.pay_config_id IS '【说明】支付配置 ID,例如商户在“非球科技”内配置的某一条支付通道(某个微信商户号、银联通道)的主键。 【示例】0(用于支付配置 ID,例如商户在“非球科技”内配置的某一条支付通道(某个微信商户号、银联通道)的主键)。 【JSON字段】refund_transactions.json - $ - pay_config_id。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.online_pay_channel IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】0(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】refund_transactions.json - $ - online_pay_channel。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.online_pay_type IS '【说明】当前:全部 0。 【示例】0(用于当前:全部 0)。 【JSON字段】refund_transactions.json - $ - online_pay_type。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.channel_fee IS '【说明】第三方支付渠道对本次退款收取的手续费。 【示例】0.0(用于第三方支付渠道对本次退款收取的手续费)。 【JSON字段】refund_transactions.json - $ - channel_fee。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.channel_payer_id IS '【说明】支付渠道侧的 payer ID,例如微信 openid、银行卡号掩码等。 【示例】NULL(用于支付渠道侧的 payer ID,例如微信 openid、银行卡号掩码等)。 【JSON字段】refund_transactions.json - $ - channel_payer_id。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.channel_pay_no IS '【说明】第三方支付平台的交易号(如微信支付单号、支付宝交易号等)。 【示例】NULL(用于第三方支付平台的交易号(如微信支付单号、支付宝交易号等))。 【JSON字段】refund_transactions.json - $ - channel_pay_no。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.member_id IS '【说明】租户内部的会员 ID(对应会员档案中的某个主键)。 【示例】0(用于租户内部的会员 ID(对应会员档案中的某个主键))。 【JSON字段】refund_transactions.json - $ - member_id。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.member_card_id IS '【说明】关联的会员卡账户 ID(对应“储值卡列表”或“会员档案”中的某一张卡)。 【示例】0(用于关联的会员卡账户 ID(对应“储值卡列表”或“会员档案”中的某一张卡))。 【JSON字段】refund_transactions.json - $ - member_card_id。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.cashier_point_id IS '【说明】收银点 ID,例如前台 1、前台 2、自助机等。 【示例】0(用于收银点 ID,例如前台 1、前台 2、自助机等)。 【JSON字段】refund_transactions.json - $ - cashier_point_id。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.operator_id IS '【说明】执行该退款操作的操作员 ID。 【示例】0(用于执行该退款操作的操作员 ID)。 【JSON字段】refund_transactions.json - $ - operator_id。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.action_type IS '【说明】当前:全部 2。 【示例】2(用于当前:全部 2)。 【JSON字段】refund_transactions.json - $ - action_type。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.check_status IS '【说明】当前:全部 1。 【示例】1(用于当前:全部 1)。 【JSON字段】refund_transactions.json - $ - check_status。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.is_revoke IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。 【示例】0(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【JSON字段】refund_transactions.json - $ - is_revoke。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.is_delete IS '【说明】逻辑删除标志。 【示例】0(用于逻辑删除标志)。 【JSON字段】refund_transactions.json - $ - is_delete。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.balance_frozen_amount IS '【说明】涉及会员储值卡退款时,暂时冻结的余额金额。 【示例】0.0(用于涉及会员储值卡退款时,暂时冻结的余额金额)。 【JSON字段】refund_transactions.json - $ - balance_frozen_amount。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.card_frozen_amount IS '【说明】与上一个类似,偏向“某张卡的被冻结金额”,也与会员卡/储值账户相关。 【示例】0.0(用于与上一个类似,偏向“某张卡的被冻结金额”,也与会员卡/储值账户相关)。 【JSON字段】refund_transactions.json - $ - card_frozen_amount。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】refund_transactions.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】refund_transactions.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/refund_transactions.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】refund_transactions.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】refund_transactions.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】refund_transactions.json - $ - $。';
+
+
+CREATE TABLE IF NOT EXISTS billiards_ods.platform_coupon_redemption_records (
+ id BIGINT PRIMARY KEY,
+ verify_id BIGINT,
+ certificate_id TEXT,
+ coupon_code TEXT,
+ coupon_name TEXT,
+ coupon_channel INT,
+ groupon_type INT,
+ group_package_id BIGINT,
+ sale_price NUMERIC(18,2),
+ coupon_money NUMERIC(18,2),
+ coupon_free_time NUMERIC(18,2),
+ coupon_cover TEXT,
+ coupon_remark TEXT,
+ use_status INT,
+ consume_time TIMESTAMP,
+ create_time TIMESTAMP,
+ deal_id TEXT,
+ channel_deal_id TEXT,
+ site_id BIGINT,
+ site_order_id BIGINT,
+ table_id BIGINT,
+ tenant_id BIGINT,
+ operator_id BIGINT,
+ operator_name TEXT,
+ is_delete INT,
+ siteProfile JSONB,
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now(),
+ payload JSONB NOT NULL
+);
+
+COMMENT ON TABLE billiards_ods.platform_coupon_redemption_records IS 'ODS 原始明细表:平台券核销/使用记录。来源:export/test-json-doc/platform_coupon_redemption_records.json;分析:platform_coupon_redemption_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.id IS '【说明】本条平台验券记录在本系统内的主键 ID。 【示例】2957929042218501(用于本条平台验券记录在本系统内的主键 ID)。 【JSON字段】platform_coupon_redemption_records.json - $ - id。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.verify_id IS '【说明】平台核销记录 ID(某些平台会为每一次核销生成一个唯一 ID)。 【示例】7570689090418149418(用于平台核销记录 ID(某些平台会为每一次核销生成一个唯一 ID))。 【JSON字段】platform_coupon_redemption_records.json - $ - verify_id。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.certificate_id IS '【说明】平台侧的凭证 ID(通常由第三方团购平台生成的券实例 ID)。 【示例】5008024789379597447(用于平台侧的凭证 ID(通常由第三方团购平台生成的券实例 ID))。 【JSON字段】platform_coupon_redemption_records.json - $ - certificate_id。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_code IS '【说明】券码,顾客出示的团购券密码/编号。 【示例】0102701209726(用于券码,顾客出示的团购券密码/编号)。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_code。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_name IS '【说明】团购券产品名称(即第三方平台上向顾客展示的名称)。 【示例】【全天可用】中八桌球一小时(A区)(用于团购券产品名称(即第三方平台上向顾客展示的名称))。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_name。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_channel IS '【说明】券来源渠道(第三方平台渠道编号)。 【示例】1(用于券来源渠道(第三方平台渠道编号))。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_channel。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.groupon_type IS '【说明】团购券类型。 【示例】1(用于团购券类型)。 【JSON字段】platform_coupon_redemption_records.json - $ - groupon_type。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.group_package_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体。)。 【JSON字段】platform_coupon_redemption_records.json - $ - group_package_id。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.sale_price IS '【说明】顾客在第三方平台上实际支付的价格(团购售价)。 【示例】29.9(用于顾客在第三方平台上实际支付的价格(团购售价))。 【JSON字段】platform_coupon_redemption_records.json - $ - sale_price。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_money IS '【说明】券面值 / 套餐价值(系统层面的“可抵扣金额或对应套餐价值”)。 【示例】48.0(用于券面值 / 套餐价值(系统层面的“可抵扣金额或对应套餐价值”))。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_money。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_free_time IS '【说明】券附带的“免费时长”字段(例如送多少分钟台费)。 【示例】0(用于券附带的“免费时长”字段(例如送多少分钟台费))。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_free_time。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_cover IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_cover。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_remark IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】617547ec-9697-4f58-a700-b30a49e88904||CgYIASAHKAESLgos9ZhHDryhHb0z3RpdBZ0dVoaQbkldBcx/XTXPV8Te+9SEqYOa7aDp8nbKOpsaAA==(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_remark。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.use_status IS '【说明】值 1:198 条。 【示例】1(用于值 1:198 条)。 【JSON字段】platform_coupon_redemption_records.json - $ - use_status。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.consume_time IS '【说明】券被核销/使用的业务时间。 【示例】2025-11-09 23:41:04(用于券被核销/使用的业务时间)。 【JSON字段】platform_coupon_redemption_records.json - $ - consume_time。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.create_time IS '【说明】验券记录在本系统中创建的时间(记录入库时间)。 【示例】2025-11-09 23:41:03(用于验券记录在本系统中创建的时间(记录入库时间))。 【JSON字段】platform_coupon_redemption_records.json - $ - create_time。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.deal_id IS '【说明】另一个层次的团购产品 ID。 【示例】1345108507(用于另一个层次的团购产品 ID)。 【JSON字段】platform_coupon_redemption_records.json - $ - deal_id。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.channel_deal_id IS '【说明】渠道侧 dealId / 产品 ID,一般是第三方平台给该团购商品定义的主键。 【示例】1128411555(用于渠道侧 dealId / 产品 ID,一般是第三方平台给该团购商品定义的主键)。 【JSON字段】platform_coupon_redemption_records.json - $ - channel_deal_id。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.site_id IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【JSON字段】platform_coupon_redemption_records.json - $ - site_id。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.site_order_id IS '【说明】门店内部的订单 ID(平台券核销时对应的店内订单)。 【示例】2957929043037702(用于门店内部的订单 ID(平台券核销时对应的店内订单))。 【JSON字段】platform_coupon_redemption_records.json - $ - site_order_id。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.table_id IS '【说明】使用券的球台 ID。 【示例】2793001904918661(用于使用券的球台 ID)。 【JSON字段】platform_coupon_redemption_records.json - $ - table_id。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.tenant_id IS '【说明】商户/租户 ID(品牌级别)。 【示例】2790683160709957(用于商户/租户 ID(品牌级别))。 【JSON字段】platform_coupon_redemption_records.json - $ - tenant_id。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.operator_id IS '【说明】操作员 ID(执行验券操作的收银员/员工)。 【示例】2790687322443013(用于操作员 ID(执行验券操作的收银员/员工))。 【JSON字段】platform_coupon_redemption_records.json - $ - operator_id。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.operator_name IS '【说明】操作员姓名,例如 "收银员:郑丽珊"。 【示例】收银员:郑丽珊(用于操作员姓名,例如 "收银员:郑丽珊")。 【JSON字段】platform_coupon_redemption_records.json - $ - operator_name。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.is_delete IS '【说明】把平台验券记录挂到本门店的一条订单上。 【示例】0(用于把平台验券记录挂到本门店的一条订单上)。 【JSON字段】platform_coupon_redemption_records.json - $ - is_delete。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.siteProfile IS '【说明】门店信息快照。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(用于门店信息快照)。 【JSON字段】platform_coupon_redemption_records.json - $ - siteProfile。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】platform_coupon_redemption_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】platform_coupon_redemption_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/platform_coupon_redemption_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】platform_coupon_redemption_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】platform_coupon_redemption_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】platform_coupon_redemption_records.json - $ - $。';
+
+
+CREATE TABLE IF NOT EXISTS billiards_ods.tenant_goods_master (
+ id BIGINT PRIMARY KEY,
+ tenant_id BIGINT,
+ goods_name TEXT,
+ goods_bar_code TEXT,
+ goods_category_id BIGINT,
+ goods_second_category_id BIGINT,
+ categoryName TEXT,
+ unit TEXT,
+ goods_number TEXT,
+ out_goods_id TEXT,
+ goods_state INT,
+ sale_channel INT,
+ able_discount INT,
+ able_site_transfer INT,
+ is_delete INT,
+ is_warehousing INT,
+ isInSite INT,
+ cost_price NUMERIC(18,4),
+ cost_price_type INT,
+ market_price NUMERIC(18,4),
+ min_discount_price NUMERIC(18,4),
+ common_sale_royalty NUMERIC(18,4),
+ point_sale_royalty NUMERIC(18,4),
+ pinyin_initial TEXT,
+ commodityCode TEXT,
+ commodity_code TEXT,
+ goods_cover TEXT,
+ supplier_id BIGINT,
+ remark_name TEXT,
+ create_time TIMESTAMP,
+ update_time TIMESTAMP,
+ payload JSONB NOT NULL,
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now()
+);
+
+COMMENT ON TABLE billiards_ods.tenant_goods_master IS 'ODS 原始明细表:租户商品主数据。来源:export/test-json-doc/tenant_goods_master.json;分析:tenant_goods_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.id IS '【说明】商品档案主键 ID,唯一标识一条商品。 【示例】2791925230096261(用于商品档案主键 ID,唯一标识一条商品)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - id。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - tenant_id。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_name IS '【说明】商品名称(前台展示名称)。 【示例】东方树叶(用于商品名称(前台展示名称))。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_name。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_bar_code IS '【说明】商品条码(EAN 等),目前未维护。 【示例】NULL(用于商品条码(EAN 等),目前未维护)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_bar_code。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_category_id IS '【说明】商品一级分类 ID。 【示例】2790683528350539(用于商品一级分类 ID)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_category_id。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_second_category_id IS '【说明】商品二级分类 ID。 【示例】2790683528350540(用于商品二级分类 ID)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_second_category_id。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.categoryName IS '【说明】商品一级分类名称(业务可读)。 【示例】饮料(用于商品一级分类名称(业务可读))。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - categoryName。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.unit IS '【说明】计量单位。 【示例】瓶(用于计量单位)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - unit。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_number IS '【说明】商品内部编码(自定义货号/系统货号)。 【示例】1(用于商品内部编码(自定义货号/系统货号))。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_number。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.out_goods_id IS '【说明】外部系统商品 ID(对接第三方平台使用,如外卖、线上商城等)。 【示例】0(用于外部系统商品 ID(对接第三方平台使用,如外卖、线上商城等))。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - out_goods_id。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_state IS '【说明】商品状态(上架/下架等)。 【示例】1(用于商品状态(上架/下架等))。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_state。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.sale_channel IS '【说明】销售渠道类型,如“门店堂食/线下零售/线上小程序”等的一种编码。 【示例】1(用于销售渠道类型,如“门店堂食/线下零售/线上小程序”等的一种编码)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - sale_channel。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.able_discount IS '【说明】是否允许参与折扣/打折。 【示例】1(用于是否允许参与折扣/打折)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - able_discount。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.able_site_transfer IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。 【示例】2(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - able_site_transfer。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.is_delete IS '【说明】逻辑删除标志。 【示例】0(用于逻辑删除标志)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - is_delete。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.is_warehousing IS '【说明】是否启用库存管理。 【示例】1(用于是否启用库存管理)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - is_warehousing。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.isInSite IS '【说明】是否在当前门店启用/上架。 【示例】false(用于是否在当前门店启用/上架)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - isInSite。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.cost_price IS '【说明】成本价格。 【示例】0.0(用于成本价格)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - cost_price。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.cost_price_type IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】1(金额字段,用于计费/结算/分摊等金额计算。)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - cost_price_type。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.market_price IS '【说明】商品标价 / 售价(标准销售单价)。 【示例】8.0(用于商品标价 / 售价(标准销售单价))。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - market_price。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.min_discount_price IS '【说明】该商品允许售卖的最低价格(底价)。 【示例】0.0(用于该商品允许售卖的最低价格(底价))。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - min_discount_price。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.common_sale_royalty IS '【说明】普通销售提成比例或提成金额的配置字段。 【示例】0(用于普通销售提成比例或提成金额的配置字段)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - common_sale_royalty。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.point_sale_royalty IS '【说明】积分销售提成/积分赠送规则相关配置。 【示例】0(用于积分销售提成/积分赠送规则相关配置)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - point_sale_royalty。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.pinyin_initial IS '【说明】拼音首字母/助记码。 【示例】DFSY,DFSX(用于拼音首字母/助记码)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - pinyin_initial。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.commodityCode IS '【说明】与 commodity_code 是同一信息的数组形式(冗余存储),便于支持一个商品对应多个编码的场景。 【示例】["10000028"](用于与 commodity_code 是同一信息的数组形式(冗余存储),便于支持一个商品对应多个编码的场景)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - commodityCode。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.commodity_code IS '【说明】商品编码(通常为对外商品编码或条码)。 【示例】10000028(用于商品编码(通常为对外商品编码或条码))。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - commodity_code。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_cover IS '【说明】商品封面图片 URL 地址。 【示例】https://oss.ficoo.vip/admin/ZwS8fj_1753175129443.jpg(用于商品封面图片 URL 地址)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_cover。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.supplier_id IS '【说明】供应商 ID,用于关联到供应商档案。 【示例】0(供应商 ID,用于关联到供应商档案)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - supplier_id。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.remark_name IS '【说明】商品备注名/别名,通常用来配置简写或特殊显示名称。 【示例】NULL(用于商品备注名/别名,通常用来配置简写或特殊显示名称)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - remark_name。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.create_time IS '【说明】商品档案创建时间。 【示例】2025-07-15 17:13:15(用于商品档案创建时间)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - create_time。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.update_time IS '【说明】商品档案最近一次修改时间。 【示例】2025-10-29 23:51:38(用于商品档案最近一次修改时间)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - update_time。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - $。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】tenant_goods_master.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】tenant_goods_master.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/tenant_goods_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】tenant_goods_master.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】tenant_goods_master.json - ETL元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS billiards_ods.group_buy_packages (
+ id BIGINT PRIMARY KEY,
+ package_id BIGINT,
+ package_name TEXT,
+ selling_price NUMERIC(18,2),
+ coupon_money NUMERIC(18,2),
+ date_type INT,
+ date_info TEXT,
+ start_time TIMESTAMP,
+ end_time TIMESTAMP,
+ start_clock TEXT,
+ end_clock TEXT,
+ add_start_clock TEXT,
+ add_end_clock TEXT,
+ duration INT,
+ usable_count INT,
+ usable_range INT,
+ table_area_id BIGINT,
+ table_area_name TEXT,
+ table_area_id_list JSONB,
+ tenant_table_area_id BIGINT,
+ tenant_table_area_id_list JSONB,
+ site_id BIGINT,
+ site_name TEXT,
+ tenant_id BIGINT,
+ card_type_ids JSONB,
+ group_type INT,
+ system_group_type INT,
+ type INT,
+ effective_status INT,
+ is_enabled INT,
+ is_delete INT,
+ max_selectable_categories INT,
+ area_tag_type INT,
+ creator_name TEXT,
+ create_time TIMESTAMP,
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now(),
+ payload JSONB NOT NULL
+);
+
+COMMENT ON TABLE billiards_ods.group_buy_packages IS 'ODS 原始明细表:团购套餐主数据。来源:export/test-json-doc/group_buy_packages.json;分析:group_buy_packages-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.id IS '【说明】门店侧套餐 ID,本文件内部的主键。 【示例】2939215004469573(用于门店侧套餐 ID,本文件内部的主键)。 【JSON字段】group_buy_packages.json - data.packageCouponList - id。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.package_id IS '【说明】“上层套餐 ID” 或“总部/系统级套餐 ID”。 【示例】1814707240811572(用于“上层套餐 ID” 或“总部/系统级套餐 ID”)。 【JSON字段】group_buy_packages.json - data.packageCouponList - package_id。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.package_name IS '【说明】团购套餐名称,用于前台展示和核销界面。 【示例】早场特惠一小时(团购套餐名称,用于前台展示和核销界面)。 【JSON字段】group_buy_packages.json - data.packageCouponList - package_name。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.selling_price IS '【说明】语义上应该是“团购售卖价”(顾客在平台购买券时的成交价格)。 【示例】0.0(用于语义上应该是“团购售卖价”(顾客在平台购买券时的成交价格))。 【JSON字段】group_buy_packages.json - data.packageCouponList - selling_price。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.coupon_money IS '【说明】券面值或内部结算面值,表示该套餐在门店侧对应的金额额度。 【示例】0.0(用于券面值或内部结算面值,表示该套餐在门店侧对应的金额额度)。 【JSON字段】group_buy_packages.json - data.packageCouponList - coupon_money。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.date_type IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】group_buy_packages.json - data.packageCouponList - date_type。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.date_info IS '【说明】预留字段,通常用来存储更细粒度的日期信息,如具体日期列表、节假日特殊规则(可能是 JSON 字符串或编码)。 【示例】0(用于预留字段,通常用来存储更细粒度的日期信息,如具体日期列表、节假日特殊规则(可能是 JSON 字符串或编码))。 【JSON字段】group_buy_packages.json - data.packageCouponList - date_info。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.start_time IS '【说明】套餐开始生效的日期时间。 【示例】2025-10-27 00:00:00(用于套餐开始生效的日期时间)。 【JSON字段】group_buy_packages.json - data.packageCouponList - start_time。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.end_time IS '【说明】套餐失效的日期时间(到这个时间点后不可使用)。 【示例】2026-10-28 00:00:00(用于套餐失效的日期时间(到这个时间点后不可使用))。 【JSON字段】group_buy_packages.json - data.packageCouponList - end_time。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.start_clock IS '【说明】每日可用起始时间点(第一段)。 【示例】00:00:00(用于每日可用起始时间点(第一段))。 【JSON字段】group_buy_packages.json - data.packageCouponList - start_clock。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.end_clock IS '【说明】每日可用的结束时间点(第一段)。 【示例】1.00:00:00(用于每日可用的结束时间点(第一段))。 【JSON字段】group_buy_packages.json - data.packageCouponList - end_clock。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.add_start_clock IS '【说明】附加可用时间段的起始时间(第二段)。 【示例】00:00:00(用于附加可用时间段的起始时间(第二段))。 【JSON字段】group_buy_packages.json - data.packageCouponList - add_start_clock。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.add_end_clock IS '【说明】附加时段结束时间,多数情况配合 "00:00:00" 或 "10:00:00" 使用。 【示例】1.00:00:00(用于附加时段结束时间,多数情况配合 "00:00:00" 或 "10:00:00" 使用)。 【JSON字段】group_buy_packages.json - data.packageCouponList - add_end_clock。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.duration IS '【说明】套餐内包含的时长(秒)。 【示例】3600(用于套餐内包含的时长(秒))。 【JSON字段】group_buy_packages.json - data.packageCouponList - duration。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.usable_count IS '【说明】可使用次数上限。 【示例】9999999(用于可使用次数上限)。 【JSON字段】group_buy_packages.json - data.packageCouponList - usable_count。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.usable_range IS '【说明】一般用于文字描述可用日期范围(例如“周一至周五”)。 【示例】NULL(一般用于文字描述可用日期范围(例如“周一至周五”))。 【JSON字段】group_buy_packages.json - data.packageCouponList - usable_range。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.table_area_id IS '【说明】原始设计应为“单一台区 ID”,当套餐只限一个区域可以用这个字段存储。 【示例】0(用于原始设计应为“单一台区 ID”,当套餐只限一个区域可以用这个字段存储)。 【JSON字段】group_buy_packages.json - data.packageCouponList - table_area_id。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.table_area_name IS '【说明】套餐适用的“门店台区名称”,用于显示和筛选。 【示例】A区(套餐适用的“门店台区名称”,用于显示和筛选)。 【JSON字段】group_buy_packages.json - data.packageCouponList - table_area_name。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.table_area_id_list IS '【说明】用来存放具体台区 ID 列表(例如 "1,2,3"),实现更细粒度的台桌限制。 【示例】NULL(用于用来存放具体台区 ID 列表(例如 "1,2,3"),实现更细粒度的台桌限制)。 【JSON字段】group_buy_packages.json - data.packageCouponList - table_area_id_list。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.tenant_table_area_id IS '【说明】与 table_area_id 类似,是租户层级的台区 ID,原本用于单区选择。 【示例】0(与 table_area_id 类似,是租户层级的台区 ID,原本用于单区选择)。 【JSON字段】group_buy_packages.json - data.packageCouponList - tenant_table_area_id。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.tenant_table_area_id_list IS '【说明】实际代表“台区集合 ID”或“租户台区配置 ID”,用来限制套餐可用的台区范围。 【示例】2791960001957765(用于实际代表“台区集合 ID”或“租户台区配置 ID”,用来限制套餐可用的台区范围)。 【JSON字段】group_buy_packages.json - data.packageCouponList - tenant_table_area_id_list。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.site_id IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【JSON字段】group_buy_packages.json - data.packageCouponList - site_id。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.site_name IS '【说明】门店名称。 【示例】朗朗桌球(用于门店名称)。 【JSON字段】group_buy_packages.json - data.packageCouponList - site_name。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.tenant_id IS '【说明】租户 ID(品牌/商户 ID)。 【示例】2790683160709957(用于租户 ID(品牌/商户 ID))。 【JSON字段】group_buy_packages.json - data.packageCouponList - tenant_id。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.card_type_ids IS '【说明】原意是“适用会员卡类型 ID 列表”,例如某套餐只允许某几种会员卡使用,可以在此配置。 【示例】0(用于原意是“适用会员卡类型 ID 列表”,例如某套餐只允许某几种会员卡使用,可以在此配置)。 【JSON字段】group_buy_packages.json - data.packageCouponList - card_type_ids。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.group_type IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】group_buy_packages.json - data.packageCouponList - group_type。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.system_group_type IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】group_buy_packages.json - data.packageCouponList - system_group_type。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.type IS '【说明】内部业务子类型,具体含义需要结合系统文档。 【示例】2(用于内部业务子类型,具体含义需要结合系统文档)。 【JSON字段】group_buy_packages.json - data.packageCouponList - type。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.effective_status IS '【说明】1:13 条。 【示例】1(用于1:13 条)。 【JSON字段】group_buy_packages.json - data.packageCouponList - effective_status。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.is_enabled IS '【说明】启用状态。 【示例】1(用于启用状态)。 【JSON字段】group_buy_packages.json - data.packageCouponList - is_enabled。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.is_delete IS '【说明】逻辑删除标志。 【示例】0(用于逻辑删除标志)。 【JSON字段】group_buy_packages.json - data.packageCouponList - is_delete。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.max_selectable_categories IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】0(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】group_buy_packages.json - data.packageCouponList - max_selectable_categories。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.area_tag_type IS '【说明】1 很可能代表“按台区标签限制”,例如 A区、中八区、包厢、KTV 等。 【示例】1(用于1 很可能代表“按台区标签限制”,例如 A区、中八区、包厢、KTV 等)。 【JSON字段】group_buy_packages.json - data.packageCouponList - area_tag_type。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.creator_name IS '【说明】创建人信息,一般包含“角色:姓名”。 【示例】店长:郑丽珊(用于创建人信息,一般包含“角色:姓名”)。 【JSON字段】group_buy_packages.json - data.packageCouponList - creator_name。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.create_time IS '【说明】该套餐在系统中创建的时间。 【示例】2025-10-27 18:24:09(用于该套餐在系统中创建的时间)。 【JSON字段】group_buy_packages.json - data.packageCouponList - create_time。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】group_buy_packages.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】group_buy_packages.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/group_buy_packages.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】group_buy_packages.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】group_buy_packages.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】group_buy_packages.json - data.packageCouponList - $。';
+
+
+CREATE TABLE IF NOT EXISTS billiards_ods.group_buy_redemption_records (
+ id BIGINT PRIMARY KEY,
+ tenant_id BIGINT,
+ site_id BIGINT,
+ siteName TEXT,
+ table_id BIGINT,
+ tableName TEXT,
+ tableAreaName TEXT,
+ tenant_table_area_id BIGINT,
+ order_trade_no TEXT,
+ order_settle_id BIGINT,
+ order_pay_id BIGINT,
+ order_coupon_id BIGINT,
+ order_coupon_channel INT,
+ coupon_code TEXT,
+ coupon_money NUMERIC(18,2),
+ coupon_origin_id BIGINT,
+ ledger_name TEXT,
+ ledger_group_name TEXT,
+ ledger_amount NUMERIC(18,2),
+ ledger_count NUMERIC(18,4),
+ ledger_unit_price NUMERIC(18,4),
+ ledger_status INT,
+ table_charge_seconds INT,
+ promotion_activity_id BIGINT,
+ promotion_coupon_id BIGINT,
+ promotion_seconds INT,
+ offer_type INT,
+ assistant_promotion_money NUMERIC(18,2),
+ assistant_service_promotion_money NUMERIC(18,2),
+ table_service_promotion_money NUMERIC(18,2),
+ goods_promotion_money NUMERIC(18,2),
+ recharge_promotion_money NUMERIC(18,2),
+ reward_promotion_money NUMERIC(18,2),
+ goodsOptionPrice NUMERIC(18,2),
+ salesman_name TEXT,
+ sales_man_org_id BIGINT,
+ salesman_role_id BIGINT,
+ salesman_user_id BIGINT,
+ operator_id BIGINT,
+ operator_name TEXT,
+ is_single_order INT,
+ is_delete INT,
+ create_time TIMESTAMP,
+ payload JSONB NOT NULL,
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now()
+);
+
+COMMENT ON TABLE billiards_ods.group_buy_redemption_records IS 'ODS 原始明细表:团购核销记录。来源:export/test-json-doc/group_buy_redemption_records.json;分析:group_buy_redemption_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.id IS '【说明】本条“团购套餐流水”记录的 主键 ID。 【示例】2957924029615941(用于本条“团购套餐流水”记录的 主键 ID)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - id。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - tenant_id。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.site_id IS '【说明】门店 ID,与其它 JSON 中一致。 【示例】2790685415443269(用于门店 ID,与其它 JSON 中一致)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - site_id。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.siteName IS '【说明】门店名称,冗余展示用。 【示例】朗朗桌球(用于门店名称,冗余展示用)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - siteName。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.table_id IS '【说明】球台 ID。 【示例】2793003705192517(用于球台 ID)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - table_id。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tableName IS '【说明】本次使用券所关联的 球台名称/台号。 【示例】A17(用于本次使用券所关联的 球台名称/台号)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - tableName。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tableAreaName IS '【说明】该球台所属的 台区名称。 【示例】A区(用于该球台所属的 台区名称)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - tableAreaName。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tenant_table_area_id IS '【说明】租户级台区分组 ID,表示当前使用券的台桌所属的区域组合。 【示例】2791960001957765(用于租户级台区分组 ID,表示当前使用券的台桌所属的区域组合)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - tenant_table_area_id。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_trade_no IS '【说明】订单交易号,和其它消费明细(台费、商品、助教、团购)共用的订单主键。 【示例】2957858167230149(用于订单交易号,和其它消费明细(台费、商品、助教、团购)共用的订单主键)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_trade_no。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_settle_id IS '【说明】结算单 ID(小票结账主键)。 【示例】2957922914357125(用于结算单 ID(小票结账主键))。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_settle_id。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_pay_id IS '【说明】指向支付记录表中的支付流水 ID。 【示例】0(用于指向支付记录表中的支付流水 ID)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_pay_id。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_coupon_id IS '【说明】订单中“券使用记录”的 ID。 【示例】2957858168229573(用于订单中“券使用记录”的 ID)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_coupon_id。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_coupon_channel IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_coupon_channel。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.coupon_code IS '【说明】团购券券码,核销时扫描/录入的字符串。 【示例】0107892475999(用于团购券券码,核销时扫描/录入的字符串)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - coupon_code。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.coupon_money IS '【说明】本次核销时,这张券在门店侧对应的金额额度(“可抵扣金额”)。 【示例】48.0(用于本次核销时,这张券在门店侧对应的金额额度(“可抵扣金额”))。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - coupon_money。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.coupon_origin_id IS '【说明】平台/上游系统中的券记录主键 ID,“券来源 ID”。 【示例】2957858168229573(用于平台/上游系统中的券记录主键 ID,“券来源 ID”)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - coupon_origin_id。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_name IS '【说明】台费侧关联的“团购项目名称”(记账名)。 【示例】全天A区中八一小时(用于台费侧关联的“团购项目名称”(记账名))。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_name。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_group_name IS '【说明】团购项目所属的“记账分组名称”(例如“团购台费”“团购包厢”等)。 【示例】NULL(用于团购项目所属的“记账分组名称”(例如“团购台费”“团购包厢”等))。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_group_name。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_amount IS '【说明】本次券实际冲抵台费的金额。 【示例】48.0(用于本次券实际冲抵台费的金额)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_amount。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_count IS '【说明】按此次优惠实际计算的“核销秒数”。 【示例】3600(用于按此次优惠实际计算的“核销秒数”)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_count。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_unit_price IS '【说明】对应台费的标准单价,单位元/小时(从数值来看是类似29.9/小时这种定价)。 【示例】29.9(用于对应台费的标准单价,单位元/小时(从数值来看是类似29.9/小时这种定价))。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_unit_price。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_status IS '【说明】流水状态。 【示例】1(用于流水状态)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_status。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.table_charge_seconds IS '【说明】本次结算中该球台总计计费的秒数(整台的台费计费时间)。 【示例】3600(用于本次结算中该球台总计计费的秒数(整台的台费计费时间))。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - table_charge_seconds。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.promotion_activity_id IS '【说明】团购/促销活动 ID。 【示例】2957858166460101(用于团购/促销活动 ID)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - promotion_activity_id。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.promotion_coupon_id IS '【说明】团购套餐定义 ID。 【示例】2798727423528005(用于团购套餐定义 ID)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - promotion_coupon_id。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.promotion_seconds IS '【说明】团购套餐定义的“标准时长”(券本身标称的可用时长)。 【示例】3600(用于团购套餐定义的“标准时长”(券本身标称的可用时长))。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - promotion_seconds。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.offer_type IS '【说明】优惠类型。 【示例】1(用于优惠类型)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - offer_type。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.assistant_promotion_money IS '【说明】分摊到“助教服务”的促销金额。 【示例】0.0(用于分摊到“助教服务”的促销金额)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - assistant_promotion_money。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.assistant_service_promotion_money IS '【说明】进一步细分助教服务的促销金额。 【示例】0.0(用于进一步细分助教服务的促销金额)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - assistant_service_promotion_money。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.table_service_promotion_money IS '【说明】本次券使用中,分摊到“台费服务费”部分的促销金额。 【示例】0.0(用于本次券使用中,分摊到“台费服务费”部分的促销金额)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - table_service_promotion_money。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.goods_promotion_money IS '【说明】本次券使用中,分摊到“商品”部分的促销金额。 【示例】0.0(用于本次券使用中,分摊到“商品”部分的促销金额)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - goods_promotion_money。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.recharge_promotion_money IS '【说明】来自“充值类优惠”的分摊金额(例如储值赠送部分)。 【示例】0.0(用于来自“充值类优惠”的分摊金额(例如储值赠送部分))。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - recharge_promotion_money。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.reward_promotion_money IS '【说明】本次促销中,属于“奖励金/积分抵扣”的金额。 【示例】0.0(用于本次促销中,属于“奖励金/积分抵扣”的金额)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - reward_promotion_money。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.goodsOptionPrice IS '【说明】商品规格价格,用于商品类促销分摊时使用。 【示例】0.0(商品规格价格,用于商品类促销分摊时使用)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - goodsOptionPrice。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.salesman_name IS '【说明】营业员姓名。 【示例】NULL(用于营业员姓名)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - salesman_name。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.sales_man_org_id IS '【说明】营业员所属组织 ID。 【示例】0(用于营业员所属组织 ID)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - sales_man_org_id。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.salesman_role_id IS '【说明】营业员角色 ID。 【示例】0(用于营业员角色 ID)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - salesman_role_id。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.salesman_user_id IS '【说明】营业员/业务员用户 ID。 【示例】0(用于营业员/业务员用户 ID)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - salesman_user_id。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.operator_id IS '【说明】执行本次核销/结算操作的 操作员 ID。 【示例】2790687322443013(用于执行本次核销/结算操作的 操作员 ID)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - operator_id。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.operator_name IS '【说明】操作员名称(包含角色说明),与 operator_id 对应的冗余展示字段。 【示例】收银员:郑丽珊(用于操作员名称(包含角色说明),与 operator_id 对应的冗余展示字段)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - operator_name。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.is_single_order IS '【说明】是否单独作为一条订单行。 【示例】1(用于是否单独作为一条订单行)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - is_single_order。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.is_delete IS '【说明】逻辑删除标记(0=否,1=是)。 【示例】0(用于逻辑删除标记(0=否,1=是))。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - is_delete。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.create_time IS '【说明】本条团购套餐使用流水创建时间(即券核销时间,或与结账时间接近)。 【示例】2025-11-09 23:35:57(用于本条团购套餐使用流水创建时间(即券核销时间,或与结账时间接近))。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - create_time。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - $。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】group_buy_redemption_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】group_buy_redemption_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/group_buy_redemption_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】group_buy_redemption_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】group_buy_redemption_records.json - ETL元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS billiards_ods.settlement_ticket_details (
+ orderSettleId BIGINT PRIMARY KEY,
+ actualPayment NUMERIC(18,2),
+ adjustAmount NUMERIC(18,2),
+ assistantManualDiscount NUMERIC(18,2),
+ balanceAmount NUMERIC(18,2),
+ cashierName TEXT,
+ consumeMoney NUMERIC(18,2),
+ couponAmount NUMERIC(18,2),
+ deliveryAddress TEXT,
+ deliveryFee NUMERIC(18,2),
+ ledgerAmount NUMERIC(18,2),
+ memberDeductAmount NUMERIC(18,2),
+ memberOfferAmount NUMERIC(18,2),
+ onlineReturnAmount NUMERIC(18,2),
+ orderRemark TEXT,
+ orderSettleNumber BIGINT,
+ payMemberBalance NUMERIC(18,2),
+ payTime TIMESTAMP,
+ paymentMethod INT,
+ pointDiscountCost NUMERIC(18,2),
+ pointDiscountPrice NUMERIC(18,2),
+ prepayMoney NUMERIC(18,2),
+ refundAmount NUMERIC(18,2),
+ returnGoodsAmount NUMERIC(18,2),
+ rewardName TEXT,
+ settleType TEXT,
+ siteAddress TEXT,
+ siteBusinessTel TEXT,
+ siteId BIGINT,
+ siteName TEXT,
+ tenantId BIGINT,
+ tenantName TEXT,
+ ticketCustomContent TEXT,
+ ticketRemark TEXT,
+ voucherMoney NUMERIC(18,2),
+ memberProfile JSONB,
+ orderItem JSONB,
+ tenantMemberCardLogs JSONB,
+ payload JSONB NOT NULL,
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now()
+);
+
+COMMENT ON TABLE billiards_ods.settlement_ticket_details IS 'ODS 原始明细表:结算小票明细。来源:export/test-json-doc/settlement_ticket_details.json;分析:settlement_ticket_details-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderSettleId IS '【说明】结算单 ID(和顶层字段相同,再次冗余)。 【示例】2957922914357125(用于结算单 ID(和顶层字段相同,再次冗余))。 【JSON字段】settlement_ticket_details.json - $ - orderSettleId。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.actualPayment IS '【说明】本单实际支付金额总和(顾客本次实际付出:现金 + 线上 + 会员余额等)。 【示例】NULL(用于本单实际支付金额总和(顾客本次实际付出:现金 + 线上 + 会员余额等))。 【JSON字段】settlement_ticket_details.json - $ - actualPayment。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.adjustAmount IS '【说明】人工调价/整单调整金额(例如手工改价、折扣调整),是所有类型的手工调整合计。 【示例】NULL(用于人工调价/整单调整金额(例如手工改价、折扣调整),是所有类型的手工调整合计)。 【JSON字段】settlement_ticket_details.json - $ - adjustAmount。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.assistantManualDiscount IS '【说明】针对“助教项目”的人工减免金额汇总(整单维度)。 【示例】NULL(用于针对“助教项目”的人工减免金额汇总(整单维度))。 【JSON字段】settlement_ticket_details.json - $ - assistantManualDiscount。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.balanceAmount IS '【说明】本单通过“会员余额/储值卡”支付的金额(从余额中扣除的总额)。 【示例】NULL(用于本单通过“会员余额/储值卡”支付的金额(从余额中扣除的总额))。 【JSON字段】settlement_ticket_details.json - $ - balanceAmount。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.cashierName IS '【说明】本单结算操作员名称(带角色前缀文字)。 【示例】NULL(用于本单结算操作员名称(带角色前缀文字))。 【JSON字段】settlement_ticket_details.json - $ - cashierName。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.consumeMoney IS '【说明】本单“消费金额总计”(原价层面),即台费 + 商品 + 助教 + 服务等消费项目的金额总和(未扣除各类优惠)。 【示例】NULL(用于本单“消费金额总计”(原价层面),即台费 + 商品 + 助教 + 服务等消费项目的金额总和(未扣除各类优惠))。 【JSON字段】settlement_ticket_details.json - $ - consumeMoney。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.couponAmount IS '【说明】本单由优惠券抵扣的金额汇总。 【示例】NULL(用于本单由优惠券抵扣的金额汇总)。 【JSON字段】settlement_ticket_details.json - $ - couponAmount。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.deliveryAddress IS '【说明】配送地址(若存在外送业务时使用)。 【示例】NULL(用于配送地址(若存在外送业务时使用))。 【JSON字段】settlement_ticket_details.json - $ - deliveryAddress。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.deliveryFee IS '【说明】配送费金额(如果支持外送业务)。 【示例】NULL(用于配送费金额(如果支持外送业务))。 【JSON字段】settlement_ticket_details.json - $ - deliveryFee。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.ledgerAmount IS '【说明】商品小计金额(通常 = 单价 × 数量,未考虑其他折扣)。 【示例】NULL(用于商品小计金额(通常 = 单价 × 数量,未考虑其他折扣))。 【JSON字段】settlement_ticket_details.json - $ - ledgerAmount。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.memberDeductAmount IS '【说明】会员抵扣的某种数量或金额(例如积分抵现金额、次卡次数抵扣等),当前数据未启用。 【示例】NULL(用于会员抵扣的某种数量或金额(例如积分抵现金额、次卡次数抵扣等),当前数据未启用)。 【JSON字段】settlement_ticket_details.json - $ - memberDeductAmount。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.memberOfferAmount IS '【说明】由“会员权益/折扣”产生的优惠金额总计(整单维度)。 【示例】NULL(用于由“会员权益/折扣”产生的优惠金额总计(整单维度))。 【JSON字段】settlement_ticket_details.json - $ - memberOfferAmount。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.onlineReturnAmount IS '【说明】本单通过线上支付渠道退回的金额(如微信/支付宝退款)。 【示例】NULL(用于本单通过线上支付渠道退回的金额(如微信/支付宝退款))。 【JSON字段】settlement_ticket_details.json - $ - onlineReturnAmount。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderRemark IS '【说明】订单备注,由收银员录入,用于记录与本单相关的特殊说明。 【示例】NULL(订单备注,由收银员录入,用于记录与本单相关的特殊说明)。 【JSON字段】settlement_ticket_details.json - $ - orderRemark。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderSettleNumber IS '【说明】结算单编号(与 ID 独立的一套编号体系,如流水号)。 【示例】NULL(用于结算单编号(与 ID 独立的一套编号体系,如流水号))。 【JSON字段】settlement_ticket_details.json - $ - orderSettleNumber。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.payMemberBalance IS '【说明】使用会员余额支付的金额,用于区分与 balanceAmount 的不同维度(如“本次支付使用余额部分”与“余额本身变化”等),当前未实际使用。 【示例】NULL(使用会员余额支付的金额,用于区分与 balanceAmount 的不同维度(如“本次支付使用余额部分”与“余额本身变化”等),当前未实际使用)。 【JSON字段】settlement_ticket_details.json - $ - payMemberBalance。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.payTime IS '【说明】本单最终支付成功时间。 【示例】NULL(用于本单最终支付成功时间)。 【JSON字段】settlement_ticket_details.json - $ - payTime。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.paymentMethod IS '【说明】结算主支付方式编码(汇总视角)。 【示例】NULL(用于结算主支付方式编码(汇总视角))。 【JSON字段】settlement_ticket_details.json - $ - paymentMethod。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.pointDiscountCost IS '【说明】积分抵扣对应的成本金额(成本侧)。 【示例】NULL(用于积分抵扣对应的成本金额(成本侧))。 【JSON字段】settlement_ticket_details.json - $ - pointDiscountCost。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.pointDiscountPrice IS '【说明】积分抵扣对应的金额(售价侧)。 【示例】NULL(用于积分抵扣对应的金额(售价侧))。 【JSON字段】settlement_ticket_details.json - $ - pointDiscountPrice。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.prepayMoney IS '【说明】预付金/定金在本单中使用的金额。 【示例】NULL(用于预付金/定金在本单中使用的金额)。 【JSON字段】settlement_ticket_details.json - $ - prepayMoney。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.refundAmount IS '【说明】本单涉及的退款金额(汇总)。 【示例】NULL(用于本单涉及的退款金额(汇总))。 【JSON字段】settlement_ticket_details.json - $ - refundAmount。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.returnGoodsAmount IS '【说明】本单涉及的退货金额汇总。 【示例】NULL(用于本单涉及的退货金额汇总)。 【JSON字段】settlement_ticket_details.json - $ - returnGoodsAmount。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.rewardName IS '【说明】用于标识本单适用的激励方案名称,可能用于内部绩效或活动名称展示。 【示例】NULL(用于标识本单适用的激励方案名称,可能用于内部绩效或活动名称展示)。 【JSON字段】settlement_ticket_details.json - $ - rewardName。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.settleType IS '【说明】结算类型字符串标识。 【示例】NULL(用于结算类型字符串标识)。 【JSON字段】settlement_ticket_details.json - $ - settleType。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteAddress IS '【说明】门店地址(详细地址)。 【示例】NULL(用于门店地址(详细地址))。 【JSON字段】settlement_ticket_details.json - $ - siteAddress。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteBusinessTel IS '【说明】门店电话。 【示例】NULL(用于门店电话)。 【JSON字段】settlement_ticket_details.json - $ - siteBusinessTel。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteId IS '【说明】门店 ID。 【示例】NULL(用于门店 ID)。 【JSON字段】settlement_ticket_details.json - $ - siteId。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteName IS '【说明】门店名称,如“朗朗桌球”。 【示例】NULL(用于门店名称,如“朗朗桌球”)。 【JSON字段】settlement_ticket_details.json - $ - siteName。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.tenantId IS '【说明】租户 / 商户 ID(品牌维度)。 【示例】NULL(用于租户 / 商户 ID(品牌维度))。 【JSON字段】settlement_ticket_details.json - $ - tenantId。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.tenantName IS '【说明】租户名称,如“朗朗桌球”。 【示例】NULL(用于租户名称,如“朗朗桌球”)。 【JSON字段】settlement_ticket_details.json - $ - tenantName。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.ticketCustomContent IS '【说明】自定义小票内容,如商家自定义宣传语、条款等。 【示例】NULL(用于自定义小票内容,如商家自定义宣传语、条款等)。 【JSON字段】settlement_ticket_details.json - $ - ticketCustomContent。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.ticketRemark IS '【说明】小票备注内容,可用于打印在小票底部或顶部(例如活动说明、特别提示)。 【示例】NULL(小票备注内容,可用于打印在小票底部或顶部(例如活动说明、特别提示))。 【JSON字段】settlement_ticket_details.json - $ - ticketRemark。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.voucherMoney IS '【说明】代金券类金额字段(可能用于某类“代金券余额”或“券面值”记录)。 【示例】NULL(代金券类金额字段(可能用于某类“代金券余额”或“券面值”记录))。 【JSON字段】settlement_ticket_details.json - $ - voucherMoney。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.memberProfile IS '【说明】不是会员卡主键,而是本次结账时的会员信息快照。 【示例】NULL(用于不是会员卡主键,而是本次结账时的会员信息快照)。 【JSON字段】settlement_ticket_details.json - $ - memberProfile。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderItem IS '【说明】本次结算对应的“订单明细列表”,这部分是连接“台费流水 / 商品出库 / 券使用”等多个子领域的关键结构。 【示例】NULL(用于本次结算对应的“订单明细列表”,这部分是连接“台费流水 / 商品出库 / 券使用”等多个子领域的关键结构)。 【JSON字段】settlement_ticket_details.json - $ - orderItem。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.tenantMemberCardLogs IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlement_ticket_details.json - $ - tenantMemberCardLogs。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】settlement_ticket_details.json - $ - $。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】settlement_ticket_details.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】settlement_ticket_details.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/settlement_ticket_details.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】settlement_ticket_details.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】settlement_ticket_details.json - ETL元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS billiards_ods.store_goods_master (
+ id BIGINT PRIMARY KEY,
+ tenant_id BIGINT,
+ site_id BIGINT,
+ siteName TEXT,
+ tenant_goods_id BIGINT,
+ goods_name TEXT,
+ goods_bar_code TEXT,
+ goods_category_id BIGINT,
+ goods_second_category_id BIGINT,
+ oneCategoryName TEXT,
+ twoCategoryName TEXT,
+ unit TEXT,
+ sale_price NUMERIC(18,4),
+ cost_price NUMERIC(18,4),
+ cost_price_type INT,
+ min_discount_price NUMERIC(18,4),
+ safe_stock NUMERIC(18,4),
+ stock NUMERIC(18,4),
+ stock_A NUMERIC(18,4),
+ sale_num NUMERIC(18,4),
+ total_purchase_cost NUMERIC(18,4),
+ total_sales NUMERIC(18,4),
+ average_monthly_sales NUMERIC(18,4),
+ batch_stock_quantity NUMERIC(18,2),
+ days_available INT,
+ provisional_total_cost NUMERIC(18,2),
+ enable_status INT,
+ audit_status INT,
+ goods_state INT,
+ is_delete INT,
+ is_warehousing INT,
+ able_discount INT,
+ able_site_transfer INT,
+ forbid_sell_status INT,
+ "freeze" INT,
+ send_state INT,
+ custom_label_type INT,
+ option_required INT,
+ sale_channel INT,
+ sort INT,
+ remark TEXT,
+ pinyin_initial TEXT,
+ goods_cover TEXT,
+ create_time TIMESTAMP,
+ update_time TIMESTAMP,
+ payload JSONB NOT NULL,
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now()
+);
+
+COMMENT ON TABLE billiards_ods.store_goods_master IS 'ODS 原始明细表:门店商品主数据。来源:export/test-json-doc/store_goods_master.json;分析:store_goods_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.id IS '【说明】门店商品 ID,门店维度的商品主键。 【示例】2793025851560005(用于门店商品 ID,门店维度的商品主键)。 【JSON字段】store_goods_master.json - data.orderGoodsList - id。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】store_goods_master.json - data.orderGoodsList - tenant_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.site_id IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【JSON字段】store_goods_master.json - data.orderGoodsList - site_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.siteName IS '【说明】门店名称,是对 site_id 的冗余展示,方便直接阅读,无需再去关联门店档案。 【示例】朗朗桌球(用于门店名称,是对 site_id 的冗余展示,方便直接阅读,无需再去关联门店档案)。 【JSON字段】store_goods_master.json - data.orderGoodsList - siteName。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.tenant_goods_id IS '【说明】租户/品牌维度的商品 ID,相当于“全局商品 ID”。 【示例】2792178593255301(用于租户/品牌维度的商品 ID,相当于“全局商品 ID”)。 【JSON字段】store_goods_master.json - data.orderGoodsList - tenant_goods_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.goods_name IS '【说明】商品名称,例如“合味道泡面”“地道肠”“麻将房茶位费”等。 【示例】合味道泡面(用于商品名称,例如“合味道泡面”“地道肠”“麻将房茶位费”等)。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_name。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.goods_bar_code IS '【说明】商品条形码(如 EAN-13 编码),用于扫码销售。 【示例】NULL(商品条形码(如 EAN-13 编码),用于扫码销售)。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_bar_code。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.goods_category_id IS '【说明】商品一级分类 ID。 【示例】2791941988405125(用于商品一级分类 ID)。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_category_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.goods_second_category_id IS '【说明】商品二级分类 ID。 【示例】2793236829620037(用于商品二级分类 ID)。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_second_category_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.oneCategoryName IS '【说明】一级分类名称,如“零食”“酒水”“服务费”等。 【示例】零食(用于一级分类名称,如“零食”“酒水”“服务费”等)。 【JSON字段】store_goods_master.json - data.orderGoodsList - oneCategoryName。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.twoCategoryName IS '【说明】二级分类名称,如“面”“洋酒”“纸巾”等。 【示例】面(用于二级分类名称,如“面”“洋酒”“纸巾”等)。 【JSON字段】store_goods_master.json - data.orderGoodsList - twoCategoryName。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.unit IS '【说明】商品计量单位(销售单位)。 【示例】桶(用于商品计量单位(销售单位))。 【JSON字段】store_goods_master.json - data.orderGoodsList - unit。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.sale_price IS '【说明】商品标准销售价(挂牌价),单位为元。 【示例】12.0(用于商品标准销售价(挂牌价),单位为元)。 【JSON字段】store_goods_master.json - data.orderGoodsList - sale_price。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.cost_price IS '【说明】商品成本价(单件成本)。 【示例】0.0(用于商品成本价(单件成本))。 【JSON字段】store_goods_master.json - data.orderGoodsList - cost_price。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.cost_price_type IS '【说明】1 代表使用“固定成本价”(手工维护的 cost_price),provisional_total_cost 按“数量 × cost_price”算。 【示例】1(用于1 代表使用“固定成本价”(手工维护的 cost_price),provisional_total_cost 按“数量 × cost_price”算)。 【JSON字段】store_goods_master.json - data.orderGoodsList - cost_price_type。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.min_discount_price IS '【说明】最低允许成交价(限价)。 【示例】7.0(用于最低允许成交价(限价))。 【JSON字段】store_goods_master.json - data.orderGoodsList - min_discount_price。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.safe_stock IS '【说明】安全库存量(阈值),低于该值时系统可以提示补货。 【示例】0(用于安全库存量(阈值),低于该值时系统可以提示补货)。 【JSON字段】store_goods_master.json - data.orderGoodsList - safe_stock。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.stock IS '【说明】当前可用库存数量(以 unit 为单位)。 【示例】18(用于当前可用库存数量(以 unit 为单位))。 【JSON字段】store_goods_master.json - data.orderGoodsList - stock。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.stock_A IS '【说明】副单位库存数量。 【示例】0(用于副单位库存数量)。 【JSON字段】store_goods_master.json - data.orderGoodsList - stock_A。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.sale_num IS '【说明】在当前统计口径下的销售数量(总销量,单位同 unit)。 【示例】104(用于在当前统计口径下的销售数量(总销量,单位同 unit))。 【JSON字段】store_goods_master.json - data.orderGoodsList - sale_num。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.total_purchase_cost IS '【说明】总采购成本,单位为元。 【示例】0.0(用于总采购成本,单位为元)。 【JSON字段】store_goods_master.json - data.orderGoodsList - total_purchase_cost。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.total_sales IS '【说明】累计销售数量。 【示例】104(用于累计销售数量)。 【JSON字段】store_goods_master.json - data.orderGoodsList - total_sales。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.average_monthly_sales IS '【说明】平均月销量(件/月),根据某个统计周期内的销售数据折算而来。 【示例】1.32(用于平均月销量(件/月),根据某个统计周期内的销售数据折算而来)。 【JSON字段】store_goods_master.json - data.orderGoodsList - average_monthly_sales。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.batch_stock_quantity IS '【说明】当前“批次”的库存数量(主单位)。 【示例】43(用于当前“批次”的库存数量(主单位))。 【JSON字段】store_goods_master.json - data.orderGoodsList - batch_stock_quantity。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.days_available IS '【说明】商品“在架天数”或“可售天数”,大致等于当前时间减去首次上架时间。 【示例】13(用于商品“在架天数”或“可售天数”,大致等于当前时间减去首次上架时间)。 【JSON字段】store_goods_master.json - data.orderGoodsList - days_available。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.provisional_total_cost IS '【说明】暂估总成本,单位为元。 【示例】0.0(用于暂估总成本,单位为元)。 【JSON字段】store_goods_master.json - data.orderGoodsList - provisional_total_cost。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.enable_status IS '【说明】控制商品档案是否参与任何业务(库存、销售等)。 【示例】1(用于控制商品档案是否参与任何业务(库存、销售等))。 【JSON字段】store_goods_master.json - data.orderGoodsList - enable_status。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.audit_status IS '【说明】观察值:全部为 2。 【示例】2(用于观察值:全部为 2)。 【JSON字段】store_goods_master.json - data.orderGoodsList - audit_status。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.goods_state IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_state。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.is_delete IS '【说明】逻辑删除标志。 【示例】0(用于逻辑删除标志)。 【JSON字段】store_goods_master.json - data.orderGoodsList - is_delete。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.is_warehousing IS '【说明】是否纳入库存管理。 【示例】1(用于是否纳入库存管理)。 【JSON字段】store_goods_master.json - data.orderGoodsList - is_warehousing。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.able_discount IS '【说明】是否允许参与折扣。 【示例】1(用于是否允许参与折扣)。 【JSON字段】store_goods_master.json - data.orderGoodsList - able_discount。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.able_site_transfer IS '【说明】表示是否允许跨门店调拨或跨站点共享库存。 【示例】2(用于表示是否允许跨门店调拨或跨站点共享库存)。 【JSON字段】store_goods_master.json - data.orderGoodsList - able_site_transfer。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.forbid_sell_status IS '【说明】观察值:全部为 1。 【示例】1(用于观察值:全部为 1)。 【JSON字段】store_goods_master.json - data.orderGoodsList - forbid_sell_status。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.send_state IS '【说明】观察值:全部为 1。 【示例】1(用于观察值:全部为 1)。 【JSON字段】store_goods_master.json - data.orderGoodsList - send_state。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.custom_label_type IS '【说明】自定义标签类型。 【示例】2(用于自定义标签类型)。 【JSON字段】store_goods_master.json - data.orderGoodsList - custom_label_type。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.option_required IS '【说明】是否需要在销售时选择规格/选项。 【示例】1(用于是否需要在销售时选择规格/选项)。 【JSON字段】store_goods_master.json - data.orderGoodsList - option_required。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.sale_channel IS '【说明】销售渠道类型。 【示例】1(用于销售渠道类型)。 【JSON字段】store_goods_master.json - data.orderGoodsList - sale_channel。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.sort IS '【说明】排序权重,用于前端商品列表展示时的排版顺序,数值越小/越大哪个优先,具体规则看系统设定(一般是数值越小排序越靠前)。 【示例】100(排序权重,用于前端商品列表展示时的排版顺序,数值越小/越大哪个优先,具体规则看系统设定(一般是数值越小排序越靠前))。 【JSON字段】store_goods_master.json - data.orderGoodsList - sort。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.remark IS '【说明】商品备注(可以写口味说明、供应商、注意事项等)。 【示例】NULL(用于商品备注(可以写口味说明、供应商、注意事项等))。 【JSON字段】store_goods_master.json - data.orderGoodsList - remark。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.pinyin_initial IS '【说明】商品名称的拼音首字母缩写,有时多个别名用逗号分隔。 【示例】HWDPM,GWDPM(用于商品名称的拼音首字母缩写,有时多个别名用逗号分隔)。 【JSON字段】store_goods_master.json - data.orderGoodsList - pinyin_initial。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.goods_cover IS '【说明】商品图片 URL(如 OSS 对象存储地址),用于前端展示商品图片。 【示例】https://oss.ficoo.vip/admin/8M1WM7_1753204221337.jpg(商品图片 URL(如 OSS 对象存储地址),用于前端展示商品图片)。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_cover。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.create_time IS '【说明】门店商品档案创建时间(商品在门店建立档案的时间点)。 【示例】2025-07-16 11:52:51(用于门店商品档案创建时间(商品在门店建立档案的时间点))。 【JSON字段】store_goods_master.json - data.orderGoodsList - create_time。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.update_time IS '【说明】最后一次修改该商品档案的时间(包括价格调整、状态变更等)。 【示例】2025-11-09 07:23:47(用于最后一次修改该商品档案的时间(包括价格调整、状态变更等))。 【JSON字段】store_goods_master.json - data.orderGoodsList - update_time。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】store_goods_master.json - data.orderGoodsList - $。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】store_goods_master.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】store_goods_master.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/store_goods_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】store_goods_master.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】store_goods_master.json - ETL元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS billiards_ods.store_goods_sales_records (
+ id BIGINT PRIMARY KEY,
+ tenant_id BIGINT,
+ site_id BIGINT,
+ siteid BIGINT,
+ sitename TEXT,
+ site_goods_id BIGINT,
+ tenant_goods_id BIGINT,
+ order_settle_id BIGINT,
+ order_trade_no TEXT,
+ order_goods_id BIGINT,
+ ordergoodsid BIGINT,
+ order_pay_id BIGINT,
+ order_coupon_id BIGINT,
+ ledger_name TEXT,
+ ledger_group_name TEXT,
+ ledger_amount NUMERIC(18,2),
+ ledger_count NUMERIC(18,4),
+ ledger_unit_price NUMERIC(18,4),
+ ledger_status INT,
+ discount_money NUMERIC(18,2),
+ discount_price NUMERIC(18,2),
+ coupon_deduct_money NUMERIC(18,2),
+ member_discount_amount NUMERIC(18,2),
+ option_coupon_deduct_money NUMERIC(18,2),
+ option_member_discount_money NUMERIC(18,2),
+ point_discount_money NUMERIC(18,2),
+ point_discount_money_cost NUMERIC(18,2),
+ real_goods_money NUMERIC(18,2),
+ cost_money NUMERIC(18,2),
+ push_money NUMERIC(18,2),
+ sales_type INT,
+ is_single_order INT,
+ is_delete INT,
+ goods_remark TEXT,
+ option_price NUMERIC(18,2),
+ option_value_name TEXT,
+ option_name TEXT,
+ member_coupon_id BIGINT,
+ package_coupon_id BIGINT,
+ sales_man_org_id BIGINT,
+ salesman_name TEXT,
+ salesman_role_id BIGINT,
+ salesman_user_id BIGINT,
+ operator_id BIGINT,
+ operator_name TEXT,
+ openSalesman TEXT,
+ returns_number INT,
+ site_table_id BIGINT,
+ tenant_goods_business_id BIGINT,
+ tenant_goods_category_id BIGINT,
+ create_time TIMESTAMP,
+ payload JSONB NOT NULL,
+ source_file TEXT,
+ source_endpoint TEXT,
+ fetched_at TIMESTAMPTZ DEFAULT now()
+);
+
+COMMENT ON TABLE billiards_ods.store_goods_sales_records IS 'ODS 原始明细表:门店商品销售流水。来源:export/test-json-doc/store_goods_sales_records.json;分析:store_goods_sales_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.id IS '【说明】本条「门店销售流水」记录的主键 ID。 【示例】2957924029550406(用于本条「门店销售流水」记录的主键 ID)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - id。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - tenant_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.site_id IS '【说明】门店 ID(系统主键)。 【示例】2790685415443269(用于门店 ID(系统主键))。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - site_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.siteid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - site_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.sitename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - siteName。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.site_goods_id IS '【说明】门店商品 ID。 【示例】2793026176012357(用于门店商品 ID)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - site_goods_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_goods_id IS '【说明】租户(品牌)级商品 ID(全局商品 ID)。 【示例】2792115932417925(用于租户(品牌)级商品 ID(全局商品 ID))。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - tenant_goods_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_settle_id IS '【说明】订单结算 ID(结账单主键)。 【示例】2957922914357125(用于订单结算 ID(结账单主键))。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_settle_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_trade_no IS '【说明】订单交易号(业务单号)。 【示例】2957858167230149(用于订单交易号(业务单号))。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_trade_no。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_goods_id IS '【说明】订单商品明细 ID(订单内部的商品行主键)。 【示例】2957858456391557(用于订单商品明细 ID(订单内部的商品行主键))。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_goods_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ordergoodsid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_goods_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_pay_id IS '【说明】关联支付记录的 ID。 【示例】0(用于关联支付记录的 ID)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_pay_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_coupon_id IS '【说明】订单级优惠券 ID。 【示例】0(用于订单级优惠券 ID)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_coupon_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_name IS '【说明】销售项目名称(商品名称),例如 “哇哈哈矿泉水”“地道肠”“东方树叶”等。 【示例】哇哈哈矿泉水(用于销售项目名称(商品名称),例如 “哇哈哈矿泉水”“地道肠”“东方树叶”等)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_name。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_group_name IS '【说明】销售项目所属的「门店内部分组名称」,类似前台菜单分组或大类标签。 【示例】酒水(用于销售项目所属的「门店内部分组名称」,类似前台菜单分组或大类标签)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_group_name。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_amount IS '【说明】原始应收金额,公式上接近 ledger_unit_price × ledger_count。 【示例】5.0(用于原始应收金额,公式上接近 ledger_unit_price × ledger_count)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_amount。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_count IS '【说明】销售数量(以 unit 为单位,unit 字段在门店商品档案中)。 【示例】1(用于销售数量(以 unit 为单位,unit 字段在门店商品档案中))。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_count。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_unit_price IS '【说明】商品在该次销售中的「结算单价」(元/单位)。 【示例】5.0(用于商品在该次销售中的「结算单价」(元/单位))。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_unit_price。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_status IS '【说明】销售流水状态。 【示例】1(用于销售流水状态)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_status。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.discount_money IS '【说明】本条销售明细的「价格优惠金额」,即原价部分被减免掉的金额。 【示例】0.0(用于本条销售明细的「价格优惠金额」,即原价部分被减免掉的金额)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - discount_money。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.discount_price IS '【说明】折后单价(元/单位)。 【示例】5.0(用于折后单价(元/单位))。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - discount_price。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.coupon_deduct_money IS '【说明】被优惠券 / 团购券直接抵扣到这条商品明细上的金额。 【示例】0.0(用于被优惠券 / 团购券直接抵扣到这条商品明细上的金额)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - coupon_deduct_money。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.member_discount_amount IS '【说明】由会员身份(会员折扣)针对这一行商品产生的优惠金额。 【示例】0.0(用于由会员身份(会员折扣)针对这一行商品产生的优惠金额)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - member_discount_amount。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_coupon_deduct_money IS '【说明】由优惠券抵扣“选项价格”的金额。 【示例】0.0(用于由优惠券抵扣“选项价格”的金额)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - option_coupon_deduct_money。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_member_discount_money IS '【说明】由会员折扣作用在“选项价格”上的优惠金额。 【示例】0.0(用于由会员折扣作用在“选项价格”上的优惠金额)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - option_member_discount_money。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.point_discount_money IS '【说明】由积分抵扣的金额(顾客兑换积分抵现金额)。 【示例】0.0(用于由积分抵扣的金额(顾客兑换积分抵现金额))。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - point_discount_money。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.point_discount_money_cost IS '【说明】积分抵扣对应的“成本金额”(后台核算用),例如按积分成本来计提费用。 【示例】0.0(用于积分抵扣对应的“成本金额”(后台核算用),例如按积分成本来计提费用)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - point_discount_money_cost。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.real_goods_money IS '【说明】商品实际入账金额(考虑折扣、可能还会考虑其它抵扣后的实际销售金额)。 【示例】5.0(用于商品实际入账金额(考虑折扣、可能还会考虑其它抵扣后的实际销售金额))。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - real_goods_money。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.cost_money IS '【说明】本条销售对应的成本金额(以元计)。 【示例】0.01(用于本条销售对应的成本金额(以元计))。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - cost_money。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.push_money IS '【说明】本条销售对应的提成金额(给营业员/促销员的提成)。 【示例】0.0(用于本条销售对应的提成金额(给营业员/促销员的提成))。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - push_money。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.sales_type IS '【说明】销售类型。 【示例】1(用于销售类型)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - sales_type。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.is_single_order IS '【说明】是否单独订单标识。 【示例】1(用于是否单独订单标识)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - is_single_order。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.is_delete IS '【说明】逻辑删除标志。 【示例】0(用于逻辑删除标志)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - is_delete。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.goods_remark IS '【说明】商品备注/口味说明/特殊说明。 【示例】哇哈哈矿泉水(用于商品备注/口味说明/特殊说明)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - goods_remark。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_price IS '【说明】商品选项(规格/加料)的附加价格。 【示例】0.0(用于商品选项(规格/加料)的附加价格)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - option_price。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_value_name IS '【说明】商品选项名称(如规格、口味:大杯/小杯,不加冰等)。 【示例】NULL(用于商品选项名称(如规格、口味:大杯/小杯,不加冰等))。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - option_value_name。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - option_name。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.member_coupon_id IS '【说明】会员券 ID(比如会员专享优惠券)。 【示例】0(用于会员券 ID(比如会员专享优惠券))。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - member_coupon_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.package_coupon_id IS '【说明】套餐券 ID。 【示例】0(用于套餐券 ID)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - package_coupon_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.sales_man_org_id IS '【说明】营业员所属组织/部门 ID。 【示例】0(用于营业员所属组织/部门 ID)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - sales_man_org_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.salesman_name IS '【说明】营业员姓名(如果有为具体销售员记业绩,则在此填姓名)。 【示例】NULL(用于营业员姓名(如果有为具体销售员记业绩,则在此填姓名))。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - salesman_name。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.salesman_role_id IS '【说明】营业员的系统角色 ID(例如某个角色代码表示“销售员”)。 【示例】0(用于营业员的系统角色 ID(例如某个角色代码表示“销售员”))。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - salesman_role_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.salesman_user_id IS '【说明】营业员用户 ID(系统账号 ID)。 【示例】0(用于营业员用户 ID(系统账号 ID))。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - salesman_user_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.operator_id IS '【说明】操作员 ID(录入这笔销售的员工)。 【示例】2790687322443013(用于操作员 ID(录入这笔销售的员工))。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - operator_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.operator_name IS '【说明】操作员姓名,文字冗余。 【示例】收银员:郑丽珊(用于操作员姓名,文字冗余)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - operator_name。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.openSalesman IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】2(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - openSalesman。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.returns_number IS '【说明】退货数量(如果这条明细做了退货,会记录退货数量)。 【示例】0(用于退货数量(如果这条明细做了退货,会记录退货数量))。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - returns_number。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.site_table_id IS '【说明】球台 ID。 【示例】2793003705192517(用于球台 ID)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - site_table_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_goods_business_id IS '【说明】租户级商品「业务大类」ID(例如“零食类”“酒水类”等更高维度)。 【示例】2790683528317768(用于租户级商品「业务大类」ID(例如“零食类”“酒水类”等更高维度))。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - tenant_goods_business_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_goods_category_id IS '【说明】租户级商品一级分类 ID。 【示例】2790683528350540(用于租户级商品一级分类 ID)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - tenant_goods_category_id。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.create_time IS '【说明】销售记录创建时间,通常就是结账时间或录入时间。 【示例】2025-11-09 23:35:57(用于销售记录创建时间,通常就是结账时间或录入时间)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - create_time。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - $。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】store_goods_sales_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】store_goods_sales_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/store_goods_sales_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】store_goods_sales_records.json - ETL元数据 - 无。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】store_goods_sales_records.json - ETL元数据 - 无。';
+
+
diff --git a/etl_billiards/dist/ETL_Manager/_internal/database/schema_dwd_doc.sql b/etl_billiards/dist/ETL_Manager/_internal/database/schema_dwd_doc.sql
new file mode 100644
index 0000000..15bf56c
--- /dev/null
+++ b/etl_billiards/dist/ETL_Manager/_internal/database/schema_dwd_doc.sql
@@ -0,0 +1,2016 @@
+CREATE SCHEMA IF NOT EXISTS billiards_dwd;
+SET search_path TO billiards_dwd;
+
+CREATE EXTENSION IF NOT EXISTS btree_gist;
+
+DO $$
+DECLARE
+ rec RECORD;
+BEGIN
+ FOR rec IN
+ SELECT table_name
+ FROM information_schema.columns
+ WHERE table_schema = 'billiards_dwd'
+ AND column_name = 'scd2_start_time'
+ LOOP
+ EXECUTE format('ALTER TABLE billiards_dwd.%I ALTER COLUMN scd2_start_time SET DEFAULT now()', rec.table_name);
+ EXECUTE format('ALTER TABLE billiards_dwd.%I ALTER COLUMN scd2_end_time SET DEFAULT ''9999-12-31''', rec.table_name);
+ EXECUTE format('ALTER TABLE billiards_dwd.%I ALTER COLUMN scd2_is_current SET DEFAULT 1', rec.table_name);
+ EXECUTE format('ALTER TABLE billiards_dwd.%I ALTER COLUMN scd2_version SET DEFAULT 1', rec.table_name);
+
+ END LOOP;
+
+ FOR rec IN (
+ SELECT tc.table_name,
+ string_agg(format('%I WITH =', kcu.column_name), ', ' ORDER BY kcu.ordinal_position) AS pk_eq_expr,
+ string_agg(format('%I', kcu.column_name), ', ' ORDER BY kcu.ordinal_position) AS pk_cols
+ FROM information_schema.table_constraints tc
+ JOIN information_schema.key_column_usage kcu
+ ON tc.table_schema = kcu.table_schema
+ AND tc.table_name = kcu.table_name
+ AND tc.constraint_name = kcu.constraint_name
+ WHERE tc.table_schema = 'billiards_dwd'
+ AND tc.constraint_type = 'PRIMARY KEY'
+ AND EXISTS (
+ SELECT 1 FROM information_schema.columns c
+ WHERE c.table_schema = 'billiards_dwd'
+ AND c.table_name = tc.table_name
+ AND c.column_name = 'scd2_start_time'
+ )
+ GROUP BY tc.table_name
+ )
+ LOOP
+ IF NOT EXISTS (
+ SELECT 1 FROM pg_constraint
+ WHERE conname = format('%s_scd2_no_overlap', rec.table_name)
+ AND conrelid = format('billiards_dwd.%s', rec.table_name)::regclass
+ ) THEN
+ EXECUTE format(
+ 'ALTER TABLE billiards_dwd.%I ADD CONSTRAINT %I EXCLUDE USING gist (%s, tstzrange(scd2_start_time, scd2_end_time) WITH &&) WHERE (scd2_is_current = 1);',
+ rec.table_name,
+ rec.table_name || '_scd2_no_overlap',
+ rec.pk_eq_expr
+ );
+ END IF;
+
+ IF to_regclass(format('billiards_dwd.%s_scd2_current_unique_idx', rec.table_name)) IS NULL THEN
+ EXECUTE format(
+ 'CREATE UNIQUE INDEX %I ON billiards_dwd.%I (%s) WHERE (scd2_is_current = 1);',
+ rec.table_name || '_scd2_current_unique_idx',
+ rec.table_name,
+ rec.pk_cols
+ );
+ END IF;
+ END LOOP;
+END
+$$;
+
+
+CREATE TABLE IF NOT EXISTS dim_site (
+ site_id BIGINT,
+ org_id BIGINT,
+ tenant_id BIGINT,
+ shop_name TEXT,
+ site_label TEXT,
+ full_address TEXT,
+ address TEXT,
+ longitude NUMERIC(10,6),
+ latitude NUMERIC(10,6),
+ tenant_site_region_id BIGINT,
+ business_tel TEXT,
+ site_type INTEGER,
+ shop_status INTEGER,
+ SCD2_start_time TIMESTAMPTZ DEFAULT now(),
+ SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31',
+ SCD2_is_current INT DEFAULT 1,
+ SCD2_version INT DEFAULT 1,
+ PRIMARY KEY (site_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dim_site IS 'DWD 维度表:dim_site。ODS 来源表:billiards_ods.table_fee_transactions(对应 JSON:table_fee_transactions.json;分析:table_fee_transactions-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dim_site.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - site_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_id。';
+COMMENT ON COLUMN billiards_dwd.dim_site.org_id IS '【说明】组织/机构 ID,用于组织维度归属。 【示例】2790684179467077(组织/机构 ID,用于组织维度归属)。 【ODS来源】table_fee_transactions - siteProfile.org_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - org_id。';
+COMMENT ON COLUMN billiards_dwd.dim_site.tenant_id IS '【说明】租户/品牌 ID,用于商户维度过滤与关联。 【示例】2790683160709957(租户/品牌 ID,用于商户维度过滤与关联)。 【ODS来源】table_fee_transactions - siteProfile.tenant_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - tenant_id。';
+COMMENT ON COLUMN billiards_dwd.dim_site.shop_name IS '【说明】门店名称,用于展示与查询。 【示例】朗朗桌球(门店名称,用于展示与查询)。 【ODS来源】table_fee_transactions - siteProfile.shop_name。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - shop_name。';
+COMMENT ON COLUMN billiards_dwd.dim_site.site_label IS '【说明】门店标签(如 A/B 店),用于展示与分组。 【示例】A(门店标签(如 A/B 店),用于展示与分组)。 【ODS来源】table_fee_transactions - siteProfile.site_label。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - site_label。';
+COMMENT ON COLUMN billiards_dwd.dim_site.full_address IS '【说明】门店详细地址,用于展示与地理信息。 【示例】广东省广州市天河区丽阳街12号(门店详细地址,用于展示与地理信息)。 【ODS来源】table_fee_transactions - siteProfile.full_address。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - full_address。';
+COMMENT ON COLUMN billiards_dwd.dim_site.address IS '【说明】门店地址简称/快照,用于展示。 【示例】广东省广州市天河区天园街道朗朗桌球(门店地址简称/快照,用于展示)。 【ODS来源】table_fee_transactions - siteProfile.address。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - address。';
+COMMENT ON COLUMN billiards_dwd.dim_site.longitude IS '【说明】经度,用于定位与地图展示。 【示例】113.360321(经度,用于定位与地图展示)。 【ODS来源】table_fee_transactions - siteProfile.longitude。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - longitude(派生:CAST(longitude AS numeric))。';
+COMMENT ON COLUMN billiards_dwd.dim_site.latitude IS '【说明】纬度,用于定位与地图展示。 【示例】23.133629(纬度,用于定位与地图展示)。 【ODS来源】table_fee_transactions - siteProfile.latitude。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - latitude(派生:CAST(latitude AS numeric))。';
+COMMENT ON COLUMN billiards_dwd.dim_site.tenant_site_region_id IS '【说明】租户下门店区域 ID,用于区域维度分析。 【示例】156440100(租户下门店区域 ID,用于区域维度分析)。 【ODS来源】table_fee_transactions - siteProfile.tenant_site_region_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - tenant_site_region_id。';
+COMMENT ON COLUMN billiards_dwd.dim_site.business_tel IS '【说明】门店电话,用于联系信息展示。 【示例】13316068642(门店电话,用于联系信息展示)。 【ODS来源】table_fee_transactions - siteProfile.business_tel。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - business_tel。';
+COMMENT ON COLUMN billiards_dwd.dim_site.site_type IS '【说明】门店类型枚举,用于门店分类。 【示例】1(门店类型枚举,用于门店分类)。 【ODS来源】table_fee_transactions - siteProfile.site_type。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - site_type。';
+COMMENT ON COLUMN billiards_dwd.dim_site.shop_status IS '【说明】门店状态枚举,用于营业状态标识。 【示例】1(门店状态枚举,用于营业状态标识)。 【ODS来源】table_fee_transactions - siteProfile.shop_status。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - shop_status。';
+COMMENT ON COLUMN billiards_dwd.dim_site.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】table_fee_transactions - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_site.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】table_fee_transactions - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_site.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】table_fee_transactions - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_site.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】table_fee_transactions - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS dim_site_Ex (
+ site_id BIGINT,
+ avatar TEXT,
+ address TEXT,
+ longitude NUMERIC(9,6),
+ latitude NUMERIC(9,6),
+ tenant_site_region_id BIGINT,
+ auto_light INTEGER,
+ light_status INTEGER,
+ light_type INTEGER,
+ light_token TEXT,
+ site_type INTEGER,
+ site_label TEXT,
+ attendance_enabled INTEGER,
+ attendance_distance INTEGER,
+ customer_service_qrcode TEXT,
+ customer_service_wechat TEXT,
+ fixed_pay_qrCode TEXT,
+ prod_env TEXT,
+ shop_status INTEGER,
+ create_time TIMESTAMPTZ,
+ update_time TIMESTAMPTZ,
+ SCD2_start_time TIMESTAMPTZ DEFAULT now(),
+ SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31',
+ SCD2_is_current INT DEFAULT 1,
+ SCD2_version INT DEFAULT 1,
+ PRIMARY KEY (site_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dim_site_ex IS 'DWD 维度表(扩展字段表):dim_site_ex。ODS 来源表:billiards_ods.table_fee_transactions(对应 JSON:table_fee_transactions.json;分析:table_fee_transactions-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - site_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_id。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.avatar IS '【说明】门店头像/图片 URL,用于展示。 【示例】https://oss.ficoo.vip/admin/hXcE4E_1752495052016.jpg(门店头像/图片 URL,用于展示)。 【ODS来源】table_fee_transactions - siteProfile.avatar。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - avatar。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.address IS '【说明】门店地址简称/快照,用于展示。 【示例】广东省广州市天河区天园街道朗朗桌球(门店地址简称/快照,用于展示)。 【ODS来源】table_fee_transactions - siteProfile.address。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - address。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.longitude IS '【说明】经度,用于定位与地图展示。 【示例】113.360321(经度,用于定位与地图展示)。 【ODS来源】table_fee_transactions - siteProfile.longitude。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - longitude(派生:CAST(longitude AS numeric))。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.latitude IS '【说明】纬度,用于定位与地图展示。 【示例】23.133629(纬度,用于定位与地图展示)。 【ODS来源】table_fee_transactions - siteProfile.latitude。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - latitude(派生:CAST(latitude AS numeric))。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.tenant_site_region_id IS '【说明】租户下门店区域 ID,用于区域维度分析。 【示例】156440100(租户下门店区域 ID,用于区域维度分析)。 【ODS来源】table_fee_transactions - siteProfile.tenant_site_region_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - tenant_site_region_id。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.auto_light IS '【说明】是否启用自动灯控配置,用于门店设备策略。 【示例】1(是否启用自动灯控配置,用于门店设备策略)。 【ODS来源】table_fee_transactions - siteProfile.auto_light。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - auto_light。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.light_status IS '【说明】灯控状态/开关,用于灯控设备管理。 【示例】1(灯控状态/开关,用于灯控设备管理)。 【ODS来源】table_fee_transactions - siteProfile.light_status。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - light_status。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.light_type IS '【说明】灯控类型,用于设备类型区分。 【示例】0(灯控类型,用于设备类型区分)。 【ODS来源】table_fee_transactions - siteProfile.light_type。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - light_type。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.light_token IS '【说明】灯控控制令牌,用于对接灯控服务。 【示例】NULL(灯控控制令牌,用于对接灯控服务)。 【ODS来源】table_fee_transactions - siteProfile.light_token。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - light_token。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.site_type IS '【说明】门店类型枚举,用于门店分类。 【示例】1(门店类型枚举,用于门店分类)。 【ODS来源】table_fee_transactions - siteProfile.site_type。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - site_type。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.site_label IS '【说明】门店标签(如 A/B 店),用于展示与分组。 【示例】A(门店标签(如 A/B 店),用于展示与分组)。 【ODS来源】table_fee_transactions - siteProfile.site_label。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - site_label。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.attendance_enabled IS '【说明】是否启用考勤功能,用于门店考勤配置。 【示例】1(是否启用考勤功能,用于门店考勤配置)。 【ODS来源】table_fee_transactions - siteProfile.attendance_enabled。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - attendance_enabled。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.attendance_distance IS '【说明】考勤允许距离(米),用于考勤打卡限制。 【示例】0(考勤允许距离(米),用于考勤打卡限制)。 【ODS来源】table_fee_transactions - siteProfile.attendance_distance。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - attendance_distance。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.customer_service_qrcode IS '【说明】客服二维码 URL,用于引导联系。 【示例】NULL(客服二维码 URL,用于引导联系)。 【ODS来源】table_fee_transactions - siteProfile.customer_service_qrcode。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - customer_service_qrcode。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.customer_service_wechat IS '【说明】客服微信号,用于引导联系。 【示例】NULL(客服微信号,用于引导联系)。 【ODS来源】table_fee_transactions - siteProfile.customer_service_wechat。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - customer_service_wechat。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.fixed_pay_qrcode IS '【说明】固定收款码(二维码)URL,用于收款引导。 【示例】NULL(固定收款码(二维码)URL,用于收款引导)。 【ODS来源】table_fee_transactions - siteProfile.fixed_pay_qrCode。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - fixed_pay_qrCode。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.prod_env IS '【说明】环境标识(生产/测试),用于区分配置环境。 【示例】1(环境标识(生产/测试),用于区分配置环境)。 【ODS来源】table_fee_transactions - siteProfile.prod_env。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - prod_env。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.shop_status IS '【说明】门店状态枚举,用于营业状态标识。 【示例】1(门店状态枚举,用于营业状态标识)。 【ODS来源】table_fee_transactions - siteProfile.shop_status。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - shop_status。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.create_time IS '【说明】门店创建时间(快照字段)。 【示例】NULL(用于门店创建时间(快照字段))。 【ODS来源】table_fee_transactions - siteProfile.create_time。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - create_time(派生:CAST(create_time AS timestamptz))。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.update_time IS '【说明】门店更新时间(快照字段)。 【示例】NULL(用于门店更新时间(快照字段))。 【ODS来源】table_fee_transactions - siteProfile.update_time。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - update_time(派生:CAST(update_time AS timestamptz))。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】table_fee_transactions - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】table_fee_transactions - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】table_fee_transactions - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_site_ex.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】table_fee_transactions - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS dim_table (
+ table_id BIGINT,
+ site_id BIGINT,
+ table_name TEXT,
+ site_table_area_id BIGINT,
+ site_table_area_name TEXT,
+ tenant_table_area_id BIGINT,
+ table_price NUMERIC(18,2),
+ SCD2_start_time TIMESTAMPTZ DEFAULT now(),
+ SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31',
+ SCD2_is_current INT DEFAULT 1,
+ SCD2_version INT DEFAULT 1,
+ PRIMARY KEY (table_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dim_table IS 'DWD 维度表:dim_table。ODS 来源表:billiards_ods.site_tables_master(对应 JSON:site_tables_master.json;分析:site_tables_master-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dim_table.table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791964216463493(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】site_tables_master - id。 【JSON字段】site_tables_master.json - data.siteTables - id。';
+COMMENT ON COLUMN billiards_dwd.dim_table.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】site_tables_master - site_id。 【JSON字段】site_tables_master.json - data.siteTables - site_id。';
+COMMENT ON COLUMN billiards_dwd.dim_table.table_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】A1(名称字段,用于展示与辅助识别)。 【ODS来源】site_tables_master - table_name。 【JSON字段】site_tables_master.json - data.siteTables - table_name。';
+COMMENT ON COLUMN billiards_dwd.dim_table.site_table_area_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791963794329671(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】site_tables_master - site_table_area_id。 【JSON字段】site_tables_master.json - data.siteTables - site_table_area_id。';
+COMMENT ON COLUMN billiards_dwd.dim_table.site_table_area_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】A区(名称字段,用于展示与辅助识别)。 【ODS来源】site_tables_master - areaName。 【JSON字段】site_tables_master.json - data.siteTables - areaName。';
+COMMENT ON COLUMN billiards_dwd.dim_table.tenant_table_area_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791963794329671(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】site_tables_master - site_table_area_id。 【JSON字段】site_tables_master.json - data.siteTables - site_table_area_id。';
+COMMENT ON COLUMN billiards_dwd.dim_table.table_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】site_tables_master - table_price。 【JSON字段】site_tables_master.json - data.siteTables - table_price。';
+COMMENT ON COLUMN billiards_dwd.dim_table.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】site_tables_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_table.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】site_tables_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_table.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】site_tables_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_table.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】site_tables_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS dim_table_Ex (
+ table_id BIGINT,
+ show_status INTEGER,
+ is_online_reservation INTEGER,
+ table_cloth_use_time INTEGER,
+ table_cloth_use_cycle INTEGER,
+ table_status INTEGER,
+ SCD2_start_time TIMESTAMPTZ DEFAULT now(),
+ SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31',
+ SCD2_is_current INT DEFAULT 1,
+ SCD2_version INT DEFAULT 1,
+ PRIMARY KEY (table_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dim_table_ex IS 'DWD 维度表(扩展字段表):dim_table_ex。ODS 来源表:billiards_ods.site_tables_master(对应 JSON:site_tables_master.json;分析:site_tables_master-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dim_table_ex.table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791964216463493(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】site_tables_master - id。 【JSON字段】site_tables_master.json - data.siteTables - id。';
+COMMENT ON COLUMN billiards_dwd.dim_table_ex.show_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】site_tables_master - show_status。 【JSON字段】site_tables_master.json - data.siteTables - show_status。';
+COMMENT ON COLUMN billiards_dwd.dim_table_ex.is_online_reservation IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】2(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】site_tables_master - is_online_reservation。 【JSON字段】site_tables_master.json - data.siteTables - is_online_reservation。';
+COMMENT ON COLUMN billiards_dwd.dim_table_ex.table_cloth_use_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】1863727(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】site_tables_master - table_cloth_use_time。 【JSON字段】site_tables_master.json - data.siteTables - table_cloth_use_time。';
+COMMENT ON COLUMN billiards_dwd.dim_table_ex.table_cloth_use_cycle IS '【说明】维度字段,用于补充维度属性。 【示例】0(维度字段,用于补充维度属性)。 【ODS来源】site_tables_master - table_cloth_use_Cycle。 【JSON字段】site_tables_master.json - data.siteTables - table_cloth_use_Cycle。';
+COMMENT ON COLUMN billiards_dwd.dim_table_ex.table_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】site_tables_master - table_status。 【JSON字段】site_tables_master.json - data.siteTables - table_status。';
+COMMENT ON COLUMN billiards_dwd.dim_table_ex.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】site_tables_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_table_ex.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】site_tables_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_table_ex.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】site_tables_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_table_ex.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】site_tables_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS dim_assistant (
+ assistant_id BIGINT,
+ user_id BIGINT,
+ assistant_no TEXT,
+ real_name TEXT,
+ nickname TEXT,
+ mobile TEXT,
+ tenant_id BIGINT,
+ site_id BIGINT,
+ team_id BIGINT,
+ team_name TEXT,
+ level INTEGER,
+ entry_time TIMESTAMPTZ,
+ resign_time TIMESTAMPTZ,
+ leave_status INTEGER,
+ assistant_status INTEGER,
+ SCD2_start_time TIMESTAMPTZ,
+ SCD2_end_time TIMESTAMPTZ,
+ SCD2_is_current INT,
+ SCD2_version INT,
+ PRIMARY KEY (assistant_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dim_assistant IS 'DWD 维度表:dim_assistant。ODS 来源表:billiards_ods.assistant_accounts_master(对应 JSON:assistant_accounts_master.json;分析:assistant_accounts_master-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant.assistant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2947562271297029(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - id。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant.user_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - staff_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - staff_id。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant.assistant_no IS '【说明】维度字段,用于补充维度属性。 【示例】31(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - assistant_no。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - assistant_no。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant.real_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】张静然(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_accounts_master - real_name。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - real_name。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant.nickname IS '【说明】名称字段,用于展示与辅助识别。 【示例】小然(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_accounts_master - nickname。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - nickname。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant.mobile IS '【说明】维度字段,用于补充维度属性。 【示例】15119679931(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - mobile。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - mobile。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - tenant_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - tenant_id。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - site_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - site_id。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant.team_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2792011585884037(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - team_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - team_id。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant.team_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】1组(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_accounts_master - team_name。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - team_name。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant.level IS '【说明】维度字段,用于补充维度属性。 【示例】20(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - level。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - level。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant.entry_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-02 08:00:00(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_accounts_master - entry_time。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - entry_time。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant.resign_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-03 08:00:00(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_accounts_master - resign_time。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - resign_time。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant.leave_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】assistant_accounts_master - leave_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - leave_status。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant.assistant_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】assistant_accounts_master - assistant_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - assistant_status。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】assistant_accounts_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】assistant_accounts_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】assistant_accounts_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】assistant_accounts_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS dim_assistant_Ex (
+ assistant_id BIGINT,
+ gender INTEGER,
+ birth_date TIMESTAMPTZ,
+ avatar TEXT,
+ introduce TEXT,
+ video_introduction_url TEXT,
+ height NUMERIC(5,2),
+ weight NUMERIC(5,2),
+ shop_name TEXT,
+ group_id BIGINT,
+ group_name TEXT,
+ person_org_id BIGINT,
+ staff_id BIGINT,
+ staff_profile_id BIGINT,
+ assistant_grade DOUBLE PRECISION,
+ sum_grade DOUBLE PRECISION,
+ get_grade_times INTEGER,
+ charge_way INTEGER,
+ allow_cx INTEGER,
+ is_guaranteed INTEGER,
+ salary_grant_enabled INTEGER,
+ entry_type INTEGER,
+ entry_sign_status INTEGER,
+ resign_sign_status INTEGER,
+ work_status INTEGER,
+ show_status INTEGER,
+ show_sort INTEGER,
+ online_status INTEGER,
+ is_delete INTEGER,
+ criticism_status INTEGER,
+ create_time TIMESTAMPTZ,
+ update_time TIMESTAMPTZ,
+ start_time TIMESTAMPTZ,
+ end_time TIMESTAMPTZ,
+ last_table_id BIGINT,
+ last_table_name TEXT,
+ last_update_name TEXT,
+ order_trade_no BIGINT,
+ ding_talk_synced INTEGER,
+ site_light_cfg_id BIGINT,
+ light_equipment_id TEXT,
+ light_status INTEGER,
+ is_team_leader INTEGER,
+ serial_number BIGINT,
+ SCD2_start_time TIMESTAMPTZ,
+ SCD2_end_time TIMESTAMPTZ,
+ SCD2_is_current INT,
+ SCD2_version INT,
+ PRIMARY KEY (assistant_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dim_assistant_ex IS 'DWD 维度表(扩展字段表):dim_assistant_ex。ODS 来源表:billiards_ods.assistant_accounts_master(对应 JSON:assistant_accounts_master.json;分析:assistant_accounts_master-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.assistant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2947562271297029(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - id。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.gender IS '【说明】维度字段,用于补充维度属性。 【示例】0(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - gender。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - gender。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.birth_date IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】0001-01-01 00:00:00(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_accounts_master - birth_date。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - birth_date。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.avatar IS '【说明】维度字段,用于补充维度属性。 【示例】https://oss.ficoo.vip/maUiImages/images/defaultAvatar.png(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - avatar。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - avatar。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.introduce IS '【说明】维度字段,用于补充维度属性。 【示例】NULL(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - introduce。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - introduce。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.video_introduction_url IS '【说明】维度字段,用于补充维度属性。 【示例】https://oss.ficoo.vip/cbb/userVideo/1753096246308/175309624630830.mp4(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - video_introduction_url。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - video_introduction_url。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.height IS '【说明】维度字段,用于补充维度属性。 【示例】0.0(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - height。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - height。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.weight IS '【说明】维度字段,用于补充维度属性。 【示例】0.0(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - weight。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - weight。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.shop_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】朗朗桌球(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_accounts_master - shop_name。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - shop_name。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.group_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - group_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - group_id。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.group_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_accounts_master - group_name。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - group_name。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.person_org_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2947562271215109(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - person_org_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - person_org_id。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.staff_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - staff_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - staff_id。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.staff_profile_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - staff_profile_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - staff_profile_id。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.assistant_grade IS '【说明】维度字段,用于补充维度属性。 【示例】0.0(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - assistant_grade。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - assistant_grade。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.sum_grade IS '【说明】维度字段,用于补充维度属性。 【示例】0.0(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - sum_grade。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - sum_grade。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.get_grade_times IS '【说明】维度字段,用于补充维度属性。 【示例】0(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - get_grade_times。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - get_grade_times。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.charge_way IS '【说明】维度字段,用于补充维度属性。 【示例】2(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - charge_way。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - charge_way。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.allow_cx IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - allow_cx。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - allow_cx。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.is_guaranteed IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】1(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】assistant_accounts_master - is_guaranteed。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - is_guaranteed。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.salary_grant_enabled IS '【说明】维度字段,用于补充维度属性。 【示例】2(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - salary_grant_enabled。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - salary_grant_enabled。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.entry_type IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - entry_type。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - entry_type。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.entry_sign_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】0(状态枚举字段,用于标识业务状态)。 【ODS来源】assistant_accounts_master - entry_sign_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - entry_sign_status。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.resign_sign_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】0(状态枚举字段,用于标识业务状态)。 【ODS来源】assistant_accounts_master - resign_sign_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - resign_sign_status。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.work_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】2(状态枚举字段,用于标识业务状态)。 【ODS来源】assistant_accounts_master - work_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - work_status。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.show_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】assistant_accounts_master - show_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - show_status。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.show_sort IS '【说明】维度字段,用于补充维度属性。 【示例】31(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - show_sort。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - show_sort。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.online_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】assistant_accounts_master - online_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - online_status。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】assistant_accounts_master - is_delete。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - is_delete。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.criticism_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】assistant_accounts_master - criticism_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - criticism_status。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-02 15:55:26(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_accounts_master - create_time。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - create_time。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.update_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-03 18:32:07(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_accounts_master - update_time。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - update_time。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.start_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-01 08:00:00(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_accounts_master - start_time。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - start_time。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.end_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-12-01 08:00:00(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_accounts_master - end_time。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - end_time。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.last_table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - last_table_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - last_table_id。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.last_table_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】TV(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_accounts_master - last_table_name。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - last_table_name。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.last_update_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】管理员:郑丽珊(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_accounts_master - last_update_name。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - last_update_name。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.order_trade_no IS '【说明】维度字段,用于补充维度属性。 【示例】0(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - order_trade_no。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - order_trade_no。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.ding_talk_synced IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - ding_talk_synced。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - ding_talk_synced。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.site_light_cfg_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - site_light_cfg_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - site_light_cfg_id。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.light_equipment_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - light_equipment_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - light_equipment_id。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.light_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】2(状态枚举字段,用于标识业务状态)。 【ODS来源】assistant_accounts_master - light_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - light_status。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.is_team_leader IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】assistant_accounts_master - is_team_leader。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - is_team_leader。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.serial_number IS '【说明】数量/时长字段,用于统计与计量。 【示例】0(数量/时长字段,用于统计与计量)。 【ODS来源】assistant_accounts_master - serial_number。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - serial_number。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】assistant_accounts_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】assistant_accounts_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】assistant_accounts_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】assistant_accounts_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS dim_member (
+ member_id BIGINT,
+ system_member_id BIGINT,
+ tenant_id BIGINT,
+ register_site_id BIGINT,
+ mobile TEXT,
+ nickname TEXT,
+ member_card_grade_code BIGINT,
+ member_card_grade_name TEXT,
+ create_time TIMESTAMPTZ,
+ update_time TIMESTAMPTZ,
+ SCD2_start_time TIMESTAMPTZ,
+ SCD2_end_time TIMESTAMPTZ,
+ SCD2_is_current INT,
+ SCD2_version INT,
+ PRIMARY KEY (member_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dim_member IS 'DWD 维度表:dim_member。ODS 来源表:billiards_ods.member_profiles(对应 JSON:member_profiles.json;分析:member_profiles-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dim_member.member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2955204541320325(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_profiles - id。 【JSON字段】member_profiles.json - data.tenantMemberInfos - id。';
+COMMENT ON COLUMN billiards_dwd.dim_member.system_member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2955204540009605(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_profiles - system_member_id。 【JSON字段】member_profiles.json - data.tenantMemberInfos - system_member_id。';
+COMMENT ON COLUMN billiards_dwd.dim_member.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_profiles - tenant_id。 【JSON字段】member_profiles.json - data.tenantMemberInfos - tenant_id。';
+COMMENT ON COLUMN billiards_dwd.dim_member.register_site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_profiles - register_site_id。 【JSON字段】member_profiles.json - data.tenantMemberInfos - register_site_id。';
+COMMENT ON COLUMN billiards_dwd.dim_member.mobile IS '【说明】维度字段,用于补充维度属性。 【示例】18620043391(维度字段,用于补充维度属性)。 【ODS来源】member_profiles - mobile。 【JSON字段】member_profiles.json - data.tenantMemberInfos - mobile。';
+COMMENT ON COLUMN billiards_dwd.dim_member.nickname IS '【说明】名称字段,用于展示与辅助识别。 【示例】胡先生(名称字段,用于展示与辅助识别)。 【ODS来源】member_profiles - nickname。 【JSON字段】member_profiles.json - data.tenantMemberInfos - nickname。';
+COMMENT ON COLUMN billiards_dwd.dim_member.member_card_grade_code IS '【说明】维度字段,用于补充维度属性。 【示例】2790683528022853(维度字段,用于补充维度属性)。 【ODS来源】member_profiles - member_card_grade_code。 【JSON字段】member_profiles.json - data.tenantMemberInfos - member_card_grade_code。';
+COMMENT ON COLUMN billiards_dwd.dim_member.member_card_grade_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】储值卡(名称字段,用于展示与辅助识别)。 【ODS来源】member_profiles - member_card_grade_name。 【JSON字段】member_profiles.json - data.tenantMemberInfos - member_card_grade_name。';
+COMMENT ON COLUMN billiards_dwd.dim_member.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-08 01:29:33(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】member_profiles - create_time。 【JSON字段】member_profiles.json - data.tenantMemberInfos - create_time。';
+COMMENT ON COLUMN billiards_dwd.dim_member.update_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】NULL(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】member_profiles - update_time。 【JSON字段】member_profiles.json - data.tenantMemberInfos - update_time。';
+COMMENT ON COLUMN billiards_dwd.dim_member.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】member_profiles - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_member.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】member_profiles - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_member.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】member_profiles - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_member.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】member_profiles - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS dim_member_Ex (
+ member_id BIGINT,
+ referrer_member_id BIGINT,
+ point NUMERIC(18,2),
+ register_site_name TEXT,
+ growth_value NUMERIC(18,2),
+ user_status INTEGER,
+ status INTEGER,
+ SCD2_start_time TIMESTAMPTZ,
+ SCD2_end_time TIMESTAMPTZ,
+ SCD2_is_current INT,
+ SCD2_version INT,
+ PRIMARY KEY (member_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dim_member_ex IS 'DWD 维度表(扩展字段表):dim_member_ex。ODS 来源表:billiards_ods.member_profiles(对应 JSON:member_profiles.json;分析:member_profiles-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dim_member_ex.member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2955204541320325(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_profiles - id。 【JSON字段】member_profiles.json - data.tenantMemberInfos - id。';
+COMMENT ON COLUMN billiards_dwd.dim_member_ex.referrer_member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_profiles - referrer_member_id。 【JSON字段】member_profiles.json - data.tenantMemberInfos - referrer_member_id。';
+COMMENT ON COLUMN billiards_dwd.dim_member_ex.point IS '【说明】维度字段,用于补充维度属性。 【示例】0.0(维度字段,用于补充维度属性)。 【ODS来源】member_profiles - point。 【JSON字段】member_profiles.json - data.tenantMemberInfos - point。';
+COMMENT ON COLUMN billiards_dwd.dim_member_ex.register_site_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】朗朗桌球(名称字段,用于展示与辅助识别)。 【ODS来源】member_profiles - site_name。 【JSON字段】member_profiles.json - data.tenantMemberInfos - site_name。';
+COMMENT ON COLUMN billiards_dwd.dim_member_ex.growth_value IS '【说明】维度字段,用于补充维度属性。 【示例】0.0(维度字段,用于补充维度属性)。 【ODS来源】member_profiles - growth_value。 【JSON字段】member_profiles.json - data.tenantMemberInfos - growth_value。';
+COMMENT ON COLUMN billiards_dwd.dim_member_ex.user_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】member_profiles - user_status。 【JSON字段】member_profiles.json - data.tenantMemberInfos - user_status。';
+COMMENT ON COLUMN billiards_dwd.dim_member_ex.status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】member_profiles - status。 【JSON字段】member_profiles.json - data.tenantMemberInfos - status。';
+COMMENT ON COLUMN billiards_dwd.dim_member_ex.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】member_profiles - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_member_ex.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】member_profiles - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_member_ex.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】member_profiles - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_member_ex.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】member_profiles - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS dim_member_card_account (
+ member_card_id BIGINT,
+ tenant_id BIGINT,
+ register_site_id BIGINT,
+ tenant_member_id BIGINT,
+ system_member_id BIGINT,
+ card_type_id BIGINT,
+ member_card_grade_code BIGINT,
+ member_card_grade_code_name TEXT,
+ member_card_type_name TEXT,
+ member_name TEXT,
+ member_mobile TEXT,
+ balance NUMERIC(18,2),
+ start_time TIMESTAMPTZ,
+ end_time TIMESTAMPTZ,
+ last_consume_time TIMESTAMPTZ,
+ status INTEGER,
+ is_delete INTEGER,
+ SCD2_start_time TIMESTAMPTZ,
+ SCD2_end_time TIMESTAMPTZ,
+ SCD2_is_current INT,
+ SCD2_version INT,
+ PRIMARY KEY (member_card_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dim_member_card_account IS 'DWD 维度表:dim_member_card_account。ODS 来源表:billiards_ods.member_stored_value_cards(对应 JSON:member_stored_value_cards.json;分析:member_stored_value_cards-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account.member_card_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2955206162843781(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_stored_value_cards - id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - id。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_stored_value_cards - tenant_id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tenant_id。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account.register_site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_stored_value_cards - register_site_id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - register_site_id。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account.tenant_member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2955204541320325(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_stored_value_cards - tenant_member_id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tenant_member_id。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account.system_member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2955204540009605(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_stored_value_cards - system_member_id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - system_member_id。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account.card_type_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793266846533445(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_stored_value_cards - card_type_id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - card_type_id。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account.member_card_grade_code IS '【说明】维度字段,用于补充维度属性。 【示例】2790683528022856(维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - member_card_grade_code。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_card_grade_code。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account.member_card_grade_code_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】活动抵用券(名称字段,用于展示与辅助识别)。 【ODS来源】member_stored_value_cards - member_card_grade_code_name。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_card_grade_code_name。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account.member_card_type_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】活动抵用券(名称字段,用于展示与辅助识别)。 【ODS来源】member_stored_value_cards - member_card_type_name。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_card_type_name。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account.member_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】胡先生(名称字段,用于展示与辅助识别)。 【ODS来源】member_stored_value_cards - member_name。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_name。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account.member_mobile IS '【说明】维度字段,用于补充维度属性。 【示例】18620043391(维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - member_mobile。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_mobile。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account.balance IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - balance。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - balance。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account.start_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-08 01:31:12(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】member_stored_value_cards - start_time。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - start_time。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account.end_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2225-01-01 00:00:00(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】member_stored_value_cards - end_time。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - end_time。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account.last_consume_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 07:48:23(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】member_stored_value_cards - last_consume_time。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - last_consume_time。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account.status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】member_stored_value_cards - status。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - status。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】member_stored_value_cards - is_delete。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - is_delete。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】member_stored_value_cards - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】member_stored_value_cards - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】member_stored_value_cards - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】member_stored_value_cards - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS dim_member_card_account_Ex (
+ member_card_id BIGINT,
+ site_name TEXT,
+ tenant_name VARCHAR(64),
+ tenantAvatar TEXT,
+ effect_site_id BIGINT,
+ able_cross_site INTEGER,
+ card_physics_type INTEGER,
+ card_no TEXT,
+ bind_password TEXT,
+ use_scene TEXT,
+ denomination NUMERIC(18,2),
+ create_time TIMESTAMPTZ,
+ disable_start_time TIMESTAMPTZ,
+ disable_end_time TIMESTAMPTZ,
+ is_allow_give INTEGER,
+ is_allow_order_deduct INTEGER,
+ sort INTEGER,
+ table_discount NUMERIC(10,2),
+ goods_discount NUMERIC(10,2),
+ assistant_discount NUMERIC(10,2),
+ assistant_reward_discount NUMERIC(10,2),
+ table_service_discount NUMERIC(10,2),
+ goods_service_discount NUMERIC(10,2),
+ assistant_service_discount NUMERIC(10,2),
+ coupon_discount NUMERIC(10,2),
+ table_discount_sub_switch INTEGER,
+ goods_discount_sub_switch INTEGER,
+ assistant_discount_sub_switch INTEGER,
+ assistant_reward_discount_sub_switch INTEGER,
+ goods_discount_range_type INTEGER,
+ table_deduct_radio NUMERIC(10,2),
+ goods_deduct_radio NUMERIC(10,2),
+ assistant_deduct_radio NUMERIC(10,2),
+ table_service_deduct_radio NUMERIC(10,2),
+ goods_service_deduct_radio NUMERIC(10,2),
+ assistant_service_deduct_radio NUMERIC(10,2),
+ assistant_reward_deduct_radio NUMERIC(10,2),
+ coupon_deduct_radio NUMERIC(10,2),
+ cardSettleDeduct NUMERIC(18,2),
+ tableCardDeduct NUMERIC(18,2),
+ tableServiceCardDeduct NUMERIC(18,2),
+ goodsCarDeduct NUMERIC(18,2),
+ goodsServiceCardDeduct NUMERIC(18,2),
+ assistantCardDeduct NUMERIC(18,2),
+ assistantServiceCardDeduct NUMERIC(18,2),
+ assistantRewardCardDeduct NUMERIC(18,2),
+ couponCardDeduct NUMERIC(18,2),
+ deliveryFeeDeduct NUMERIC(18,2),
+ tableAreaId TEXT,
+ goodsCategoryId TEXT,
+ pdAssisnatLevel TEXT,
+ cxAssisnatLevel TEXT,
+ SCD2_start_time TIMESTAMPTZ,
+ SCD2_end_time TIMESTAMPTZ,
+ SCD2_is_current INT,
+ SCD2_version INT,
+ PRIMARY KEY (member_card_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dim_member_card_account_ex IS 'DWD 维度表(扩展字段表):dim_member_card_account_ex。ODS 来源表:billiards_ods.member_stored_value_cards(对应 JSON:member_stored_value_cards.json;分析:member_stored_value_cards-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.member_card_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2955206162843781(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_stored_value_cards - id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - id。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.site_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】朗朗桌球(名称字段,用于展示与辅助识别)。 【ODS来源】member_stored_value_cards - site_name。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - site_name。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.tenant_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】member_stored_value_cards - tenantName。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tenantName。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.tenantavatar IS '【说明】维度字段,用于补充维度属性。 【示例】NULL(维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - tenantAvatar。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tenantAvatar。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.effect_site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_stored_value_cards - effect_site_id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - effect_site_id。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.able_cross_site IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - able_cross_site。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - able_cross_site。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.card_physics_type IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - card_physics_type。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - card_physics_type。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.card_no IS '【说明】维度字段,用于补充维度属性。 【示例】NULL(维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - card_no。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - card_no。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.bind_password IS '【说明】维度字段,用于补充维度属性。 【示例】NULL(维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - bind_password。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - bind_password。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.use_scene IS '【说明】维度字段,用于补充维度属性。 【示例】NULL(维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - use_scene。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - use_scene。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.denomination IS '【说明】维度字段,用于补充维度属性。 【示例】0.0(维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - denomination。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - denomination。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-08 01:31:12(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】member_stored_value_cards - create_time。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - create_time。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.disable_start_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】0001-01-01 00:00:00(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】member_stored_value_cards - disable_start_time。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - disable_start_time。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.disable_end_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】0001-01-01 00:00:00(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】member_stored_value_cards - disable_end_time。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - disable_end_time。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.is_allow_give IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】member_stored_value_cards - is_allow_give。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - is_allow_give。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.is_allow_order_deduct IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - is_allow_order_deduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - is_allow_order_deduct。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.sort IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - sort。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - sort。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.table_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - table_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_discount。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goods_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - goods_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_discount。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - assistant_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_discount。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_reward_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - assistant_reward_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_reward_discount。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.table_service_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - table_service_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_service_discount。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goods_service_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - goods_service_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_service_discount。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_service_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - assistant_service_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_service_discount。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.coupon_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - coupon_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - coupon_discount。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.table_discount_sub_switch IS '【说明】数量/时长字段,用于统计与计量。 【示例】2(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - table_discount_sub_switch。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_discount_sub_switch。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goods_discount_sub_switch IS '【说明】数量/时长字段,用于统计与计量。 【示例】2(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - goods_discount_sub_switch。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_discount_sub_switch。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_discount_sub_switch IS '【说明】数量/时长字段,用于统计与计量。 【示例】2(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - assistant_discount_sub_switch。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_discount_sub_switch。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_reward_discount_sub_switch IS '【说明】数量/时长字段,用于统计与计量。 【示例】2(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - assistant_reward_discount_sub_switch。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_reward_discount_sub_switch。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goods_discount_range_type IS '【说明】数量/时长字段,用于统计与计量。 【示例】1(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - goods_discount_range_type。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_discount_range_type。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.table_deduct_radio IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】100.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - table_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_deduct_radio。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goods_deduct_radio IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】100.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - goods_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_deduct_radio。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_deduct_radio IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】100.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - assistant_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_deduct_radio。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.table_service_deduct_radio IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】100.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - table_service_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_service_deduct_radio。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goods_service_deduct_radio IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】100.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - goods_service_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_service_deduct_radio。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_service_deduct_radio IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】100.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - assistant_service_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_service_deduct_radio。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_reward_deduct_radio IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】100.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - assistant_reward_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_reward_deduct_radio。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.coupon_deduct_radio IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】100.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - coupon_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - coupon_deduct_radio。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.cardsettlededuct IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - cardSettleDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - cardSettleDeduct。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.tablecarddeduct IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - tableCardDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tableCardDeduct。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.tableservicecarddeduct IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - tableServiceCardDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tableServiceCardDeduct。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goodscardeduct IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - goodsCarDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goodsCarDeduct。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goodsservicecarddeduct IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - goodsServiceCardDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goodsServiceCardDeduct。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistantcarddeduct IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - assistantCardDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistantCardDeduct。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistantservicecarddeduct IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - assistantServiceCardDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistantServiceCardDeduct。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistantrewardcarddeduct IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - assistantRewardCardDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistantRewardCardDeduct。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.couponcarddeduct IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - couponCardDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - couponCardDeduct。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.deliveryfeededuct IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - deliveryFeeDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - deliveryFeeDeduct。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.tableareaid IS '【说明】维度字段,用于补充维度属性。 【示例】[](维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - tableAreaId。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tableAreaId。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goodscategoryid IS '【说明】维度字段,用于补充维度属性。 【示例】[](维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - goodsCategoryId。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goodsCategoryId。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.pdassisnatlevel IS '【说明】维度字段,用于补充维度属性。 【示例】[](维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - pdAssisnatLevel。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - pdAssisnatLevel。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.cxassisnatlevel IS '【说明】维度字段,用于补充维度属性。 【示例】[](维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - cxAssisnatLevel。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - cxAssisnatLevel。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】member_stored_value_cards - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】member_stored_value_cards - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】member_stored_value_cards - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】member_stored_value_cards - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS dim_tenant_goods (
+ tenant_goods_id BIGINT,
+ tenant_id BIGINT,
+ supplier_id BIGINT,
+ category_name VARCHAR(64),
+ goods_category_id BIGINT,
+ goods_second_category_id BIGINT,
+ goods_name VARCHAR(128),
+ goods_number VARCHAR(64),
+ unit VARCHAR(16),
+ market_price NUMERIC(18,2),
+ goods_state INTEGER,
+ create_time TIMESTAMPTZ,
+ update_time TIMESTAMPTZ,
+ is_delete INTEGER,
+ SCD2_start_time TIMESTAMPTZ,
+ SCD2_end_time TIMESTAMPTZ,
+ SCD2_is_current INT,
+ SCD2_version INT,
+ PRIMARY KEY (tenant_goods_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dim_tenant_goods IS 'DWD 维度表:dim_tenant_goods。ODS 来源表:billiards_ods.tenant_goods_master(对应 JSON:tenant_goods_master.json;分析:tenant_goods_master-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.tenant_goods_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791925230096261(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】tenant_goods_master - id。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - id。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】tenant_goods_master - tenant_id。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - tenant_id。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.supplier_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】tenant_goods_master - supplier_id。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - supplier_id。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.category_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】饮料(名称字段,用于展示与辅助识别)。 【ODS来源】tenant_goods_master - categoryName。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - categoryName。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.goods_category_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683528350539(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】tenant_goods_master - goods_category_id。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_category_id。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.goods_second_category_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683528350540(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】tenant_goods_master - goods_second_category_id。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_second_category_id。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.goods_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】东方树叶(名称字段,用于展示与辅助识别)。 【ODS来源】tenant_goods_master - goods_name。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_name。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.goods_number IS '【说明】数量/时长字段,用于统计与计量。 【示例】1(数量/时长字段,用于统计与计量)。 【ODS来源】tenant_goods_master - goods_number。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_number。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.unit IS '【说明】维度字段,用于补充维度属性。 【示例】瓶(维度字段,用于补充维度属性)。 【ODS来源】tenant_goods_master - unit。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - unit。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.market_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】8.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】tenant_goods_master - market_price。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - market_price。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.goods_state IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】tenant_goods_master - goods_state。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_state。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-07-15 17:13:15(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】tenant_goods_master - create_time。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - create_time。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.update_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-10-29 23:51:38(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】tenant_goods_master - update_time。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - update_time。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】tenant_goods_master - is_delete。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - is_delete。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】tenant_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】tenant_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】tenant_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】tenant_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS dim_tenant_goods_Ex (
+ tenant_goods_id BIGINT,
+ remark_name VARCHAR(128),
+ pinyin_initial VARCHAR(128),
+ goods_cover VARCHAR(512),
+ goods_bar_code VARCHAR(64),
+ commodity_code VARCHAR(64),
+ commodity_code_list VARCHAR(256),
+ min_discount_price NUMERIC(18,2),
+ cost_price NUMERIC(18,2),
+ cost_price_type INTEGER,
+ able_discount INTEGER,
+ sale_channel INTEGER,
+ is_warehousing INTEGER,
+ is_in_site BOOLEAN,
+ able_site_transfer INTEGER,
+ common_sale_royalty INTEGER,
+ point_sale_royalty INTEGER,
+ out_goods_id BIGINT,
+ SCD2_start_time TIMESTAMPTZ,
+ SCD2_end_time TIMESTAMPTZ,
+ SCD2_is_current INT,
+ SCD2_version INT,
+ PRIMARY KEY (tenant_goods_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dim_tenant_goods_ex IS 'DWD 维度表(扩展字段表):dim_tenant_goods_ex。ODS 来源表:billiards_ods.tenant_goods_master(对应 JSON:tenant_goods_master.json;分析:tenant_goods_master-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.tenant_goods_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791925230096261(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】tenant_goods_master - id。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - id。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.remark_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】tenant_goods_master - remark_name。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - remark_name。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.pinyin_initial IS '【说明】维度字段,用于补充维度属性。 【示例】DFSY,DFSX(维度字段,用于补充维度属性)。 【ODS来源】tenant_goods_master - pinyin_initial。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - pinyin_initial。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.goods_cover IS '【说明】维度字段,用于补充维度属性。 【示例】https://oss.ficoo.vip/admin/ZwS8fj_1753175129443.jpg(维度字段,用于补充维度属性)。 【ODS来源】tenant_goods_master - goods_cover。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_cover。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.goods_bar_code IS '【说明】维度字段,用于补充维度属性。 【示例】NULL(维度字段,用于补充维度属性)。 【ODS来源】tenant_goods_master - goods_bar_code。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_bar_code。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.commodity_code IS '【说明】维度字段,用于补充维度属性。 【示例】10000028(维度字段,用于补充维度属性)。 【ODS来源】tenant_goods_master - commodity_code。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - commodity_code。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.commodity_code_list IS '【说明】维度字段,用于补充维度属性。 【示例】10000028(维度字段,用于补充维度属性)。 【ODS来源】tenant_goods_master - commodity_code。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - commodity_code。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.min_discount_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】tenant_goods_master - min_discount_price。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - min_discount_price。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.cost_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】tenant_goods_master - cost_price。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - cost_price。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.cost_price_type IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】1(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】tenant_goods_master - cost_price_type。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - cost_price_type。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.able_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】1(数量/时长字段,用于统计与计量)。 【ODS来源】tenant_goods_master - able_discount。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - able_discount。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.sale_channel IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】tenant_goods_master - sale_channel。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - sale_channel。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.is_warehousing IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】1(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】tenant_goods_master - is_warehousing。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - is_warehousing。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.is_in_site IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】false(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】tenant_goods_master - isInSite(派生:BOOLEAN(isInSite))。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - isInSite(派生:BOOLEAN(isInSite))。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.able_site_transfer IS '【说明】维度字段,用于补充维度属性。 【示例】2(维度字段,用于补充维度属性)。 【ODS来源】tenant_goods_master - able_site_transfer。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - able_site_transfer。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.common_sale_royalty IS '【说明】维度字段,用于补充维度属性。 【示例】0(维度字段,用于补充维度属性)。 【ODS来源】tenant_goods_master - common_sale_royalty。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - common_sale_royalty。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.point_sale_royalty IS '【说明】维度字段,用于补充维度属性。 【示例】0(维度字段,用于补充维度属性)。 【ODS来源】tenant_goods_master - point_sale_royalty。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - point_sale_royalty。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.out_goods_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】tenant_goods_master - out_goods_id。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - out_goods_id。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】tenant_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】tenant_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】tenant_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】tenant_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS dim_store_goods (
+ site_goods_id BIGINT,
+ tenant_id BIGINT,
+ site_id BIGINT,
+ tenant_goods_id BIGINT,
+ goods_name TEXT,
+ goods_category_id BIGINT,
+ goods_second_category_id BIGINT,
+ category_level1_name TEXT,
+ category_level2_name TEXT,
+ batch_stock_qty INTEGER,
+ sale_qty INTEGER,
+ total_sales_qty INTEGER,
+ sale_price NUMERIC(18,2),
+ created_at TIMESTAMPTZ,
+ updated_at TIMESTAMPTZ,
+ avg_monthly_sales NUMERIC(18,4),
+ goods_state INTEGER,
+ enable_status INTEGER,
+ send_state INTEGER,
+ is_delete INTEGER,
+ SCD2_start_time TIMESTAMPTZ,
+ SCD2_end_time TIMESTAMPTZ,
+ SCD2_is_current INT,
+ SCD2_version INT,
+ PRIMARY KEY (site_goods_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dim_store_goods IS 'DWD 维度表:dim_store_goods。ODS 来源表:billiards_ods.store_goods_master(对应 JSON:store_goods_master.json;分析:store_goods_master-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.site_goods_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793025851560005(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_master - id。 【JSON字段】store_goods_master.json - data.orderGoodsList - id。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_master - tenant_id。 【JSON字段】store_goods_master.json - data.orderGoodsList - tenant_id。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_master - site_id。 【JSON字段】store_goods_master.json - data.orderGoodsList - site_id。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.tenant_goods_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2792178593255301(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_master - tenant_goods_id。 【JSON字段】store_goods_master.json - data.orderGoodsList - tenant_goods_id。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.goods_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】合味道泡面(名称字段,用于展示与辅助识别)。 【ODS来源】store_goods_master - goods_name。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_name。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.goods_category_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791941988405125(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_master - goods_category_id。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_category_id。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.goods_second_category_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793236829620037(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_master - goods_second_category_id。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_second_category_id。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.category_level1_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】零食(名称字段,用于展示与辅助识别)。 【ODS来源】store_goods_master - oneCategoryName。 【JSON字段】store_goods_master.json - data.orderGoodsList - oneCategoryName。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.category_level2_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】面(名称字段,用于展示与辅助识别)。 【ODS来源】store_goods_master - twoCategoryName。 【JSON字段】store_goods_master.json - data.orderGoodsList - twoCategoryName。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.batch_stock_qty IS '【说明】数量/时长字段,用于统计与计量。 【示例】18(数量/时长字段,用于统计与计量)。 【ODS来源】store_goods_master - stock。 【JSON字段】store_goods_master.json - data.orderGoodsList - stock。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.sale_qty IS '【说明】数量/时长字段,用于统计与计量。 【示例】104(数量/时长字段,用于统计与计量)。 【ODS来源】store_goods_master - sale_num。 【JSON字段】store_goods_master.json - data.orderGoodsList - sale_num。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.total_sales_qty IS '【说明】数量/时长字段,用于统计与计量。 【示例】104(数量/时长字段,用于统计与计量)。 【ODS来源】store_goods_master - total_sales。 【JSON字段】store_goods_master.json - data.orderGoodsList - total_sales。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.sale_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】12.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_master - sale_price。 【JSON字段】store_goods_master.json - data.orderGoodsList - sale_price。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.created_at IS '【说明】维度字段,用于补充维度属性。 【示例】2025-07-16 11:52:51(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - create_time。 【JSON字段】store_goods_master.json - data.orderGoodsList - create_time。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.updated_at IS '【说明】维度字段,用于补充维度属性。 【示例】2025-11-09 07:23:47(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - update_time。 【JSON字段】store_goods_master.json - data.orderGoodsList - update_time。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.avg_monthly_sales IS '【说明】维度字段,用于补充维度属性。 【示例】1.32(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - average_monthly_sales。 【JSON字段】store_goods_master.json - data.orderGoodsList - average_monthly_sales。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.goods_state IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - goods_state。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_state。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.enable_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】store_goods_master - enable_status。 【JSON字段】store_goods_master.json - data.orderGoodsList - enable_status。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.send_state IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - send_state。 【JSON字段】store_goods_master.json - data.orderGoodsList - send_state。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】store_goods_master - is_delete。 【JSON字段】store_goods_master.json - data.orderGoodsList - is_delete。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】store_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】store_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】store_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】store_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS dim_store_goods_Ex (
+ site_goods_id BIGINT,
+ site_name TEXT,
+ unit TEXT,
+ goods_barcode TEXT,
+ goods_cover_url TEXT,
+ pinyin_initial TEXT,
+ stock_qty INTEGER,
+ stock_secondary_qty INTEGER,
+ safety_stock_qty INTEGER,
+ cost_price NUMERIC(18,4),
+ cost_price_type INTEGER,
+ provisional_total_cost NUMERIC(18,2),
+ total_purchase_cost NUMERIC(18,2),
+ min_discount_price NUMERIC(18,2),
+ is_discountable INTEGER,
+ days_on_shelf INTEGER,
+ audit_status INTEGER,
+ sale_channel INTEGER,
+ is_warehousing INTEGER,
+ freeze_status INTEGER,
+ forbid_sell_status INTEGER,
+ able_site_transfer INTEGER,
+ custom_label_type INTEGER,
+ option_required INTEGER,
+ remark TEXT,
+ sort_order INTEGER,
+ SCD2_start_time TIMESTAMPTZ,
+ SCD2_end_time TIMESTAMPTZ,
+ SCD2_is_current INT,
+ SCD2_version INT,
+ PRIMARY KEY (site_goods_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dim_store_goods_ex IS 'DWD 维度表(扩展字段表):dim_store_goods_ex。ODS 来源表:billiards_ods.store_goods_master(对应 JSON:store_goods_master.json;分析:store_goods_master-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.site_goods_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793025851560005(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_master - id。 【JSON字段】store_goods_master.json - data.orderGoodsList - id。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.site_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】朗朗桌球(名称字段,用于展示与辅助识别)。 【ODS来源】store_goods_master - siteName。 【JSON字段】store_goods_master.json - data.orderGoodsList - siteName。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.unit IS '【说明】维度字段,用于补充维度属性。 【示例】桶(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - unit。 【JSON字段】store_goods_master.json - data.orderGoodsList - unit。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.goods_barcode IS '【说明】维度字段,用于补充维度属性。 【示例】NULL(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - goods_bar_code。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_bar_code。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.goods_cover_url IS '【说明】维度字段,用于补充维度属性。 【示例】https://oss.ficoo.vip/admin/8M1WM7_1753204221337.jpg(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - goods_cover。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_cover。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.pinyin_initial IS '【说明】维度字段,用于补充维度属性。 【示例】HWDPM,GWDPM(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - pinyin_initial。 【JSON字段】store_goods_master.json - data.orderGoodsList - pinyin_initial。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.stock_qty IS '【说明】数量/时长字段,用于统计与计量。 【示例】18(数量/时长字段,用于统计与计量)。 【ODS来源】store_goods_master - stock。 【JSON字段】store_goods_master.json - data.orderGoodsList - stock。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.stock_secondary_qty IS '【说明】数量/时长字段,用于统计与计量。 【示例】0(数量/时长字段,用于统计与计量)。 【ODS来源】store_goods_master - stock_A。 【JSON字段】store_goods_master.json - data.orderGoodsList - stock_A。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.safety_stock_qty IS '【说明】数量/时长字段,用于统计与计量。 【示例】0(数量/时长字段,用于统计与计量)。 【ODS来源】store_goods_master - safe_stock。 【JSON字段】store_goods_master.json - data.orderGoodsList - safe_stock。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.cost_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_master - cost_price。 【JSON字段】store_goods_master.json - data.orderGoodsList - cost_price。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.cost_price_type IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】1(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_master - cost_price_type。 【JSON字段】store_goods_master.json - data.orderGoodsList - cost_price_type。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.provisional_total_cost IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_master - total_purchase_cost。 【JSON字段】store_goods_master.json - data.orderGoodsList - total_purchase_cost。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.total_purchase_cost IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_master - total_purchase_cost。 【JSON字段】store_goods_master.json - data.orderGoodsList - total_purchase_cost。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.min_discount_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】7.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_master - min_discount_price。 【JSON字段】store_goods_master.json - data.orderGoodsList - min_discount_price。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.is_discountable IS '【说明】数量/时长字段,用于统计与计量。 【示例】1(数量/时长字段,用于统计与计量)。 【ODS来源】store_goods_master - able_discount。 【JSON字段】store_goods_master.json - data.orderGoodsList - able_discount。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.days_on_shelf IS '【说明】维度字段,用于补充维度属性。 【示例】13(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - days_available。 【JSON字段】store_goods_master.json - data.orderGoodsList - days_available。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.audit_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】2(状态枚举字段,用于标识业务状态)。 【ODS来源】store_goods_master - audit_status。 【JSON字段】store_goods_master.json - data.orderGoodsList - audit_status。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.sale_channel IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - sale_channel。 【JSON字段】store_goods_master.json - data.orderGoodsList - sale_channel。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.is_warehousing IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】1(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】store_goods_master - is_warehousing。 【JSON字段】store_goods_master.json - data.orderGoodsList - is_warehousing。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.freeze_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】0(状态枚举字段,用于标识业务状态)。 【ODS来源】store_goods_master - freeze。 【JSON字段】store_goods_master.json - data.orderGoodsList - freeze。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.forbid_sell_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】store_goods_master - forbid_sell_status。 【JSON字段】store_goods_master.json - data.orderGoodsList - forbid_sell_status。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.able_site_transfer IS '【说明】维度字段,用于补充维度属性。 【示例】2(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - able_site_transfer。 【JSON字段】store_goods_master.json - data.orderGoodsList - able_site_transfer。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.custom_label_type IS '【说明】维度字段,用于补充维度属性。 【示例】2(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - custom_label_type。 【JSON字段】store_goods_master.json - data.orderGoodsList - custom_label_type。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.option_required IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - option_required。 【JSON字段】store_goods_master.json - data.orderGoodsList - option_required。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.remark IS '【说明】维度字段,用于补充维度属性。 【示例】NULL(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - remark。 【JSON字段】store_goods_master.json - data.orderGoodsList - remark。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.sort_order IS '【说明】维度字段,用于补充维度属性。 【示例】100(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - sort。 【JSON字段】store_goods_master.json - data.orderGoodsList - sort。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】store_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】store_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】store_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】store_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS dim_goods_category (
+ category_id BIGINT,
+ tenant_id BIGINT,
+ category_name VARCHAR(50),
+ alias_name VARCHAR(50),
+ parent_category_id BIGINT,
+ business_name VARCHAR(50),
+ tenant_goods_business_id BIGINT,
+ category_level INTEGER,
+ is_leaf INTEGER,
+ open_salesman INTEGER,
+ sort_order INTEGER,
+ is_warehousing INTEGER,
+ SCD2_start_time TIMESTAMPTZ,
+ SCD2_end_time TIMESTAMPTZ,
+ SCD2_is_current INT,
+ SCD2_version INT,
+ PRIMARY KEY (category_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dim_goods_category IS 'DWD 维度表:dim_goods_category。ODS 来源表:billiards_ods.stock_goods_category_tree(对应 JSON:stock_goods_category_tree.json;分析:stock_goods_category_tree-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dim_goods_category.category_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683528350533(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】stock_goods_category_tree - id。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - id。';
+COMMENT ON COLUMN billiards_dwd.dim_goods_category.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】stock_goods_category_tree - tenant_id。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - tenant_id。';
+COMMENT ON COLUMN billiards_dwd.dim_goods_category.category_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】槟榔(名称字段,用于展示与辅助识别)。 【ODS来源】stock_goods_category_tree - category_name。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - category_name。';
+COMMENT ON COLUMN billiards_dwd.dim_goods_category.alias_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】stock_goods_category_tree - alias_name。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - alias_name。';
+COMMENT ON COLUMN billiards_dwd.dim_goods_category.parent_category_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】stock_goods_category_tree - pid。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - pid。';
+COMMENT ON COLUMN billiards_dwd.dim_goods_category.business_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】槟榔(名称字段,用于展示与辅助识别)。 【ODS来源】stock_goods_category_tree - business_name。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - business_name。';
+COMMENT ON COLUMN billiards_dwd.dim_goods_category.tenant_goods_business_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683528317766(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】stock_goods_category_tree - tenant_goods_business_id。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - tenant_goods_business_id。';
+COMMENT ON COLUMN billiards_dwd.dim_goods_category.category_level IS '【说明】维度字段,用于补充维度属性。 【示例】NULL(维度字段,用于补充维度属性)。 【ODS来源】stock_goods_category_tree - CASE WHEN pid = 0 THEN 1 ELSE 2 END。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - CASE WHEN pid = 0 THEN 1 ELSE 2 END。';
+COMMENT ON COLUMN billiards_dwd.dim_goods_category.is_leaf IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】NULL(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】stock_goods_category_tree - CASE WHEN categoryboxes IS NULL OR jsonb_array_length(categoryboxes)=0 THEN 1 ELSE 0 END。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - CASE WHEN categoryboxes IS NULL OR jsonb_array_length(categoryboxes)=0 THEN 1 ELSE 0 END。';
+COMMENT ON COLUMN billiards_dwd.dim_goods_category.open_salesman IS '【说明】维度字段,用于补充维度属性。 【示例】2(维度字段,用于补充维度属性)。 【ODS来源】stock_goods_category_tree - open_salesman。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - open_salesman。';
+COMMENT ON COLUMN billiards_dwd.dim_goods_category.sort_order IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】stock_goods_category_tree - sort。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - sort。';
+COMMENT ON COLUMN billiards_dwd.dim_goods_category.is_warehousing IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】1(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】stock_goods_category_tree - is_warehousing。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - is_warehousing。';
+COMMENT ON COLUMN billiards_dwd.dim_goods_category.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】stock_goods_category_tree - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_goods_category.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】stock_goods_category_tree - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_goods_category.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】stock_goods_category_tree - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_goods_category.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】stock_goods_category_tree - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS dim_groupbuy_package (
+ groupbuy_package_id BIGINT,
+ tenant_id BIGINT,
+ site_id BIGINT,
+ package_name VARCHAR(200),
+ package_template_id BIGINT,
+ selling_price NUMERIC(10,2),
+ coupon_face_value NUMERIC(10,2),
+ duration_seconds INTEGER,
+ start_time TIMESTAMPTZ,
+ end_time TIMESTAMPTZ,
+ table_area_name VARCHAR(100),
+ is_enabled INTEGER,
+ is_delete INTEGER,
+ create_time TIMESTAMPTZ,
+ tenant_table_area_id_list VARCHAR(512),
+ card_type_ids VARCHAR(255),
+ SCD2_start_time TIMESTAMPTZ,
+ SCD2_end_time TIMESTAMPTZ,
+ SCD2_is_current INT,
+ SCD2_version INT,
+ PRIMARY KEY (groupbuy_package_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dim_groupbuy_package IS 'DWD 维度表:dim_groupbuy_package。ODS 来源表:billiards_ods.group_buy_packages(对应 JSON:group_buy_packages.json;分析:group_buy_packages-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.groupbuy_package_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2939215004469573(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_packages - id。 【JSON字段】group_buy_packages.json - data.packageCouponList - id。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_packages - tenant_id。 【JSON字段】group_buy_packages.json - data.packageCouponList - tenant_id。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_packages - site_id。 【JSON字段】group_buy_packages.json - data.packageCouponList - site_id。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.package_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】早场特惠一小时(名称字段,用于展示与辅助识别)。 【ODS来源】group_buy_packages - package_name。 【JSON字段】group_buy_packages.json - data.packageCouponList - package_name。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.package_template_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】1814707240811572(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_packages - package_id。 【JSON字段】group_buy_packages.json - data.packageCouponList - package_id。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.selling_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】group_buy_packages - selling_price。 【JSON字段】group_buy_packages.json - data.packageCouponList - selling_price。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.coupon_face_value IS '【说明】维度字段,用于补充维度属性。 【示例】0.0(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - coupon_money。 【JSON字段】group_buy_packages.json - data.packageCouponList - coupon_money。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.duration_seconds IS '【说明】数量/时长字段,用于统计与计量。 【示例】3600(数量/时长字段,用于统计与计量)。 【ODS来源】group_buy_packages - duration。 【JSON字段】group_buy_packages.json - data.packageCouponList - duration。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.start_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-10-27 00:00:00(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】group_buy_packages - start_time。 【JSON字段】group_buy_packages.json - data.packageCouponList - start_time。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.end_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2026-10-28 00:00:00(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】group_buy_packages - end_time。 【JSON字段】group_buy_packages.json - data.packageCouponList - end_time。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.table_area_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】A区(名称字段,用于展示与辅助识别)。 【ODS来源】group_buy_packages - table_area_name。 【JSON字段】group_buy_packages.json - data.packageCouponList - table_area_name。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.is_enabled IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】1(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】group_buy_packages - is_enabled。 【JSON字段】group_buy_packages.json - data.packageCouponList - is_enabled。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】group_buy_packages - is_delete。 【JSON字段】group_buy_packages.json - data.packageCouponList - is_delete。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-10-27 18:24:09(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】group_buy_packages - create_time。 【JSON字段】group_buy_packages.json - data.packageCouponList - create_time。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.tenant_table_area_id_list IS '【说明】维度字段,用于补充维度属性。 【示例】2791960001957765(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - tenant_table_area_id_list。 【JSON字段】group_buy_packages.json - data.packageCouponList - tenant_table_area_id_list。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.card_type_ids IS '【说明】维度字段,用于补充维度属性。 【示例】0(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - card_type_ids。 【JSON字段】group_buy_packages.json - data.packageCouponList - card_type_ids。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】group_buy_packages - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】group_buy_packages - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】group_buy_packages - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】group_buy_packages - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS dim_groupbuy_package_Ex (
+ groupbuy_package_id BIGINT,
+ site_name VARCHAR(100),
+ usable_count INTEGER,
+ date_type INTEGER,
+ usable_range VARCHAR(255),
+ date_info VARCHAR(255),
+ start_clock VARCHAR(16),
+ end_clock VARCHAR(16),
+ add_start_clock VARCHAR(16),
+ add_end_clock VARCHAR(16),
+ area_tag_type INTEGER,
+ table_area_id BIGINT,
+ tenant_table_area_id BIGINT,
+ table_area_id_list VARCHAR(512),
+ group_type INTEGER,
+ system_group_type INTEGER,
+ package_type INTEGER,
+ effective_status INTEGER,
+ max_selectable_categories INTEGER,
+ creator_name VARCHAR(100),
+ SCD2_start_time TIMESTAMPTZ,
+ SCD2_end_time TIMESTAMPTZ,
+ SCD2_is_current INT,
+ SCD2_version INT,
+ PRIMARY KEY (groupbuy_package_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dim_groupbuy_package_ex IS 'DWD 维度表(扩展字段表):dim_groupbuy_package_ex。ODS 来源表:billiards_ods.group_buy_packages(对应 JSON:group_buy_packages.json;分析:group_buy_packages-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.groupbuy_package_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2939215004469573(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_packages - id。 【JSON字段】group_buy_packages.json - data.packageCouponList - id。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.site_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】朗朗桌球(名称字段,用于展示与辅助识别)。 【ODS来源】group_buy_packages - site_name。 【JSON字段】group_buy_packages.json - data.packageCouponList - site_name。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.usable_count IS '【说明】数量/时长字段,用于统计与计量。 【示例】9999999(数量/时长字段,用于统计与计量)。 【ODS来源】group_buy_packages - usable_count。 【JSON字段】group_buy_packages.json - data.packageCouponList - usable_count。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.date_type IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - date_type。 【JSON字段】group_buy_packages.json - data.packageCouponList - date_type。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.usable_range IS '【说明】维度字段,用于补充维度属性。 【示例】NULL(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - usable_range。 【JSON字段】group_buy_packages.json - data.packageCouponList - usable_range。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.date_info IS '【说明】维度字段,用于补充维度属性。 【示例】0(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - date_info。 【JSON字段】group_buy_packages.json - data.packageCouponList - date_info。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.start_clock IS '【说明】维度字段,用于补充维度属性。 【示例】00:00:00(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - start_clock。 【JSON字段】group_buy_packages.json - data.packageCouponList - start_clock。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.end_clock IS '【说明】维度字段,用于补充维度属性。 【示例】1.00:00:00(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - end_clock。 【JSON字段】group_buy_packages.json - data.packageCouponList - end_clock。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.add_start_clock IS '【说明】维度字段,用于补充维度属性。 【示例】00:00:00(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - add_start_clock。 【JSON字段】group_buy_packages.json - data.packageCouponList - add_start_clock。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.add_end_clock IS '【说明】维度字段,用于补充维度属性。 【示例】1.00:00:00(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - add_end_clock。 【JSON字段】group_buy_packages.json - data.packageCouponList - add_end_clock。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.area_tag_type IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - area_tag_type。 【JSON字段】group_buy_packages.json - data.packageCouponList - area_tag_type。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.table_area_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_packages - table_area_id。 【JSON字段】group_buy_packages.json - data.packageCouponList - table_area_id。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.tenant_table_area_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_packages - tenant_table_area_id。 【JSON字段】group_buy_packages.json - data.packageCouponList - tenant_table_area_id。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.table_area_id_list IS '【说明】维度字段,用于补充维度属性。 【示例】NULL(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - table_area_id_list。 【JSON字段】group_buy_packages.json - data.packageCouponList - table_area_id_list。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.group_type IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - group_type。 【JSON字段】group_buy_packages.json - data.packageCouponList - group_type。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.system_group_type IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - system_group_type。 【JSON字段】group_buy_packages.json - data.packageCouponList - system_group_type。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.package_type IS '【说明】维度字段,用于补充维度属性。 【示例】2(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - type。 【JSON字段】group_buy_packages.json - data.packageCouponList - type。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.effective_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】group_buy_packages - effective_status。 【JSON字段】group_buy_packages.json - data.packageCouponList - effective_status。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.max_selectable_categories IS '【说明】维度字段,用于补充维度属性。 【示例】0(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - max_selectable_categories。 【JSON字段】group_buy_packages.json - data.packageCouponList - max_selectable_categories。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.creator_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】店长:郑丽珊(名称字段,用于展示与辅助识别)。 【ODS来源】group_buy_packages - creator_name。 【JSON字段】group_buy_packages.json - data.packageCouponList - creator_name。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】group_buy_packages - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】group_buy_packages - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】group_buy_packages - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】group_buy_packages - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。';
+
+
+CREATE TABLE IF NOT EXISTS dwd_settlement_head (
+ order_settle_id BIGINT,
+ tenant_id BIGINT,
+ site_id BIGINT,
+ site_name VARCHAR(100),
+ table_id BIGINT,
+ settle_name VARCHAR(100),
+ order_trade_no BIGINT,
+ create_time TIMESTAMPTZ,
+ pay_time TIMESTAMPTZ,
+ settle_type INTEGER,
+ revoke_order_id BIGINT,
+ member_id BIGINT,
+ member_name VARCHAR(100),
+ member_phone VARCHAR(50),
+ member_card_account_id BIGINT,
+ member_card_type_name VARCHAR(100),
+ is_bind_member BOOLEAN,
+ member_discount_amount NUMERIC(18,2),
+ consume_money NUMERIC(18,2),
+ table_charge_money NUMERIC(18,2),
+ goods_money NUMERIC(18,2),
+ real_goods_money NUMERIC(18,2),
+ assistant_pd_money NUMERIC(18,2),
+ assistant_cx_money NUMERIC(18,2),
+ adjust_amount NUMERIC(18,2),
+ pay_amount NUMERIC(18,2),
+ balance_amount NUMERIC(18,2),
+ recharge_card_amount NUMERIC(18,2),
+ gift_card_amount NUMERIC(18,2),
+ coupon_amount NUMERIC(18,2),
+ rounding_amount NUMERIC(18,2),
+ point_amount NUMERIC(18,2),
+ PRIMARY KEY (order_settle_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dwd_settlement_head IS 'DWD 明细事实表:dwd_settlement_head。ODS 来源表:billiards_ods.settlement_records(对应 JSON:settlement_records.json;分析:settlement_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.order_settle_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】settlement_records - id。 【JSON字段】settlement_records.json - $ - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】settlement_records - tenantid。 【JSON字段】settlement_records.json - $ - tenantid。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】settlement_records - siteid。 【JSON字段】settlement_records.json - $ - siteid。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.site_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】settlement_records - sitename。 【JSON字段】settlement_records.json - $ - sitename。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】settlement_records - tableid。 【JSON字段】settlement_records.json - $ - tableid。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.settle_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】settlement_records - settlename。 【JSON字段】settlement_records.json - $ - settlename。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.order_trade_no IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】settlement_records - settlerelateid。 【JSON字段】settlement_records.json - $ - settlerelateid。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】NULL(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】settlement_records - createtime。 【JSON字段】settlement_records.json - $ - createtime。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.pay_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】NULL(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】settlement_records - paytime。 【JSON字段】settlement_records.json - $ - paytime。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.settle_type IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】settlement_records - settletype。 【JSON字段】settlement_records.json - $ - settletype。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.revoke_order_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】settlement_records - revokeorderid。 【JSON字段】settlement_records.json - $ - revokeorderid。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】settlement_records - memberid。 【JSON字段】settlement_records.json - $ - memberid。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.member_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】settlement_records - membername。 【JSON字段】settlement_records.json - $ - membername。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.member_phone IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】settlement_records - memberphone。 【JSON字段】settlement_records.json - $ - memberphone。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.member_card_account_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】settlement_records - tenantmembercardid。 【JSON字段】settlement_records.json - $ - tenantmembercardid。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.member_card_type_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】settlement_records - membercardtypename。 【JSON字段】settlement_records.json - $ - membercardtypename。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.is_bind_member IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】NULL(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】settlement_records - isbindmember。 【JSON字段】settlement_records.json - $ - isbindmember。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.member_discount_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - memberdiscountamount。 【JSON字段】settlement_records.json - $ - memberdiscountamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.consume_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - consumemoney。 【JSON字段】settlement_records.json - $ - consumemoney。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.table_charge_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - tablechargemoney。 【JSON字段】settlement_records.json - $ - tablechargemoney。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.goods_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - goodsmoney。 【JSON字段】settlement_records.json - $ - goodsmoney。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.real_goods_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - realgoodsmoney。 【JSON字段】settlement_records.json - $ - realgoodsmoney。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.assistant_pd_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - assistantpdmoney。 【JSON字段】settlement_records.json - $ - assistantpdmoney。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.assistant_cx_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - assistantcxmoney。 【JSON字段】settlement_records.json - $ - assistantcxmoney。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.adjust_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - adjustamount。 【JSON字段】settlement_records.json - $ - adjustamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.pay_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - payamount。 【JSON字段】settlement_records.json - $ - payamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.balance_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - balanceamount。 【JSON字段】settlement_records.json - $ - balanceamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.recharge_card_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - rechargecardamount。 【JSON字段】settlement_records.json - $ - rechargecardamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.gift_card_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - giftcardamount。 【JSON字段】settlement_records.json - $ - giftcardamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.coupon_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - couponamount。 【JSON字段】settlement_records.json - $ - couponamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.rounding_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - roundingamount。 【JSON字段】settlement_records.json - $ - roundingamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.point_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - pointamount。 【JSON字段】settlement_records.json - $ - pointamount。';
+
+
+CREATE TABLE IF NOT EXISTS dwd_settlement_head_Ex (
+ order_settle_id BIGINT,
+ serial_number INTEGER,
+ settle_status INTEGER,
+ can_be_revoked BOOLEAN,
+ revoke_order_name VARCHAR(100),
+ revoke_time TIMESTAMPTZ,
+ is_first_order BOOLEAN,
+ service_money NUMERIC(18,2),
+ cash_amount NUMERIC(18,2),
+ card_amount NUMERIC(18,2),
+ online_amount NUMERIC(18,2),
+ refund_amount NUMERIC(18,2),
+ prepay_money NUMERIC(18,2),
+ payment_method INTEGER,
+ coupon_sale_amount NUMERIC(18,2),
+ all_coupon_discount NUMERIC(18,2),
+ goods_promotion_money NUMERIC(18,2),
+ assistant_promotion_money NUMERIC(18,2),
+ activity_discount NUMERIC(18,2),
+ assistant_manual_discount NUMERIC(18,2),
+ point_discount_price NUMERIC(18,2),
+ point_discount_cost NUMERIC(18,2),
+ is_use_coupon BOOLEAN,
+ is_use_discount BOOLEAN,
+ is_activity BOOLEAN,
+ operator_name VARCHAR(100),
+ salesman_name VARCHAR(100),
+ order_remark VARCHAR(255),
+ operator_id BIGINT,
+ salesman_user_id BIGINT,
+ PRIMARY KEY (order_settle_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dwd_settlement_head_ex IS 'DWD 明细事实表(扩展字段表):dwd_settlement_head_ex。ODS 来源表:billiards_ods.settlement_records(对应 JSON:settlement_records.json;分析:settlement_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.order_settle_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】settlement_records - id。 【JSON字段】settlement_records.json - $ - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.serial_number IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】settlement_records - serialnumber。 【JSON字段】settlement_records.json - $ - serialnumber。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.settle_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】NULL(状态枚举字段,用于标识业务状态)。 【ODS来源】settlement_records - settlestatus。 【JSON字段】settlement_records.json - $ - settlestatus。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.can_be_revoked IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】NULL(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】settlement_records - canberevoked(派生:BOOLEAN(canberevoked))。 【JSON字段】settlement_records.json - $ - canberevoked(派生:BOOLEAN(canberevoked))。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.revoke_order_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】settlement_records - revokeordername。 【JSON字段】settlement_records.json - $ - revokeordername。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.revoke_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】NULL(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】settlement_records - revoketime。 【JSON字段】settlement_records.json - $ - revoketime。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.is_first_order IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】NULL(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】settlement_records - isfirst(派生:BOOLEAN(isfirst))。 【JSON字段】settlement_records.json - $ - isfirst(派生:BOOLEAN(isfirst))。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.service_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - servicemoney。 【JSON字段】settlement_records.json - $ - servicemoney。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.cash_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - cashamount。 【JSON字段】settlement_records.json - $ - cashamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.card_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - cardamount。 【JSON字段】settlement_records.json - $ - cardamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.online_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - onlineamount。 【JSON字段】settlement_records.json - $ - onlineamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.refund_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - refundamount。 【JSON字段】settlement_records.json - $ - refundamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.prepay_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - prepaymoney。 【JSON字段】settlement_records.json - $ - prepaymoney。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.payment_method IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】settlement_records - paymentmethod。 【JSON字段】settlement_records.json - $ - paymentmethod。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.coupon_sale_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - couponsaleamount。 【JSON字段】settlement_records.json - $ - couponsaleamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.all_coupon_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】settlement_records - allcoupondiscount。 【JSON字段】settlement_records.json - $ - allcoupondiscount。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.goods_promotion_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - goodspromotionmoney。 【JSON字段】settlement_records.json - $ - goodspromotionmoney。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.assistant_promotion_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - assistantpromotionmoney。 【JSON字段】settlement_records.json - $ - assistantpromotionmoney。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.activity_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】settlement_records - activitydiscount。 【JSON字段】settlement_records.json - $ - activitydiscount。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.assistant_manual_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】settlement_records - assistantmanualdiscount。 【JSON字段】settlement_records.json - $ - assistantmanualdiscount。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.point_discount_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - pointdiscountprice。 【JSON字段】settlement_records.json - $ - pointdiscountprice。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.point_discount_cost IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - pointdiscountcost。 【JSON字段】settlement_records.json - $ - pointdiscountcost。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.is_use_coupon IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】NULL(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】settlement_records - isusecoupon(派生:BOOLEAN(isusecoupon))。 【JSON字段】settlement_records.json - $ - isusecoupon(派生:BOOLEAN(isusecoupon))。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.is_use_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】settlement_records - isusediscount(派生:BOOLEAN(isusediscount))。 【JSON字段】settlement_records.json - $ - isusediscount(派生:BOOLEAN(isusediscount))。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.is_activity IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】NULL(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】settlement_records - isactivity(派生:BOOLEAN(isactivity))。 【JSON字段】settlement_records.json - $ - isactivity(派生:BOOLEAN(isactivity))。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.operator_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】settlement_records - operatorname。 【JSON字段】settlement_records.json - $ - operatorname。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.salesman_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】settlement_records - salesmanname。 【JSON字段】settlement_records.json - $ - salesmanname。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.order_remark IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】settlement_records - orderremark。 【JSON字段】settlement_records.json - $ - orderremark。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.operator_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】settlement_records - operatorid。 【JSON字段】settlement_records.json - $ - operatorid。';
+COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.salesman_user_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】settlement_records - salesmanuserid。 【JSON字段】settlement_records.json - $ - salesmanuserid。';
+
+
+CREATE TABLE IF NOT EXISTS dwd_table_fee_log (
+ table_fee_log_id BIGINT,
+ order_trade_no BIGINT,
+ order_settle_id BIGINT,
+ order_pay_id BIGINT,
+ tenant_id BIGINT,
+ site_id BIGINT,
+ site_table_id BIGINT,
+ site_table_area_id BIGINT,
+ site_table_area_name VARCHAR(64),
+ tenant_table_area_id BIGINT,
+ member_id BIGINT,
+ ledger_name VARCHAR(64),
+ ledger_unit_price NUMERIC(18,2),
+ ledger_count INTEGER,
+ ledger_amount NUMERIC(18,2),
+ real_table_charge_money NUMERIC(18,2),
+ coupon_promotion_amount NUMERIC(18,2),
+ member_discount_amount NUMERIC(18,2),
+ adjust_amount NUMERIC(18,2),
+ real_table_use_seconds INTEGER,
+ add_clock_seconds INTEGER,
+ start_use_time TIMESTAMPTZ,
+ ledger_end_time TIMESTAMPTZ,
+ create_time TIMESTAMPTZ,
+ ledger_status INTEGER,
+ is_single_order INTEGER,
+ is_delete INTEGER,
+ PRIMARY KEY (table_fee_log_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dwd_table_fee_log IS 'DWD 明细事实表:dwd_table_fee_log。ODS 来源表:billiards_ods.table_fee_transactions(对应 JSON:table_fee_transactions.json;分析:table_fee_transactions-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.table_fee_log_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957924029058885(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.order_trade_no IS '【说明】明细字段,用于记录事实取值。 【示例】2957858167230149(明细字段,用于记录事实取值)。 【ODS来源】table_fee_transactions - order_trade_no。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - order_trade_no。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.order_settle_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957922914357125(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - order_settle_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - order_settle_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.order_pay_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - order_pay_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - order_pay_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - tenant_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - tenant_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - site_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.site_table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793003705192517(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - site_table_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_table_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.site_table_area_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791963794329671(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - site_table_area_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_table_area_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.site_table_area_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】A区(名称字段,用于展示与辅助识别)。 【ODS来源】table_fee_transactions - site_table_area_name。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_table_area_name。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.tenant_table_area_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791960001957765(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - tenant_table_area_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - tenant_table_area_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - member_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - member_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.ledger_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】A17(名称字段,用于展示与辅助识别)。 【ODS来源】table_fee_transactions - ledger_name。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_name。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.ledger_unit_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】48.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】table_fee_transactions - ledger_unit_price。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_unit_price。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.ledger_count IS '【说明】数量/时长字段,用于统计与计量。 【示例】3600(数量/时长字段,用于统计与计量)。 【ODS来源】table_fee_transactions - ledger_count。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_count。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.ledger_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】48.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】table_fee_transactions - ledger_amount。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_amount。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.real_table_charge_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】table_fee_transactions - real_table_charge_money。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - real_table_charge_money。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.coupon_promotion_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】48.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】table_fee_transactions - coupon_promotion_amount。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - coupon_promotion_amount。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.member_discount_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】table_fee_transactions - member_discount_amount。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - member_discount_amount。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.adjust_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】table_fee_transactions - adjust_amount。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - adjust_amount。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.real_table_use_seconds IS '【说明】数量/时长字段,用于统计与计量。 【示例】3600(数量/时长字段,用于统计与计量)。 【ODS来源】table_fee_transactions - real_table_use_seconds。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - real_table_use_seconds。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.add_clock_seconds IS '【说明】数量/时长字段,用于统计与计量。 【示例】0(数量/时长字段,用于统计与计量)。 【ODS来源】table_fee_transactions - add_clock_seconds。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - add_clock_seconds。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.start_use_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 22:28:57(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】table_fee_transactions - start_use_time。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - start_use_time。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.ledger_end_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:28:57(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】table_fee_transactions - ledger_end_time。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_end_time。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:35:57(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】table_fee_transactions - create_time。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - create_time。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.ledger_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】table_fee_transactions - ledger_status。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_status。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.is_single_order IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】1(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】table_fee_transactions - is_single_order。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - is_single_order。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】table_fee_transactions - is_delete。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - is_delete。';
+
+
+CREATE TABLE IF NOT EXISTS dwd_table_fee_log_Ex (
+ table_fee_log_id BIGINT,
+ operator_name VARCHAR(64),
+ salesman_name VARCHAR(64),
+ used_card_amount NUMERIC(18,2),
+ service_money NUMERIC(18,2),
+ mgmt_fee NUMERIC(18,2),
+ fee_total NUMERIC(18,2),
+ ledger_start_time TIMESTAMPTZ,
+ last_use_time TIMESTAMPTZ,
+ operator_id BIGINT,
+ salesman_user_id BIGINT,
+ salesman_org_id BIGINT,
+ PRIMARY KEY (table_fee_log_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dwd_table_fee_log_ex IS 'DWD 明细事实表(扩展字段表):dwd_table_fee_log_ex。ODS 来源表:billiards_ods.table_fee_transactions(对应 JSON:table_fee_transactions.json;分析:table_fee_transactions-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.table_fee_log_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957924029058885(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.operator_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】收银员:郑丽珊(名称字段,用于展示与辅助识别)。 【ODS来源】table_fee_transactions - operator_name。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - operator_name。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.salesman_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】table_fee_transactions - salesman_name。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - salesman_name。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.used_card_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】table_fee_transactions - used_card_amount。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - used_card_amount。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.service_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】table_fee_transactions - service_money。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - service_money。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.mgmt_fee IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】table_fee_transactions - mgmt_fee。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - mgmt_fee。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.fee_total IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】table_fee_transactions - fee_total。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - fee_total。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.ledger_start_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 22:28:57(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】table_fee_transactions - ledger_start_time。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_start_time。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.last_use_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:28:57(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】table_fee_transactions - last_use_time。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - last_use_time。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.operator_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790687322443013(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - operator_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - operator_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.salesman_user_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - salesman_user_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - salesman_user_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.salesman_org_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - salesman_org_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - salesman_org_id。';
+
+
+CREATE TABLE IF NOT EXISTS dwd_table_fee_adjust (
+ table_fee_adjust_id BIGINT,
+ order_trade_no BIGINT,
+ order_settle_id BIGINT,
+ tenant_id BIGINT,
+ site_id BIGINT,
+ table_id BIGINT,
+ table_area_id BIGINT,
+ table_area_name VARCHAR(64),
+ tenant_table_area_id BIGINT,
+ ledger_amount NUMERIC(18,2),
+ ledger_status INTEGER,
+ is_delete INTEGER,
+ adjust_time TIMESTAMPTZ,
+ PRIMARY KEY (table_fee_adjust_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dwd_table_fee_adjust IS 'DWD 明细事实表:dwd_table_fee_adjust。ODS 来源表:billiards_ods.table_fee_discount_records(对应 JSON:table_fee_discount_records.json;分析:table_fee_discount_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.table_fee_adjust_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957913441881989(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_discount_records - id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.order_trade_no IS '【说明】明细字段,用于记录事实取值。 【示例】2957784612605829(明细字段,用于记录事实取值)。 【ODS来源】table_fee_discount_records - order_trade_no。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - order_trade_no。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.order_settle_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957913171693253(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_discount_records - order_settle_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - order_settle_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_discount_records - tenant_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - tenant_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_discount_records - site_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - site_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793020259897413(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_discount_records - site_table_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - site_table_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.table_area_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791961347968901(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_discount_records - tenant_table_area_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - tenant_table_area_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.table_area_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】table_fee_discount_records - tableprofile.table_area_name。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - tableprofile.table_area_name。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.tenant_table_area_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791961347968901(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_discount_records - tenant_table_area_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - tenant_table_area_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.ledger_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】148.15(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】table_fee_discount_records - ledger_amount。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - ledger_amount。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.ledger_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】table_fee_discount_records - ledger_status。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - ledger_status。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】table_fee_discount_records - is_delete。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - is_delete。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.adjust_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:25:11(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】table_fee_discount_records - create_time。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - create_time。';
+
+
+CREATE TABLE IF NOT EXISTS dwd_table_fee_adjust_Ex (
+ table_fee_adjust_id BIGINT,
+ adjust_type INTEGER,
+ ledger_count INTEGER,
+ ledger_name VARCHAR(128),
+ applicant_name VARCHAR(64),
+ operator_name VARCHAR(64),
+ applicant_id BIGINT,
+ operator_id BIGINT,
+ PRIMARY KEY (table_fee_adjust_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dwd_table_fee_adjust_ex IS 'DWD 明细事实表(扩展字段表):dwd_table_fee_adjust_ex。ODS 来源表:billiards_ods.table_fee_discount_records(对应 JSON:table_fee_discount_records.json;分析:table_fee_discount_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.table_fee_adjust_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957913441881989(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_discount_records - id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.adjust_type IS '【说明】明细字段,用于记录事实取值。 【示例】1(明细字段,用于记录事实取值)。 【ODS来源】table_fee_discount_records - adjust_type。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - adjust_type。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.ledger_count IS '【说明】数量/时长字段,用于统计与计量。 【示例】1(数量/时长字段,用于统计与计量)。 【ODS来源】table_fee_discount_records - ledger_count。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - ledger_count。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.ledger_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】table_fee_discount_records - ledger_name。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - ledger_name。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.applicant_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】收银员:郑丽珊(名称字段,用于展示与辅助识别)。 【ODS来源】table_fee_discount_records - applicant_name。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - applicant_name。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.operator_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】收银员:郑丽珊(名称字段,用于展示与辅助识别)。 【ODS来源】table_fee_discount_records - operator_name。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - operator_name。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.applicant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790687322443013(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_discount_records - applicant_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - applicant_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.operator_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790687322443013(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_discount_records - operator_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - operator_id。';
+
+
+CREATE TABLE IF NOT EXISTS dwd_store_goods_sale (
+ store_goods_sale_id BIGINT,
+ order_trade_no BIGINT,
+ order_settle_id BIGINT,
+ order_pay_id BIGINT,
+ order_goods_id BIGINT,
+ site_id BIGINT,
+ tenant_id BIGINT,
+ site_goods_id BIGINT,
+ tenant_goods_id BIGINT,
+ tenant_goods_category_id BIGINT,
+ tenant_goods_business_id BIGINT,
+ site_table_id BIGINT,
+ ledger_name VARCHAR(200),
+ ledger_group_name VARCHAR(100),
+ ledger_unit_price NUMERIC(18,2),
+ ledger_count INTEGER,
+ ledger_amount NUMERIC(18,2),
+ discount_price NUMERIC(18,2),
+ real_goods_money NUMERIC(18,2),
+ cost_money NUMERIC(18,2),
+ ledger_status INTEGER,
+ is_delete INTEGER,
+ create_time TIMESTAMPTZ,
+ PRIMARY KEY (store_goods_sale_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dwd_store_goods_sale IS 'DWD 明细事实表:dwd_store_goods_sale。ODS 来源表:billiards_ods.store_goods_sales_records(对应 JSON:store_goods_sales_records.json;分析:store_goods_sales_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.store_goods_sale_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957924029550406(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.order_trade_no IS '【说明】明细字段,用于记录事实取值。 【示例】2957858167230149(明细字段,用于记录事实取值)。 【ODS来源】store_goods_sales_records - order_trade_no。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_trade_no。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.order_settle_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957922914357125(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - order_settle_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_settle_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.order_pay_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - order_pay_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_pay_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.order_goods_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957858456391557(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - order_goods_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_goods_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - site_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - site_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - tenant_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - tenant_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.site_goods_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793026176012357(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - site_goods_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - site_goods_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.tenant_goods_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2792115932417925(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - tenant_goods_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - tenant_goods_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.tenant_goods_category_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683528350540(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - tenant_goods_category_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - tenant_goods_category_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.tenant_goods_business_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683528317768(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - tenant_goods_business_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - tenant_goods_business_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.site_table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793003705192517(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - site_table_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - site_table_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.ledger_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】哇哈哈矿泉水(名称字段,用于展示与辅助识别)。 【ODS来源】store_goods_sales_records - ledger_name。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_name。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.ledger_group_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】酒水(名称字段,用于展示与辅助识别)。 【ODS来源】store_goods_sales_records - ledger_group_name。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_group_name。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.ledger_unit_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】5.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - ledger_unit_price。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_unit_price。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.ledger_count IS '【说明】数量/时长字段,用于统计与计量。 【示例】1(数量/时长字段,用于统计与计量)。 【ODS来源】store_goods_sales_records - ledger_count。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_count。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.ledger_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】5.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - ledger_amount。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_amount。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.discount_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - discount_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - discount_money。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.real_goods_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】5.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - real_goods_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - real_goods_money。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.cost_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.01(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - cost_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - cost_money。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.ledger_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】store_goods_sales_records - ledger_status。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_status。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】store_goods_sales_records - is_delete。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - is_delete。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:35:57(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】store_goods_sales_records - create_time。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - create_time。';
+
+
+CREATE TABLE IF NOT EXISTS dwd_store_goods_sale_Ex (
+ store_goods_sale_id BIGINT,
+ legacy_order_goods_id BIGINT,
+ site_name TEXT,
+ legacy_site_id BIGINT,
+ goods_remark TEXT,
+ option_value_name TEXT,
+ operator_name TEXT,
+ open_salesman_flag INTEGER,
+ salesman_user_id BIGINT,
+ salesman_name TEXT,
+ salesman_role_id BIGINT,
+ salesman_org_id BIGINT,
+ discount_money NUMERIC(18,2),
+ returns_number INTEGER,
+ coupon_deduct_money NUMERIC(18,2),
+ member_discount_amount NUMERIC(18,2),
+ point_discount_money NUMERIC(18,2),
+ point_discount_money_cost NUMERIC(18,2),
+ package_coupon_id BIGINT,
+ order_coupon_id BIGINT,
+ member_coupon_id BIGINT,
+ option_price NUMERIC(18,2),
+ option_member_discount_money NUMERIC(18,2),
+ option_coupon_deduct_money NUMERIC(18,2),
+ push_money NUMERIC(18,2),
+ is_single_order INTEGER,
+ sales_type INTEGER,
+ operator_id BIGINT,
+ PRIMARY KEY (store_goods_sale_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dwd_store_goods_sale_ex IS 'DWD 明细事实表(扩展字段表):dwd_store_goods_sale_ex。ODS 来源表:billiards_ods.store_goods_sales_records(对应 JSON:store_goods_sales_records.json;分析:store_goods_sales_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.store_goods_sale_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957924029550406(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.legacy_order_goods_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957858456391557(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - order_goods_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_goods_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.site_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】朗朗桌球(名称字段,用于展示与辅助识别)。 【ODS来源】store_goods_sales_records - siteName。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - siteName。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.legacy_site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - site_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - site_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.goods_remark IS '【说明】明细字段,用于记录事实取值。 【示例】哇哈哈矿泉水(明细字段,用于记录事实取值)。 【ODS来源】store_goods_sales_records - goods_remark。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - goods_remark。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.option_value_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】store_goods_sales_records - option_value_name。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - option_value_name。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.operator_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】收银员:郑丽珊(名称字段,用于展示与辅助识别)。 【ODS来源】store_goods_sales_records - operator_name。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - operator_name。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.open_salesman_flag IS '【说明】明细字段,用于记录事实取值。 【示例】2(明细字段,用于记录事实取值)。 【ODS来源】store_goods_sales_records - openSalesman。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - openSalesman。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.salesman_user_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - salesman_user_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - salesman_user_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.salesman_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】store_goods_sales_records - salesman_name。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - salesman_name。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.salesman_role_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - salesman_role_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - salesman_role_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.salesman_org_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - sales_man_org_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - sales_man_org_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.discount_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - discount_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - discount_money。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.returns_number IS '【说明】数量/时长字段,用于统计与计量。 【示例】0(数量/时长字段,用于统计与计量)。 【ODS来源】store_goods_sales_records - returns_number。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - returns_number。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.coupon_deduct_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - coupon_deduct_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - coupon_deduct_money。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.member_discount_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - member_discount_amount。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - member_discount_amount。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.point_discount_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - point_discount_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - point_discount_money。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.point_discount_money_cost IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - point_discount_money_cost。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - point_discount_money_cost。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.package_coupon_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - package_coupon_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - package_coupon_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.order_coupon_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - order_coupon_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_coupon_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.member_coupon_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - member_coupon_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - member_coupon_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.option_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - option_price。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - option_price。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.option_member_discount_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - option_member_discount_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - option_member_discount_money。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.option_coupon_deduct_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - option_coupon_deduct_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - option_coupon_deduct_money。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.push_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - push_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - push_money。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.is_single_order IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】1(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】store_goods_sales_records - is_single_order。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - is_single_order。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.sales_type IS '【说明】明细字段,用于记录事实取值。 【示例】1(明细字段,用于记录事实取值)。 【ODS来源】store_goods_sales_records - sales_type。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - sales_type。';
+COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.operator_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790687322443013(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - operator_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - operator_id。';
+
+
+CREATE TABLE IF NOT EXISTS dwd_assistant_service_log (
+ assistant_service_id BIGINT,
+ order_trade_no BIGINT,
+ order_settle_id BIGINT,
+ order_pay_id BIGINT,
+ order_assistant_id BIGINT,
+ order_assistant_type INTEGER,
+ tenant_id BIGINT,
+ site_id BIGINT,
+ site_table_id BIGINT,
+ tenant_member_id BIGINT,
+ system_member_id BIGINT,
+ assistant_no VARCHAR(64),
+ nickname VARCHAR(64),
+ site_assistant_id BIGINT,
+ user_id BIGINT,
+ assistant_team_id BIGINT,
+ person_org_id BIGINT,
+ assistant_level INTEGER,
+ level_name VARCHAR(64),
+ skill_id BIGINT,
+ skill_name VARCHAR(64),
+ ledger_unit_price NUMERIC(10,2),
+ ledger_amount NUMERIC(10,2),
+ projected_income NUMERIC(10,2),
+ coupon_deduct_money NUMERIC(10,2),
+ income_seconds INTEGER,
+ real_use_seconds INTEGER,
+ add_clock INTEGER,
+ create_time TIMESTAMPTZ,
+ start_use_time TIMESTAMPTZ,
+ last_use_time TIMESTAMPTZ,
+ is_delete INTEGER,
+ PRIMARY KEY (assistant_service_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dwd_assistant_service_log IS 'DWD 明细事实表:dwd_assistant_service_log。ODS 来源表:billiards_ods.assistant_service_records(对应 JSON:assistant_service_records.json;分析:assistant_service_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.assistant_service_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957913441292165(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.order_trade_no IS '【说明】明细字段,用于记录事实取值。 【示例】2957784612605829(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - order_trade_no。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_trade_no。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.order_settle_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957913171693253(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - order_settle_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_settle_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.order_pay_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - order_pay_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_pay_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.order_assistant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957788717240005(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - order_assistant_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_assistant_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.order_assistant_type IS '【说明】明细字段,用于记录事实取值。 【示例】1(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - order_assistant_type。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_assistant_type。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - tenant_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - tenant_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - site_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - site_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.site_table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793020259897413(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - site_table_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - site_table_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.tenant_member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - tenant_member_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - tenant_member_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.system_member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - system_member_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - system_member_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.assistant_no IS '【说明】明细字段,用于记录事实取值。 【示例】27(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - assistantNo。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - assistantNo。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.nickname IS '【说明】名称字段,用于展示与辅助识别。 【示例】泡芙(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_service_records - nickname。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - nickname。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.site_assistant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957788717240005(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - order_assistant_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_assistant_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.user_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2946266868976453(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - user_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - user_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.assistant_team_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2792011585884037(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - assistant_team_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - assistant_team_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.person_org_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2946266869336901(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - person_org_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - person_org_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.assistant_level IS '【说明】明细字段,用于记录事实取值。 【示例】10(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - assistant_level。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - assistant_level。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.level_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】初级(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_service_records - levelName。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - levelName。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.skill_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683529513797(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - skill_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - skill_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.skill_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】基础课(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_service_records - skillName。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - skillName。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.ledger_unit_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】98.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】assistant_service_records - ledger_unit_price。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_unit_price。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.ledger_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】206.67(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】assistant_service_records - ledger_amount。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_amount。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.projected_income IS '【说明】明细字段,用于记录事实取值。 【示例】168.0(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - projected_income。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - projected_income。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.coupon_deduct_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】assistant_service_records - coupon_deduct_money。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - coupon_deduct_money。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.income_seconds IS '【说明】数量/时长字段,用于统计与计量。 【示例】7560(数量/时长字段,用于统计与计量)。 【ODS来源】assistant_service_records - income_seconds。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - income_seconds。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.real_use_seconds IS '【说明】数量/时长字段,用于统计与计量。 【示例】7592(数量/时长字段,用于统计与计量)。 【ODS来源】assistant_service_records - real_use_seconds。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - real_use_seconds。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.add_clock IS '【说明】明细字段,用于记录事实取值。 【示例】0(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - add_clock。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - add_clock。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:25:11(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_service_records - create_time。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - create_time。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.start_use_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 21:18:18(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_service_records - start_use_time。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - start_use_time。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.last_use_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:24:50(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_service_records - last_use_time。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - last_use_time。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】assistant_service_records - is_delete。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_delete。';
+
+
+CREATE TABLE IF NOT EXISTS dwd_assistant_service_log_Ex (
+ assistant_service_id BIGINT,
+ table_name VARCHAR(64),
+ assistant_name VARCHAR(64),
+ ledger_name VARCHAR(128),
+ ledger_group_name VARCHAR(128),
+ ledger_count INTEGER,
+ member_discount_amount NUMERIC(10,2),
+ manual_discount_amount NUMERIC(10,2),
+ service_money NUMERIC(10,2),
+ returns_clock INTEGER,
+ ledger_start_time TIMESTAMPTZ,
+ ledger_end_time TIMESTAMPTZ,
+ ledger_status INTEGER,
+ is_confirm INTEGER,
+ is_single_order INTEGER,
+ is_not_responding INTEGER,
+ is_trash INTEGER,
+ trash_applicant_id BIGINT,
+ trash_applicant_name VARCHAR(64),
+ trash_reason VARCHAR(255),
+ salesman_user_id BIGINT,
+ salesman_name VARCHAR(64),
+ salesman_org_id BIGINT,
+ skill_grade INTEGER,
+ service_grade INTEGER,
+ composite_grade NUMERIC(5,2),
+ sum_grade NUMERIC(10,2),
+ get_grade_times INTEGER,
+ grade_status INTEGER,
+ composite_grade_time TIMESTAMPTZ,
+ PRIMARY KEY (assistant_service_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dwd_assistant_service_log_ex IS 'DWD 明细事实表(扩展字段表):dwd_assistant_service_log_ex。ODS 来源表:billiards_ods.assistant_service_records(对应 JSON:assistant_service_records.json;分析:assistant_service_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.assistant_service_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957913441292165(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.table_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】S1(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_service_records - tableName。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - tableName。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.assistant_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】何海婷(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_service_records - assistantName。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - assistantName。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.ledger_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】27-泡芙(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_service_records - ledger_name。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_name。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.ledger_group_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_service_records - ledger_group_name。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_group_name。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.ledger_count IS '【说明】数量/时长字段,用于统计与计量。 【示例】7592(数量/时长字段,用于统计与计量)。 【ODS来源】assistant_service_records - ledger_count。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_count。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.member_discount_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】assistant_service_records - member_discount_amount。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - member_discount_amount。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.manual_discount_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】assistant_service_records - manual_discount_amount。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - manual_discount_amount。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.service_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】assistant_service_records - service_money。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - service_money。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.returns_clock IS '【说明】明细字段,用于记录事实取值。 【示例】0(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - returns_clock。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - returns_clock。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.ledger_start_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 21:18:18(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_service_records - ledger_start_time。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_start_time。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.ledger_end_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:24:50(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_service_records - ledger_end_time。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_end_time。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.ledger_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】assistant_service_records - ledger_status。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_status。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.is_confirm IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】2(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】assistant_service_records - is_confirm。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_confirm。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.is_single_order IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】1(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】assistant_service_records - is_single_order。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_single_order。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.is_not_responding IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】assistant_service_records - is_not_responding。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_not_responding。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.is_trash IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】assistant_service_records - is_trash。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_trash。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.trash_applicant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - trash_applicant_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - trash_applicant_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.trash_applicant_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_service_records - trash_applicant_name。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - trash_applicant_name。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.trash_reason IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - trash_reason。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - trash_reason。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.salesman_user_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - salesman_user_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - salesman_user_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.salesman_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_service_records - salesman_name。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - salesman_name。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.salesman_org_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - salesman_org_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - salesman_org_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.skill_grade IS '【说明】明细字段,用于记录事实取值。 【示例】0(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - skill_grade。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - skill_grade。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.service_grade IS '【说明】明细字段,用于记录事实取值。 【示例】0(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - service_grade。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - service_grade。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.composite_grade IS '【说明】明细字段,用于记录事实取值。 【示例】0.0(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - composite_grade。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - composite_grade。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.sum_grade IS '【说明】明细字段,用于记录事实取值。 【示例】0.0(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - sum_grade。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - sum_grade。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.get_grade_times IS '【说明】明细字段,用于记录事实取值。 【示例】0(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - get_grade_times。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - get_grade_times。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.grade_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】assistant_service_records - grade_status。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - grade_status。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.composite_grade_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】0001-01-01 00:00:00(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_service_records - composite_grade_time。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - composite_grade_time。';
+
+
+CREATE TABLE IF NOT EXISTS dwd_assistant_trash_event (
+ assistant_trash_event_id BIGINT,
+ site_id BIGINT,
+ table_id BIGINT,
+ table_area_id BIGINT,
+ assistant_no VARCHAR(32),
+ assistant_name VARCHAR(64),
+ charge_minutes_raw INTEGER,
+ abolish_amount NUMERIC(18,2),
+ trash_reason VARCHAR(255),
+ create_time TIMESTAMPTZ,
+ PRIMARY KEY (assistant_trash_event_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dwd_assistant_trash_event IS 'DWD 明细事实表:dwd_assistant_trash_event。ODS 来源表:billiards_ods.assistant_cancellation_records(对应 JSON:assistant_cancellation_records.json;分析:assistant_cancellation_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event.assistant_trash_event_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957675849518789(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_cancellation_records - id。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_cancellation_records - siteId。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - siteId。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event.table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793016660660357(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_cancellation_records - tableId。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - tableId。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event.table_area_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791963816579205(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_cancellation_records - tableAreaId。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - tableAreaId。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event.assistant_no IS '【说明】明细字段,用于记录事实取值。 【示例】泡芙(明细字段,用于记录事实取值)。 【ODS来源】assistant_cancellation_records - assistantName。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - assistantName。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event.assistant_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】泡芙(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_cancellation_records - assistantName。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - assistantName。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event.charge_minutes_raw IS '【说明】明细字段,用于记录事实取值。 【示例】214(明细字段,用于记录事实取值)。 【ODS来源】assistant_cancellation_records - pdChargeMinutes。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - pdChargeMinutes。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event.abolish_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】5.83(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】assistant_cancellation_records - assistantAbolishAmount。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - assistantAbolishAmount。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event.trash_reason IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】assistant_cancellation_records - trashReason。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - trashReason。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 19:23:29(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_cancellation_records - createTime。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - createTime。';
+
+
+CREATE TABLE IF NOT EXISTS dwd_assistant_trash_event_Ex (
+ assistant_trash_event_id BIGINT,
+ table_name VARCHAR(64),
+ table_area_name VARCHAR(64),
+ PRIMARY KEY (assistant_trash_event_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dwd_assistant_trash_event_ex IS 'DWD 明细事实表(扩展字段表):dwd_assistant_trash_event_ex。ODS 来源表:billiards_ods.assistant_cancellation_records(对应 JSON:assistant_cancellation_records.json;分析:assistant_cancellation_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event_ex.assistant_trash_event_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957675849518789(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_cancellation_records - id。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event_ex.table_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】C1(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_cancellation_records - tableName。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - tableName。';
+COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event_ex.table_area_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】C区(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_cancellation_records - tableArea。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - tableArea。';
+
+
+CREATE TABLE IF NOT EXISTS dwd_member_balance_change (
+ balance_change_id BIGINT,
+ tenant_id BIGINT,
+ site_id BIGINT,
+ register_site_id BIGINT,
+ tenant_member_id BIGINT,
+ system_member_id BIGINT,
+ tenant_member_card_id BIGINT,
+ card_type_id BIGINT,
+ card_type_name VARCHAR(32),
+ member_name VARCHAR(64),
+ member_mobile VARCHAR(20),
+ balance_before NUMERIC(18,2),
+ change_amount NUMERIC(18,2),
+ balance_after NUMERIC(18,2),
+ from_type INTEGER,
+ payment_method INTEGER,
+ change_time TIMESTAMPTZ,
+ is_delete INTEGER,
+ remark VARCHAR(255),
+ PRIMARY KEY (balance_change_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dwd_member_balance_change IS 'DWD 明细事实表:dwd_member_balance_change。ODS 来源表:billiards_ods.member_balance_changes(对应 JSON:member_balance_changes.json;分析:member_balance_changes-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.balance_change_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957881605869253(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_balance_changes - id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_balance_changes - tenant_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - tenant_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_balance_changes - site_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - site_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.register_site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_balance_changes - register_site_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - register_site_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.tenant_member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2799212845565701(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_balance_changes - tenant_member_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - tenant_member_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.system_member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2799212844549893(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_balance_changes - system_member_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - system_member_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.tenant_member_card_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2799219999295237(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_balance_changes - tenant_member_card_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - tenant_member_card_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.card_type_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793249295533893(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_balance_changes - card_type_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - card_type_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.card_type_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】储值卡(名称字段,用于展示与辅助识别)。 【ODS来源】member_balance_changes - memberCardTypeName。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - memberCardTypeName。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.member_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】曾丹烨(名称字段,用于展示与辅助识别)。 【ODS来源】member_balance_changes - memberName。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - memberName。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.member_mobile IS '【说明】明细字段,用于记录事实取值。 【示例】13922213242(明细字段,用于记录事实取值)。 【ODS来源】member_balance_changes - memberMobile。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - memberMobile。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.balance_before IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】816.3(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_balance_changes - before。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - before。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.change_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】-120.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_balance_changes - account_data。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - account_data。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.balance_after IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】696.3(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_balance_changes - after。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - after。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.from_type IS '【说明】明细字段,用于记录事实取值。 【示例】1(明细字段,用于记录事实取值)。 【ODS来源】member_balance_changes - from_type。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - from_type。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.payment_method IS '【说明】明细字段,用于记录事实取值。 【示例】0(明细字段,用于记录事实取值)。 【ODS来源】member_balance_changes - payment_method。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - payment_method。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.change_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 22:52:48(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】member_balance_changes - create_time。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - create_time。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】member_balance_changes - is_delete。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - is_delete。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.remark IS '【说明】明细字段,用于记录事实取值。 【示例】充值退款(明细字段,用于记录事实取值)。 【ODS来源】member_balance_changes - remark。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - remark。';
+
+
+CREATE TABLE IF NOT EXISTS dwd_member_balance_change_EX (
+ balance_change_id BIGINT,
+ pay_site_name VARCHAR(64),
+ register_site_name VARCHAR(64),
+ refund_amount NUMERIC(18,2),
+ operator_id BIGINT,
+ operator_name VARCHAR(64),
+ PRIMARY KEY (balance_change_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dwd_member_balance_change_ex IS 'DWD 明细事实表(扩展字段表):dwd_member_balance_change_ex。ODS 来源表:billiards_ods.member_balance_changes(对应 JSON:member_balance_changes.json;分析:member_balance_changes-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change_ex.balance_change_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957881605869253(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_balance_changes - id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change_ex.pay_site_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】朗朗桌球(名称字段,用于展示与辅助识别)。 【ODS来源】member_balance_changes - paySiteName。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - paySiteName。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change_ex.register_site_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】朗朗桌球(名称字段,用于展示与辅助识别)。 【ODS来源】member_balance_changes - registerSiteName。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - registerSiteName。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change_ex.refund_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_balance_changes - refund_amount。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - refund_amount。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change_ex.operator_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790687322443013(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_balance_changes - operator_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - operator_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change_ex.operator_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】收银员:郑丽珊(名称字段,用于展示与辅助识别)。 【ODS来源】member_balance_changes - operator_name。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - operator_name。';
+
+
+CREATE TABLE IF NOT EXISTS dwd_groupbuy_redemption (
+ redemption_id BIGINT,
+ tenant_id BIGINT,
+ site_id BIGINT,
+ table_id BIGINT,
+ tenant_table_area_id BIGINT,
+ table_charge_seconds INTEGER,
+ order_trade_no BIGINT,
+ order_settle_id BIGINT,
+ order_coupon_id BIGINT,
+ coupon_origin_id BIGINT,
+ promotion_activity_id BIGINT,
+ promotion_coupon_id BIGINT,
+ order_coupon_channel INTEGER,
+ ledger_unit_price NUMERIC(18,2),
+ ledger_count INTEGER,
+ ledger_amount NUMERIC(18,2),
+ coupon_money NUMERIC(18,2),
+ promotion_seconds INTEGER,
+ coupon_code VARCHAR(64),
+ is_single_order INTEGER,
+ is_delete INTEGER,
+ ledger_name VARCHAR(128),
+ create_time TIMESTAMPTZ,
+ PRIMARY KEY (redemption_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dwd_groupbuy_redemption IS 'DWD 明细事实表:dwd_groupbuy_redemption。ODS 来源表:billiards_ods.group_buy_redemption_records(对应 JSON:group_buy_redemption_records.json;分析:group_buy_redemption_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.redemption_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957924029615941(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - tenant_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - tenant_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - site_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - site_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793003705192517(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - table_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - table_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.tenant_table_area_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791960001957765(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - tenant_table_area_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - tenant_table_area_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.table_charge_seconds IS '【说明】数量/时长字段,用于统计与计量。 【示例】3600(数量/时长字段,用于统计与计量)。 【ODS来源】group_buy_redemption_records - table_charge_seconds。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - table_charge_seconds。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.order_trade_no IS '【说明】明细字段,用于记录事实取值。 【示例】2957858167230149(明细字段,用于记录事实取值)。 【ODS来源】group_buy_redemption_records - order_trade_no。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_trade_no。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.order_settle_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957922914357125(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - order_settle_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_settle_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.order_coupon_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957858168229573(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - order_coupon_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_coupon_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.coupon_origin_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957858168229573(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - coupon_origin_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - coupon_origin_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.promotion_activity_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957858166460101(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - promotion_activity_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - promotion_activity_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.promotion_coupon_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2798727423528005(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - promotion_coupon_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - promotion_coupon_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.order_coupon_channel IS '【说明】明细字段,用于记录事实取值。 【示例】1(明细字段,用于记录事实取值)。 【ODS来源】group_buy_redemption_records - order_coupon_channel。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_coupon_channel。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.ledger_unit_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】29.9(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】group_buy_redemption_records - ledger_unit_price。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_unit_price。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.ledger_count IS '【说明】数量/时长字段,用于统计与计量。 【示例】3600(数量/时长字段,用于统计与计量)。 【ODS来源】group_buy_redemption_records - ledger_count。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_count。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.ledger_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】48.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】group_buy_redemption_records - ledger_amount。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_amount。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.coupon_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】48.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】group_buy_redemption_records - coupon_money。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - coupon_money。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.promotion_seconds IS '【说明】数量/时长字段,用于统计与计量。 【示例】3600(数量/时长字段,用于统计与计量)。 【ODS来源】group_buy_redemption_records - promotion_seconds。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - promotion_seconds。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.coupon_code IS '【说明】明细字段,用于记录事实取值。 【示例】0107892475999(明细字段,用于记录事实取值)。 【ODS来源】group_buy_redemption_records - coupon_code。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - coupon_code。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.is_single_order IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】1(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】group_buy_redemption_records - is_single_order。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - is_single_order。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】group_buy_redemption_records - is_delete。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - is_delete。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.ledger_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】全天A区中八一小时(名称字段,用于展示与辅助识别)。 【ODS来源】group_buy_redemption_records - ledger_name。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_name。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:35:57(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】group_buy_redemption_records - create_time。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - create_time。';
+
+
+CREATE TABLE IF NOT EXISTS dwd_groupbuy_redemption_Ex (
+ redemption_id BIGINT,
+ site_name VARCHAR(64),
+ table_name VARCHAR(64),
+ table_area_name VARCHAR(64),
+ order_pay_id BIGINT,
+ goods_option_price NUMERIC(18,2),
+ goods_promotion_money NUMERIC(18,2),
+ table_service_promotion_money NUMERIC(18,2),
+ assistant_promotion_money NUMERIC(18,2),
+ assistant_service_promotion_money NUMERIC(18,2),
+ reward_promotion_money NUMERIC(18,2),
+ recharge_promotion_money NUMERIC(18,2),
+ offer_type INTEGER,
+ ledger_status INTEGER,
+ operator_id BIGINT,
+ operator_name VARCHAR(64),
+ salesman_user_id BIGINT,
+ salesman_name VARCHAR(64),
+ salesman_role_id BIGINT,
+ salesman_org_id BIGINT,
+ ledger_group_name VARCHAR(128),
+ PRIMARY KEY (redemption_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dwd_groupbuy_redemption_ex IS 'DWD 明细事实表(扩展字段表):dwd_groupbuy_redemption_ex。ODS 来源表:billiards_ods.group_buy_redemption_records(对应 JSON:group_buy_redemption_records.json;分析:group_buy_redemption_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.redemption_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957924029615941(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.site_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】朗朗桌球(名称字段,用于展示与辅助识别)。 【ODS来源】group_buy_redemption_records - siteName。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - siteName。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.table_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】A17(名称字段,用于展示与辅助识别)。 【ODS来源】group_buy_redemption_records - tableName。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - tableName。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.table_area_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】A区(名称字段,用于展示与辅助识别)。 【ODS来源】group_buy_redemption_records - tableAreaName。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - tableAreaName。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.order_pay_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - order_pay_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_pay_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.goods_option_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】group_buy_redemption_records - goodsOptionPrice。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - goodsOptionPrice。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.goods_promotion_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】group_buy_redemption_records - goods_promotion_money。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - goods_promotion_money。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.table_service_promotion_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】group_buy_redemption_records - table_service_promotion_money。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - table_service_promotion_money。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.assistant_promotion_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】group_buy_redemption_records - assistant_promotion_money。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - assistant_promotion_money。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.assistant_service_promotion_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】group_buy_redemption_records - assistant_service_promotion_money。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - assistant_service_promotion_money。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.reward_promotion_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】group_buy_redemption_records - reward_promotion_money。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - reward_promotion_money。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.recharge_promotion_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】group_buy_redemption_records - recharge_promotion_money。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - recharge_promotion_money。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.offer_type IS '【说明】明细字段,用于记录事实取值。 【示例】1(明细字段,用于记录事实取值)。 【ODS来源】group_buy_redemption_records - offer_type。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - offer_type。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.ledger_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】group_buy_redemption_records - ledger_status。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_status。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.operator_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790687322443013(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - operator_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - operator_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.operator_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】收银员:郑丽珊(名称字段,用于展示与辅助识别)。 【ODS来源】group_buy_redemption_records - operator_name。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - operator_name。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.salesman_user_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - salesman_user_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - salesman_user_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.salesman_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】group_buy_redemption_records - salesman_name。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - salesman_name。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.salesman_role_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - salesman_role_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - salesman_role_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.salesman_org_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - sales_man_org_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - sales_man_org_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.ledger_group_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】group_buy_redemption_records - ledger_group_name。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_group_name。';
+
+
+CREATE TABLE IF NOT EXISTS dwd_platform_coupon_redemption (
+ platform_coupon_redemption_id BIGINT,
+ tenant_id BIGINT,
+ site_id BIGINT,
+ coupon_code VARCHAR(64),
+ coupon_channel INTEGER,
+ coupon_name VARCHAR(200),
+ sale_price NUMERIC(10,2),
+ coupon_money NUMERIC(10,2),
+ coupon_free_time INTEGER,
+ channel_deal_id BIGINT,
+ deal_id BIGINT,
+ group_package_id BIGINT,
+ site_order_id BIGINT,
+ table_id BIGINT,
+ certificate_id VARCHAR(64),
+ verify_id VARCHAR(64),
+ use_status INTEGER,
+ is_delete INTEGER,
+ create_time TIMESTAMPTZ,
+ consume_time TIMESTAMPTZ,
+ PRIMARY KEY (platform_coupon_redemption_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dwd_platform_coupon_redemption IS 'DWD 明细事实表:dwd_platform_coupon_redemption。ODS 来源表:billiards_ods.platform_coupon_redemption_records(对应 JSON:platform_coupon_redemption_records.json;分析:platform_coupon_redemption_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.platform_coupon_redemption_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957929042218501(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - id。 【JSON字段】platform_coupon_redemption_records.json - $ - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - tenant_id。 【JSON字段】platform_coupon_redemption_records.json - $ - tenant_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - site_id。 【JSON字段】platform_coupon_redemption_records.json - $ - site_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.coupon_code IS '【说明】明细字段,用于记录事实取值。 【示例】0102701209726(明细字段,用于记录事实取值)。 【ODS来源】platform_coupon_redemption_records - coupon_code。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_code。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.coupon_channel IS '【说明】明细字段,用于记录事实取值。 【示例】1(明细字段,用于记录事实取值)。 【ODS来源】platform_coupon_redemption_records - coupon_channel。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_channel。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.coupon_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】【全天可用】中八桌球一小时(A区)(名称字段,用于展示与辅助识别)。 【ODS来源】platform_coupon_redemption_records - coupon_name。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_name。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.sale_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】29.9(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】platform_coupon_redemption_records - sale_price。 【JSON字段】platform_coupon_redemption_records.json - $ - sale_price。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.coupon_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】48.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】platform_coupon_redemption_records - coupon_money。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_money。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.coupon_free_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】0(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】platform_coupon_redemption_records - coupon_free_time。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_free_time。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.channel_deal_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】1128411555(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - channel_deal_id。 【JSON字段】platform_coupon_redemption_records.json - $ - channel_deal_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.deal_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】1345108507(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - deal_id。 【JSON字段】platform_coupon_redemption_records.json - $ - deal_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.group_package_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - group_package_id。 【JSON字段】platform_coupon_redemption_records.json - $ - group_package_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.site_order_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957929043037702(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - site_order_id。 【JSON字段】platform_coupon_redemption_records.json - $ - site_order_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793001904918661(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - table_id。 【JSON字段】platform_coupon_redemption_records.json - $ - table_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.certificate_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】5008024789379597447(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - certificate_id。 【JSON字段】platform_coupon_redemption_records.json - $ - certificate_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.verify_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】7570689090418149418(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - verify_id。 【JSON字段】platform_coupon_redemption_records.json - $ - verify_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.use_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】platform_coupon_redemption_records - use_status。 【JSON字段】platform_coupon_redemption_records.json - $ - use_status。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】platform_coupon_redemption_records - is_delete。 【JSON字段】platform_coupon_redemption_records.json - $ - is_delete。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:41:03(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】platform_coupon_redemption_records - create_time。 【JSON字段】platform_coupon_redemption_records.json - $ - create_time。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.consume_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:41:04(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】platform_coupon_redemption_records - consume_time。 【JSON字段】platform_coupon_redemption_records.json - $ - consume_time。';
+
+
+CREATE TABLE IF NOT EXISTS dwd_platform_coupon_redemption_Ex (
+ platform_coupon_redemption_id BIGINT,
+ coupon_cover VARCHAR(255),
+ coupon_remark VARCHAR(255),
+ groupon_type INTEGER,
+ operator_id BIGINT,
+ operator_name VARCHAR(50),
+ PRIMARY KEY (platform_coupon_redemption_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dwd_platform_coupon_redemption_ex IS 'DWD 明细事实表(扩展字段表):dwd_platform_coupon_redemption_ex。ODS 来源表:billiards_ods.platform_coupon_redemption_records(对应 JSON:platform_coupon_redemption_records.json;分析:platform_coupon_redemption_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption_ex.platform_coupon_redemption_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957929042218501(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - id。 【JSON字段】platform_coupon_redemption_records.json - $ - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption_ex.coupon_cover IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】platform_coupon_redemption_records - coupon_cover。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_cover。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption_ex.coupon_remark IS '【说明】明细字段,用于记录事实取值。 【示例】617547ec-9697-4f58-a700-b30a49e88904||CgYIASAHKAESLgos9ZhHDryhHb0z3RpdBZ0dVoaQbkldBcx/XTXPV8Te+9SEqYOa7aDp8nbKOpsaAA==(明细字段,用于记录事实取值)。 【ODS来源】platform_coupon_redemption_records - coupon_remark。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_remark。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption_ex.groupon_type IS '【说明】明细字段,用于记录事实取值。 【示例】1(明细字段,用于记录事实取值)。 【ODS来源】platform_coupon_redemption_records - groupon_type。 【JSON字段】platform_coupon_redemption_records.json - $ - groupon_type。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption_ex.operator_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790687322443013(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - operator_id。 【JSON字段】platform_coupon_redemption_records.json - $ - operator_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption_ex.operator_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】收银员:郑丽珊(名称字段,用于展示与辅助识别)。 【ODS来源】platform_coupon_redemption_records - operator_name。 【JSON字段】platform_coupon_redemption_records.json - $ - operator_name。';
+
+
+CREATE TABLE IF NOT EXISTS dwd_recharge_order (
+ recharge_order_id BIGINT,
+ tenant_id BIGINT,
+ site_id BIGINT,
+ member_id BIGINT,
+ member_name_snapshot TEXT,
+ member_phone_snapshot TEXT,
+ tenant_member_card_id BIGINT,
+ member_card_type_name TEXT,
+ settle_relate_id BIGINT,
+ settle_type INTEGER,
+ settle_name TEXT,
+ is_first INTEGER,
+ pay_amount NUMERIC(18,2),
+ refund_amount NUMERIC(18,2),
+ point_amount NUMERIC(18,2),
+ cash_amount NUMERIC(18,2),
+ payment_method INTEGER,
+ create_time TIMESTAMPTZ,
+ pay_time TIMESTAMPTZ,
+ PRIMARY KEY (recharge_order_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dwd_recharge_order IS 'DWD 明细事实表:dwd_recharge_order。ODS 来源表:billiards_ods.recharge_settlements(对应 JSON:recharge_settlements.json;分析:recharge_settlements-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.recharge_order_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】recharge_settlements - id。 【JSON字段】recharge_settlements.json - $ - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】recharge_settlements - tenantid。 【JSON字段】recharge_settlements.json - $ - tenantid。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】recharge_settlements - siteid。 【JSON字段】recharge_settlements.json - $ - siteid。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】recharge_settlements - memberid。 【JSON字段】recharge_settlements.json - $ - memberid。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.member_name_snapshot IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】recharge_settlements - membername。 【JSON字段】recharge_settlements.json - $ - membername。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.member_phone_snapshot IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】recharge_settlements - memberphone。 【JSON字段】recharge_settlements.json - $ - memberphone。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.tenant_member_card_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】recharge_settlements - tenantmembercardid。 【JSON字段】recharge_settlements.json - $ - tenantmembercardid。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.member_card_type_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】recharge_settlements - membercardtypename。 【JSON字段】recharge_settlements.json - $ - membercardtypename。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.settle_relate_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】recharge_settlements - settlerelateid。 【JSON字段】recharge_settlements.json - $ - settlerelateid。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.settle_type IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】recharge_settlements - settletype。 【JSON字段】recharge_settlements.json - $ - settletype。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.settle_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】recharge_settlements - settlename。 【JSON字段】recharge_settlements.json - $ - settlename。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.is_first IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】NULL(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】recharge_settlements - isfirst。 【JSON字段】recharge_settlements.json - $ - isfirst。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.pay_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - payamount。 【JSON字段】recharge_settlements.json - $ - payamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.refund_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - refundamount。 【JSON字段】recharge_settlements.json - $ - refundamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.point_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - pointamount。 【JSON字段】recharge_settlements.json - $ - pointamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.cash_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - cashamount。 【JSON字段】recharge_settlements.json - $ - cashamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.payment_method IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】recharge_settlements - paymentmethod。 【JSON字段】recharge_settlements.json - $ - paymentmethod。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】NULL(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】recharge_settlements - createtime。 【JSON字段】recharge_settlements.json - $ - createtime。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.pay_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】NULL(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】recharge_settlements - paytime。 【JSON字段】recharge_settlements.json - $ - paytime。';
+
+
+CREATE TABLE IF NOT EXISTS dwd_recharge_order_Ex (
+ recharge_order_id BIGINT,
+ site_name_snapshot TEXT,
+ settle_status INTEGER,
+ is_bind_member BOOLEAN,
+ is_activity BOOLEAN,
+ is_use_coupon BOOLEAN,
+ is_use_discount BOOLEAN,
+ can_be_revoked BOOLEAN,
+ online_amount NUMERIC(18,2),
+ balance_amount NUMERIC(18,2),
+ card_amount NUMERIC(18,2),
+ coupon_amount NUMERIC(18,2),
+ recharge_card_amount NUMERIC(18,2),
+ gift_card_amount NUMERIC(18,2),
+ prepay_money NUMERIC(18,2),
+ consume_money NUMERIC(18,2),
+ goods_money NUMERIC(18,2),
+ real_goods_money NUMERIC(18,2),
+ table_charge_money NUMERIC(18,2),
+ service_money NUMERIC(18,2),
+ activity_discount NUMERIC(18,2),
+ all_coupon_discount NUMERIC(18,2),
+ goods_promotion_money NUMERIC(18,2),
+ assistant_promotion_money NUMERIC(18,2),
+ assistant_pd_money NUMERIC(18,2),
+ assistant_cx_money NUMERIC(18,2),
+ assistant_manual_discount NUMERIC(18,2),
+ coupon_sale_amount NUMERIC(18,2),
+ member_discount_amount NUMERIC(18,2),
+ point_discount_price NUMERIC(18,2),
+ point_discount_cost NUMERIC(18,2),
+ adjust_amount NUMERIC(18,2),
+ rounding_amount NUMERIC(18,2),
+ operator_id BIGINT,
+ operator_name_snapshot TEXT,
+ salesman_user_id BIGINT,
+ salesman_name TEXT,
+ order_remark TEXT,
+ table_id INTEGER,
+ serial_number INTEGER,
+ revoke_order_id BIGINT,
+ revoke_order_name TEXT,
+ revoke_time TIMESTAMPTZ,
+ PRIMARY KEY (recharge_order_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dwd_recharge_order_ex IS 'DWD 明细事实表(扩展字段表):dwd_recharge_order_ex。ODS 来源表:billiards_ods.recharge_settlements(对应 JSON:recharge_settlements.json;分析:recharge_settlements-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.recharge_order_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】recharge_settlements - id。 【JSON字段】recharge_settlements.json - $ - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.site_name_snapshot IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】recharge_settlements - sitename。 【JSON字段】recharge_settlements.json - $ - sitename。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.settle_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】NULL(状态枚举字段,用于标识业务状态)。 【ODS来源】recharge_settlements - settlestatus。 【JSON字段】recharge_settlements.json - $ - settlestatus。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.is_bind_member IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】NULL(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】recharge_settlements - isbindmember(派生:BOOLEAN(isbindmember))。 【JSON字段】recharge_settlements.json - $ - isbindmember(派生:BOOLEAN(isbindmember))。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.is_activity IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】NULL(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】recharge_settlements - isactivity(派生:BOOLEAN(isactivity))。 【JSON字段】recharge_settlements.json - $ - isactivity(派生:BOOLEAN(isactivity))。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.is_use_coupon IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】NULL(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】recharge_settlements - isusecoupon(派生:BOOLEAN(isusecoupon))。 【JSON字段】recharge_settlements.json - $ - isusecoupon(派生:BOOLEAN(isusecoupon))。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.is_use_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】recharge_settlements - isusediscount(派生:BOOLEAN(isusediscount))。 【JSON字段】recharge_settlements.json - $ - isusediscount(派生:BOOLEAN(isusediscount))。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.can_be_revoked IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】NULL(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】recharge_settlements - canberevoked(派生:BOOLEAN(canberevoked))。 【JSON字段】recharge_settlements.json - $ - canberevoked(派生:BOOLEAN(canberevoked))。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.online_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - onlineamount。 【JSON字段】recharge_settlements.json - $ - onlineamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.balance_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - balanceamount。 【JSON字段】recharge_settlements.json - $ - balanceamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.card_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - cardamount。 【JSON字段】recharge_settlements.json - $ - cardamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.coupon_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - couponamount。 【JSON字段】recharge_settlements.json - $ - couponamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.recharge_card_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - rechargecardamount。 【JSON字段】recharge_settlements.json - $ - rechargecardamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.gift_card_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - giftcardamount。 【JSON字段】recharge_settlements.json - $ - giftcardamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.prepay_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - prepaymoney。 【JSON字段】recharge_settlements.json - $ - prepaymoney。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.consume_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - consumemoney。 【JSON字段】recharge_settlements.json - $ - consumemoney。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.goods_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - goodsmoney。 【JSON字段】recharge_settlements.json - $ - goodsmoney。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.real_goods_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - realgoodsmoney。 【JSON字段】recharge_settlements.json - $ - realgoodsmoney。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.table_charge_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - tablechargemoney。 【JSON字段】recharge_settlements.json - $ - tablechargemoney。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.service_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - servicemoney。 【JSON字段】recharge_settlements.json - $ - servicemoney。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.activity_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】recharge_settlements - activitydiscount。 【JSON字段】recharge_settlements.json - $ - activitydiscount。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.all_coupon_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】recharge_settlements - allcoupondiscount。 【JSON字段】recharge_settlements.json - $ - allcoupondiscount。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.goods_promotion_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - goodspromotionmoney。 【JSON字段】recharge_settlements.json - $ - goodspromotionmoney。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.assistant_promotion_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - assistantpromotionmoney。 【JSON字段】recharge_settlements.json - $ - assistantpromotionmoney。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.assistant_pd_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - assistantpdmoney。 【JSON字段】recharge_settlements.json - $ - assistantpdmoney。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.assistant_cx_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - assistantcxmoney。 【JSON字段】recharge_settlements.json - $ - assistantcxmoney。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.assistant_manual_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】recharge_settlements - assistantmanualdiscount。 【JSON字段】recharge_settlements.json - $ - assistantmanualdiscount。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.coupon_sale_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - couponsaleamount。 【JSON字段】recharge_settlements.json - $ - couponsaleamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.member_discount_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - memberdiscountamount。 【JSON字段】recharge_settlements.json - $ - memberdiscountamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.point_discount_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - pointdiscountprice。 【JSON字段】recharge_settlements.json - $ - pointdiscountprice。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.point_discount_cost IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - pointdiscountcost。 【JSON字段】recharge_settlements.json - $ - pointdiscountcost。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.adjust_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - adjustamount。 【JSON字段】recharge_settlements.json - $ - adjustamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.rounding_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - roundingamount。 【JSON字段】recharge_settlements.json - $ - roundingamount。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.operator_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】recharge_settlements - operatorid。 【JSON字段】recharge_settlements.json - $ - operatorid。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.operator_name_snapshot IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】recharge_settlements - operatorname。 【JSON字段】recharge_settlements.json - $ - operatorname。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.salesman_user_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】recharge_settlements - salesmanuserid。 【JSON字段】recharge_settlements.json - $ - salesmanuserid。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.salesman_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】recharge_settlements - salesmanname。 【JSON字段】recharge_settlements.json - $ - salesmanname。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.order_remark IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】recharge_settlements - orderremark。 【JSON字段】recharge_settlements.json - $ - orderremark。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】recharge_settlements - tableid。 【JSON字段】recharge_settlements.json - $ - tableid。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.serial_number IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】recharge_settlements - serialnumber。 【JSON字段】recharge_settlements.json - $ - serialnumber。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.revoke_order_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】recharge_settlements - revokeorderid。 【JSON字段】recharge_settlements.json - $ - revokeorderid。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.revoke_order_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】recharge_settlements - revokeordername。 【JSON字段】recharge_settlements.json - $ - revokeordername。';
+COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.revoke_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】NULL(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】recharge_settlements - revoketime。 【JSON字段】recharge_settlements.json - $ - revoketime。';
+
+
+CREATE TABLE IF NOT EXISTS dwd_payment (
+ payment_id BIGINT,
+ site_id BIGINT,
+ relate_type INTEGER,
+ relate_id BIGINT,
+ pay_amount NUMERIC(18,2),
+ pay_status INTEGER,
+ payment_method INTEGER,
+ online_pay_channel INTEGER,
+ create_time TIMESTAMPTZ,
+ pay_time TIMESTAMPTZ,
+ pay_date DATE,
+ PRIMARY KEY (payment_id)
+);
+
+COMMENT ON TABLE billiards_dwd.dwd_payment IS 'DWD 明细事实表:dwd_payment。ODS 来源表:billiards_ods.payment_transactions(对应 JSON:payment_transactions.json;分析:payment_transactions-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_payment.payment_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957924026486597(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】payment_transactions - id。 【JSON字段】payment_transactions.json - $ - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_payment.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】payment_transactions - site_id。 【JSON字段】payment_transactions.json - $ - site_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_payment.relate_type IS '【说明】明细字段,用于记录事实取值。 【示例】2(明细字段,用于记录事实取值)。 【ODS来源】payment_transactions - relate_type。 【JSON字段】payment_transactions.json - $ - relate_type。';
+COMMENT ON COLUMN billiards_dwd.dwd_payment.relate_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957922914357125(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】payment_transactions - relate_id。 【JSON字段】payment_transactions.json - $ - relate_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_payment.pay_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】10.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】payment_transactions - pay_amount。 【JSON字段】payment_transactions.json - $ - pay_amount。';
+COMMENT ON COLUMN billiards_dwd.dwd_payment.pay_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】2(状态枚举字段,用于标识业务状态)。 【ODS来源】payment_transactions - pay_status。 【JSON字段】payment_transactions.json - $ - pay_status。';
+COMMENT ON COLUMN billiards_dwd.dwd_payment.payment_method IS '【说明】明细字段,用于记录事实取值。 【示例】4(明细字段,用于记录事实取值)。 【ODS来源】payment_transactions - payment_method。 【JSON字段】payment_transactions.json - $ - payment_method。';
+COMMENT ON COLUMN billiards_dwd.dwd_payment.online_pay_channel IS '【说明】明细字段,用于记录事实取值。 【示例】0(明细字段,用于记录事实取值)。 【ODS来源】payment_transactions - online_pay_channel。 【JSON字段】payment_transactions.json - $ - online_pay_channel。';
+COMMENT ON COLUMN billiards_dwd.dwd_payment.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:35:57(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】payment_transactions - create_time。 【JSON字段】payment_transactions.json - $ - create_time。';
+COMMENT ON COLUMN billiards_dwd.dwd_payment.pay_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:35:57(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】payment_transactions - pay_time。 【JSON字段】payment_transactions.json - $ - pay_time。';
+COMMENT ON COLUMN billiards_dwd.dwd_payment.pay_date IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:35:57(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】payment_transactions - pay_time(派生:DATE(pay_time))。 【JSON字段】payment_transactions.json - $ - pay_time(派生:DATE(pay_time))。';
+
+
+ CREATE TABLE IF NOT EXISTS dwd_refund (
+ refund_id BIGINT,
+ tenant_id BIGINT,
+ site_id BIGINT,
+ relate_type INTEGER,
+ relate_id BIGINT,
+ pay_amount NUMERIC(18,2),
+ channel_fee NUMERIC(18,2),
+ pay_time TIMESTAMPTZ,
+ create_time TIMESTAMPTZ,
+ payment_method INTEGER,
+ member_id BIGINT,
+ member_card_id BIGINT,
+ PRIMARY KEY (refund_id)
+ );
+
+COMMENT ON TABLE billiards_dwd.dwd_refund IS 'DWD 明细事实表:dwd_refund。ODS 来源表:billiards_ods.refund_transactions(对应 JSON:refund_transactions.json;分析:refund_transactions-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund.refund_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2955202296416389(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】refund_transactions - id。 【JSON字段】refund_transactions.json - $ - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】refund_transactions - tenant_id。 【JSON字段】refund_transactions.json - $ - tenant_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】refund_transactions - site_id。 【JSON字段】refund_transactions.json - $ - site_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund.relate_type IS '【说明】明细字段,用于记录事实取值。 【示例】5(明细字段,用于记录事实取值)。 【ODS来源】refund_transactions - relate_type。 【JSON字段】refund_transactions.json - $ - relate_type。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund.relate_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2955078219057349(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】refund_transactions - relate_id。 【JSON字段】refund_transactions.json - $ - relate_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund.pay_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】-5000.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】refund_transactions - pay_amount。 【JSON字段】refund_transactions.json - $ - pay_amount。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund.channel_fee IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】refund_transactions - channel_fee。 【JSON字段】refund_transactions.json - $ - channel_fee。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund.pay_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-08 01:27:16(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】refund_transactions - pay_time。 【JSON字段】refund_transactions.json - $ - pay_time。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-08 01:27:16(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】refund_transactions - create_time。 【JSON字段】refund_transactions.json - $ - create_time。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund.payment_method IS '【说明】明细字段,用于记录事实取值。 【示例】4(明细字段,用于记录事实取值)。 【ODS来源】refund_transactions - payment_method。 【JSON字段】refund_transactions.json - $ - payment_method。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund.member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】refund_transactions - member_id。 【JSON字段】refund_transactions.json - $ - member_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund.member_card_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】refund_transactions - member_card_id。 【JSON字段】refund_transactions.json - $ - member_card_id。';
+
+
+ CREATE TABLE IF NOT EXISTS dwd_refund_Ex (
+ refund_id BIGINT,
+ tenant_name VARCHAR(64),
+ pay_sn BIGINT,
+ refund_amount NUMERIC(18,2),
+ round_amount NUMERIC(18,2),
+ balance_frozen_amount NUMERIC(18,2),
+ card_frozen_amount NUMERIC(18,2),
+ pay_status INTEGER,
+ action_type INTEGER,
+ is_revoke INTEGER,
+ is_delete INTEGER,
+ check_status INTEGER,
+ online_pay_channel INTEGER,
+ online_pay_type INTEGER,
+ pay_terminal INTEGER,
+ pay_config_id INTEGER,
+ cashier_point_id INTEGER,
+ operator_id BIGINT,
+ channel_payer_id VARCHAR(128),
+ channel_pay_no VARCHAR(128),
+ PRIMARY KEY (refund_id)
+ );
+
+COMMENT ON TABLE billiards_dwd.dwd_refund_ex IS 'DWD 明细事实表(扩展字段表):dwd_refund_ex。ODS 来源表:billiards_ods.refund_transactions(对应 JSON:refund_transactions.json;分析:refund_transactions-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.refund_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2955202296416389(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】refund_transactions - id。 【JSON字段】refund_transactions.json - $ - id。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.tenant_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】朗朗桌球(名称字段,用于展示与辅助识别)。 【ODS来源】refund_transactions - tenantName。 【JSON字段】refund_transactions.json - $ - tenantName。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.pay_sn IS '【说明】明细字段,用于记录事实取值。 【示例】0(明细字段,用于记录事实取值)。 【ODS来源】refund_transactions - pay_sn。 【JSON字段】refund_transactions.json - $ - pay_sn。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.refund_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】refund_transactions - refund_amount。 【JSON字段】refund_transactions.json - $ - refund_amount。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.round_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】refund_transactions - round_amount。 【JSON字段】refund_transactions.json - $ - round_amount。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.balance_frozen_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】refund_transactions - balance_frozen_amount。 【JSON字段】refund_transactions.json - $ - balance_frozen_amount。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.card_frozen_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】refund_transactions - card_frozen_amount。 【JSON字段】refund_transactions.json - $ - card_frozen_amount。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.pay_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】2(状态枚举字段,用于标识业务状态)。 【ODS来源】refund_transactions - pay_status。 【JSON字段】refund_transactions.json - $ - pay_status。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.action_type IS '【说明】明细字段,用于记录事实取值。 【示例】2(明细字段,用于记录事实取值)。 【ODS来源】refund_transactions - action_type。 【JSON字段】refund_transactions.json - $ - action_type。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.is_revoke IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】refund_transactions - is_revoke。 【JSON字段】refund_transactions.json - $ - is_revoke。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】refund_transactions - is_delete。 【JSON字段】refund_transactions.json - $ - is_delete。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.check_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】refund_transactions - check_status。 【JSON字段】refund_transactions.json - $ - check_status。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.online_pay_channel IS '【说明】明细字段,用于记录事实取值。 【示例】0(明细字段,用于记录事实取值)。 【ODS来源】refund_transactions - online_pay_channel。 【JSON字段】refund_transactions.json - $ - online_pay_channel。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.online_pay_type IS '【说明】明细字段,用于记录事实取值。 【示例】0(明细字段,用于记录事实取值)。 【ODS来源】refund_transactions - online_pay_type。 【JSON字段】refund_transactions.json - $ - online_pay_type。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.pay_terminal IS '【说明】明细字段,用于记录事实取值。 【示例】1(明细字段,用于记录事实取值)。 【ODS来源】refund_transactions - pay_terminal。 【JSON字段】refund_transactions.json - $ - pay_terminal。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.pay_config_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】refund_transactions - pay_config_id。 【JSON字段】refund_transactions.json - $ - pay_config_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.cashier_point_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】refund_transactions - cashier_point_id。 【JSON字段】refund_transactions.json - $ - cashier_point_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.operator_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】refund_transactions - operator_id。 【JSON字段】refund_transactions.json - $ - operator_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.channel_payer_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】refund_transactions - channel_payer_id。 【JSON字段】refund_transactions.json - $ - channel_payer_id。';
+COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.channel_pay_no IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】refund_transactions - channel_pay_no。 【JSON字段】refund_transactions.json - $ - channel_pay_no。';
+
+
diff --git a/etl_billiards/dist/ETL_Manager/_internal/database/schema_dws.sql b/etl_billiards/dist/ETL_Manager/_internal/database/schema_dws.sql
new file mode 100644
index 0000000..03e1a86
--- /dev/null
+++ b/etl_billiards/dist/ETL_Manager/_internal/database/schema_dws.sql
@@ -0,0 +1,50 @@
+-- DWS schema for aggregated / serving tables.
+CREATE SCHEMA IF NOT EXISTS billiards_dws;
+
+CREATE TABLE IF NOT EXISTS billiards_dws.dws_order_summary (
+ site_id BIGINT NOT NULL,
+ order_settle_id BIGINT NOT NULL,
+ order_trade_no TEXT,
+ order_date DATE,
+ tenant_id BIGINT,
+ member_id BIGINT,
+ member_flag BOOLEAN,
+ recharge_order_flag BOOLEAN,
+ item_count INT,
+ total_item_quantity NUMERIC,
+ table_fee_amount NUMERIC,
+ assistant_service_amount NUMERIC,
+ goods_amount NUMERIC,
+ group_amount NUMERIC,
+ total_coupon_deduction NUMERIC,
+ member_discount_amount NUMERIC,
+ manual_discount_amount NUMERIC,
+ order_original_amount NUMERIC,
+ order_final_amount NUMERIC,
+ stored_card_deduct NUMERIC,
+ external_paid_amount NUMERIC,
+ total_paid_amount NUMERIC,
+ book_table_flow NUMERIC,
+ book_assistant_flow NUMERIC,
+ book_goods_flow NUMERIC,
+ book_group_flow NUMERIC,
+ book_order_flow NUMERIC,
+ order_effective_consume_cash NUMERIC,
+ order_effective_recharge_cash NUMERIC,
+ order_effective_flow NUMERIC,
+ refund_amount NUMERIC,
+ net_income NUMERIC,
+ created_at TIMESTAMPTZ DEFAULT now(),
+ updated_at TIMESTAMPTZ DEFAULT now(),
+ PRIMARY KEY (site_id, order_settle_id)
+);
+
+CREATE INDEX IF NOT EXISTS idx_dws_order_summary_order_date
+ ON billiards_dws.dws_order_summary (order_date);
+
+CREATE INDEX IF NOT EXISTS idx_dws_order_summary_tenant_date
+ ON billiards_dws.dws_order_summary (tenant_id, order_date);
+
+CREATE INDEX IF NOT EXISTS idx_dws_order_summary_member_date
+ ON billiards_dws.dws_order_summary (member_id, order_date);
+
diff --git a/etl_billiards/dist/ETL_Manager/_internal/database/schema_etl_admin.sql b/etl_billiards/dist/ETL_Manager/_internal/database/schema_etl_admin.sql
new file mode 100644
index 0000000..de98d86
--- /dev/null
+++ b/etl_billiards/dist/ETL_Manager/_internal/database/schema_etl_admin.sql
@@ -0,0 +1,105 @@
+-- 文件说明:etl_admin 调度元数据 DDL(独立文件,便于初始化任务单独执行)。
+-- 包含任务注册表、游标表、运行记录表;字段注释使用中文。
+
+CREATE SCHEMA IF NOT EXISTS etl_admin;
+
+CREATE TABLE IF NOT EXISTS etl_admin.etl_task (
+ task_id BIGSERIAL PRIMARY KEY,
+ task_code TEXT NOT NULL,
+ store_id BIGINT NOT NULL,
+ enabled BOOLEAN DEFAULT TRUE,
+ cursor_field TEXT,
+ window_minutes_default INT DEFAULT 30,
+ overlap_seconds INT DEFAULT 120,
+ page_size INT DEFAULT 200,
+ retry_max INT DEFAULT 3,
+ params JSONB DEFAULT '{}'::jsonb,
+ created_at TIMESTAMPTZ DEFAULT now(),
+ updated_at TIMESTAMPTZ DEFAULT now(),
+ UNIQUE (task_code, store_id)
+);
+COMMENT ON TABLE etl_admin.etl_task IS '任务注册表:调度依据的任务清单(与 task_registry 中的任务码对应)。';
+COMMENT ON COLUMN etl_admin.etl_task.task_code IS '任务编码,需与代码中的任务码一致。';
+COMMENT ON COLUMN etl_admin.etl_task.store_id IS '门店/租户粒度,区分多门店执行。';
+COMMENT ON COLUMN etl_admin.etl_task.enabled IS '是否启用此任务。';
+COMMENT ON COLUMN etl_admin.etl_task.cursor_field IS '增量游标字段名(可选)。';
+COMMENT ON COLUMN etl_admin.etl_task.window_minutes_default IS '默认时间窗口(分钟)。';
+COMMENT ON COLUMN etl_admin.etl_task.overlap_seconds IS '窗口重叠秒数,用于防止遗漏。';
+COMMENT ON COLUMN etl_admin.etl_task.page_size IS '默认分页大小。';
+COMMENT ON COLUMN etl_admin.etl_task.retry_max IS 'API重试次数上限。';
+COMMENT ON COLUMN etl_admin.etl_task.params IS '任务级自定义参数 JSON。';
+COMMENT ON COLUMN etl_admin.etl_task.created_at IS '创建时间。';
+COMMENT ON COLUMN etl_admin.etl_task.updated_at IS '更新时间。';
+
+CREATE TABLE IF NOT EXISTS etl_admin.etl_cursor (
+ cursor_id BIGSERIAL PRIMARY KEY,
+ task_id BIGINT NOT NULL REFERENCES etl_admin.etl_task(task_id) ON DELETE CASCADE,
+ store_id BIGINT NOT NULL,
+ last_start TIMESTAMPTZ,
+ last_end TIMESTAMPTZ,
+ last_id BIGINT,
+ last_run_id BIGINT,
+ extra JSONB DEFAULT '{}'::jsonb,
+ created_at TIMESTAMPTZ DEFAULT now(),
+ updated_at TIMESTAMPTZ DEFAULT now(),
+ UNIQUE (task_id, store_id)
+);
+COMMENT ON TABLE etl_admin.etl_cursor IS '任务游标表:记录每个任务/门店的增量窗口及最后 run。';
+COMMENT ON COLUMN etl_admin.etl_cursor.task_id IS '关联 etl_task.task_id。';
+COMMENT ON COLUMN etl_admin.etl_cursor.store_id IS '门店/租户粒度。';
+COMMENT ON COLUMN etl_admin.etl_cursor.last_start IS '上次窗口开始时间(含重叠偏移)。';
+COMMENT ON COLUMN etl_admin.etl_cursor.last_end IS '上次窗口结束时间。';
+COMMENT ON COLUMN etl_admin.etl_cursor.last_id IS '上次处理的最大主键/游标值(可选)。';
+COMMENT ON COLUMN etl_admin.etl_cursor.last_run_id IS '上次运行ID,对应 etl_run.run_id。';
+COMMENT ON COLUMN etl_admin.etl_cursor.extra IS '附加游标信息 JSON。';
+COMMENT ON COLUMN etl_admin.etl_cursor.created_at IS '创建时间。';
+COMMENT ON COLUMN etl_admin.etl_cursor.updated_at IS '更新时间。';
+
+CREATE TABLE IF NOT EXISTS etl_admin.etl_run (
+ run_id BIGSERIAL PRIMARY KEY,
+ run_uuid TEXT NOT NULL,
+ task_id BIGINT NOT NULL REFERENCES etl_admin.etl_task(task_id) ON DELETE CASCADE,
+ store_id BIGINT NOT NULL,
+ status TEXT NOT NULL,
+ started_at TIMESTAMPTZ DEFAULT now(),
+ ended_at TIMESTAMPTZ,
+ window_start TIMESTAMPTZ,
+ window_end TIMESTAMPTZ,
+ window_minutes INT,
+ overlap_seconds INT,
+ fetched_count INT DEFAULT 0,
+ loaded_count INT DEFAULT 0,
+ updated_count INT DEFAULT 0,
+ skipped_count INT DEFAULT 0,
+ error_count INT DEFAULT 0,
+ unknown_fields INT DEFAULT 0,
+ export_dir TEXT,
+ log_path TEXT,
+ request_params JSONB DEFAULT '{}'::jsonb,
+ manifest JSONB DEFAULT '{}'::jsonb,
+ error_message TEXT,
+ extra JSONB DEFAULT '{}'::jsonb
+);
+COMMENT ON TABLE etl_admin.etl_run IS '运行记录表:记录每次任务执行的窗口、状态、计数与日志路径。';
+COMMENT ON COLUMN etl_admin.etl_run.run_uuid IS '本次调度的唯一标识。';
+COMMENT ON COLUMN etl_admin.etl_run.task_id IS '关联 etl_task.task_id。';
+COMMENT ON COLUMN etl_admin.etl_run.store_id IS '门店/租户粒度。';
+COMMENT ON COLUMN etl_admin.etl_run.status IS '运行状态(SUCC/FAIL/PARTIAL 等)。';
+COMMENT ON COLUMN etl_admin.etl_run.started_at IS '开始时间。';
+COMMENT ON COLUMN etl_admin.etl_run.ended_at IS '结束时间。';
+COMMENT ON COLUMN etl_admin.etl_run.window_start IS '本次窗口开始时间。';
+COMMENT ON COLUMN etl_admin.etl_run.window_end IS '本次窗口结束时间。';
+COMMENT ON COLUMN etl_admin.etl_run.window_minutes IS '窗口跨度(分钟)。';
+COMMENT ON COLUMN etl_admin.etl_run.overlap_seconds IS '窗口重叠秒数。';
+COMMENT ON COLUMN etl_admin.etl_run.fetched_count IS '抓取/读取的记录数。';
+COMMENT ON COLUMN etl_admin.etl_run.loaded_count IS '插入的记录数。';
+COMMENT ON COLUMN etl_admin.etl_run.updated_count IS '更新的记录数。';
+COMMENT ON COLUMN etl_admin.etl_run.skipped_count IS '跳过的记录数。';
+COMMENT ON COLUMN etl_admin.etl_run.error_count IS '错误记录数。';
+COMMENT ON COLUMN etl_admin.etl_run.unknown_fields IS '未知字段计数(清洗阶段)。';
+COMMENT ON COLUMN etl_admin.etl_run.export_dir IS '抓取/导出目录。';
+COMMENT ON COLUMN etl_admin.etl_run.log_path IS '日志路径。';
+COMMENT ON COLUMN etl_admin.etl_run.request_params IS '请求参数 JSON。';
+COMMENT ON COLUMN etl_admin.etl_run.manifest IS '运行产出清单/统计 JSON。';
+COMMENT ON COLUMN etl_admin.etl_run.error_message IS '错误信息(若失败)。';
+COMMENT ON COLUMN etl_admin.etl_run.extra IS '附加字段,保留扩展。';
diff --git a/etl_billiards/dist/ETL_Manager/_internal/database/seed_ods_tasks.sql b/etl_billiards/dist/ETL_Manager/_internal/database/seed_ods_tasks.sql
new file mode 100644
index 0000000..c0184d6
--- /dev/null
+++ b/etl_billiards/dist/ETL_Manager/_internal/database/seed_ods_tasks.sql
@@ -0,0 +1,41 @@
+-- 将新的 ODS 任务注册到 etl_admin.etl_task(按需替换 store_id)。
+-- 使用方式(示例):
+-- psql "$PG_DSN" -f etl_billiards/database/seed_ods_tasks.sql
+-- 或在 psql 中直接执行本文件内容。
+
+WITH target_store AS (
+ SELECT 2790685415443269::bigint AS store_id -- TODO: 替换为实际 store_id
+),
+task_codes AS (
+ SELECT unnest(ARRAY[
+ -- Must match tasks/ods_tasks.py (ENABLED_ODS_CODES)
+ 'ODS_ASSISTANT_ACCOUNT',
+ 'ODS_ASSISTANT_LEDGER',
+ 'ODS_ASSISTANT_ABOLISH',
+ 'ODS_SETTLEMENT_RECORDS',
+ 'ODS_TABLE_USE',
+ 'ODS_PAYMENT',
+ 'ODS_REFUND',
+ 'ODS_PLATFORM_COUPON',
+ 'ODS_MEMBER',
+ 'ODS_MEMBER_CARD',
+ 'ODS_MEMBER_BALANCE',
+ 'ODS_RECHARGE_SETTLE',
+ 'ODS_GROUP_PACKAGE',
+ 'ODS_GROUP_BUY_REDEMPTION',
+ 'ODS_INVENTORY_STOCK',
+ 'ODS_INVENTORY_CHANGE',
+ 'ODS_TABLES',
+ 'ODS_GOODS_CATEGORY',
+ 'ODS_STORE_GOODS',
+ 'ODS_STORE_GOODS_SALES',
+ 'ODS_TABLE_FEE_DISCOUNT',
+ 'ODS_TENANT_GOODS',
+ 'ODS_SETTLEMENT_TICKET'
+ ]) AS task_code
+)
+INSERT INTO etl_admin.etl_task (task_code, store_id, enabled)
+SELECT t.task_code, s.store_id, TRUE
+FROM task_codes t CROSS JOIN target_store s
+ON CONFLICT (task_code, store_id) DO UPDATE
+SET enabled = EXCLUDED.enabled;
diff --git a/etl_billiards/dist/ETL_Manager/_internal/database/seed_scheduler_tasks.sql b/etl_billiards/dist/ETL_Manager/_internal/database/seed_scheduler_tasks.sql
new file mode 100644
index 0000000..2c62a61
--- /dev/null
+++ b/etl_billiards/dist/ETL_Manager/_internal/database/seed_scheduler_tasks.sql
@@ -0,0 +1,50 @@
+-- Seed scheduler-compatible tasks into etl_admin.etl_task.
+--
+-- Notes:
+-- - These task_code values must match orchestration/task_registry.py.
+-- - ODS_* tasks are intentionally excluded here because they don't follow the
+-- BaseTask(cursor_data) scheduler interface in this repo version.
+--
+-- Usage (example):
+-- psql "%PG_DSN%" -f etl_billiards/database/seed_scheduler_tasks.sql
+--
+WITH target_store AS (
+ SELECT 2790685415443269::bigint AS store_id -- TODO: replace with your store_id
+),
+task_codes AS (
+ SELECT unnest(ARRAY[
+ 'ASSISTANT_ABOLISH',
+ 'ASSISTANTS',
+ 'COUPON_USAGE',
+ 'CHECK_CUTOFF',
+ 'DATA_INTEGRITY_CHECK',
+ 'DWD_LOAD_FROM_ODS',
+ 'DWD_QUALITY_CHECK',
+ 'INIT_DWD_SCHEMA',
+ 'INIT_DWS_SCHEMA',
+ 'INIT_ODS_SCHEMA',
+ 'INVENTORY_CHANGE',
+ 'LEDGER',
+ 'MANUAL_INGEST',
+ 'MEMBERS',
+ 'MEMBERS_DWD',
+ 'ODS_JSON_ARCHIVE',
+ 'ORDERS',
+ 'PACKAGES_DEF',
+ 'PAYMENTS',
+ 'PAYMENTS_DWD',
+ 'PRODUCTS',
+ 'REFUNDS',
+ 'TABLE_DISCOUNT',
+ 'TABLES',
+ 'TICKET_DWD',
+ 'TOPUPS',
+ 'DWS_BUILD_ORDER_SUMMARY'
+ ]) AS task_code
+)
+INSERT INTO etl_admin.etl_task (task_code, store_id, enabled)
+SELECT t.task_code, s.store_id, TRUE
+FROM task_codes t CROSS JOIN target_store s
+ON CONFLICT (task_code, store_id) DO UPDATE
+SET enabled = EXCLUDED.enabled,
+ updated_at = now();
diff --git a/etl_billiards/dist/ETL_Manager/_internal/ffi.dll b/etl_billiards/dist/ETL_Manager/_internal/ffi.dll
new file mode 100644
index 0000000..d57f88f
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/ffi.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/gssapi64.dll b/etl_billiards/dist/ETL_Manager/_internal/gssapi64.dll
new file mode 100644
index 0000000..9b96e3a
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/gssapi64.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/gui/resources/__init__.py b/etl_billiards/dist/ETL_Manager/_internal/gui/resources/__init__.py
new file mode 100644
index 0000000..ef67034
--- /dev/null
+++ b/etl_billiards/dist/ETL_Manager/_internal/gui/resources/__init__.py
@@ -0,0 +1,14 @@
+# -*- coding: utf-8 -*-
+"""GUI 资源模块"""
+
+from pathlib import Path
+
+RESOURCES_DIR = Path(__file__).parent
+STYLES_PATH = RESOURCES_DIR / "styles.qss"
+
+
+def load_stylesheet() -> str:
+ """加载样式表"""
+ if STYLES_PATH.exists():
+ return STYLES_PATH.read_text(encoding="utf-8")
+ return ""
diff --git a/etl_billiards/dist/ETL_Manager/_internal/gui/resources/styles.qss b/etl_billiards/dist/ETL_Manager/_internal/gui/resources/styles.qss
new file mode 100644
index 0000000..84457dc
--- /dev/null
+++ b/etl_billiards/dist/ETL_Manager/_internal/gui/resources/styles.qss
@@ -0,0 +1,458 @@
+/* ETL GUI 现代浅色主题样式表 */
+
+/* ========== 全局样式 ========== */
+QWidget {
+ font-family: "Microsoft YaHei", "Segoe UI", sans-serif;
+ font-size: 13px;
+ color: #333333;
+ background-color: #f5f5f5;
+}
+
+QMainWindow {
+ background-color: #f5f5f5;
+}
+
+/* ========== 菜单栏 ========== */
+QMenuBar {
+ background-color: #ffffff;
+ border-bottom: 1px solid #e0e0e0;
+ padding: 4px;
+}
+
+QMenuBar::item {
+ padding: 6px 12px;
+ background-color: transparent;
+ border-radius: 4px;
+}
+
+QMenuBar::item:selected {
+ background-color: #e8f0fe;
+}
+
+QMenu {
+ background-color: #ffffff;
+ border: 1px solid #e0e0e0;
+ border-radius: 8px;
+ padding: 4px;
+}
+
+QMenu::item {
+ padding: 8px 24px;
+ border-radius: 4px;
+}
+
+QMenu::item:selected {
+ background-color: #e8f0fe;
+}
+
+/* ========== 工具栏 ========== */
+QToolBar {
+ background-color: #ffffff;
+ border-bottom: 1px solid #e0e0e0;
+ padding: 4px;
+ spacing: 4px;
+}
+
+QToolButton {
+ background-color: transparent;
+ border: none;
+ border-radius: 6px;
+ padding: 8px;
+}
+
+QToolButton:hover {
+ background-color: #e8f0fe;
+}
+
+QToolButton:pressed {
+ background-color: #d2e3fc;
+}
+
+/* ========== 按钮 ========== */
+QPushButton {
+ background-color: #1a73e8;
+ color: white;
+ border: none;
+ border-radius: 6px;
+ padding: 8px 16px;
+ font-weight: 500;
+}
+
+QPushButton:hover {
+ background-color: #1557b0;
+}
+
+QPushButton:pressed {
+ background-color: #104080;
+}
+
+QPushButton:disabled {
+ background-color: #dadce0;
+ color: #9aa0a6;
+}
+
+QPushButton[secondary="true"] {
+ background-color: #ffffff;
+ color: #1a73e8;
+ border: 1px solid #dadce0;
+}
+
+QPushButton[secondary="true"]:hover {
+ background-color: #f8f9fa;
+ border-color: #1a73e8;
+}
+
+QPushButton[danger="true"] {
+ background-color: #ea4335;
+}
+
+QPushButton[danger="true"]:hover {
+ background-color: #c5221f;
+}
+
+/* ========== 输入框 ========== */
+QLineEdit, QTextEdit, QPlainTextEdit {
+ background-color: #ffffff;
+ border: 1px solid #dadce0;
+ border-radius: 6px;
+ padding: 8px 12px;
+ selection-background-color: #d2e3fc;
+}
+
+QLineEdit:focus, QTextEdit:focus, QPlainTextEdit:focus {
+ border-color: #1a73e8;
+ border-width: 2px;
+ padding: 7px 11px;
+}
+
+QLineEdit:disabled, QTextEdit:disabled, QPlainTextEdit:disabled {
+ background-color: #f1f3f4;
+ color: #9aa0a6;
+}
+
+/* ========== 下拉框 ========== */
+QComboBox {
+ background-color: #ffffff;
+ border: 1px solid #dadce0;
+ border-radius: 6px;
+ padding: 8px 12px;
+ padding-right: 30px;
+}
+
+QComboBox:hover {
+ border-color: #1a73e8;
+}
+
+QComboBox:focus {
+ border-color: #1a73e8;
+ border-width: 2px;
+}
+
+QComboBox::drop-down {
+ border: none;
+ width: 24px;
+}
+
+QComboBox::down-arrow {
+ image: none;
+ border-left: 5px solid transparent;
+ border-right: 5px solid transparent;
+ border-top: 6px solid #5f6368;
+ margin-right: 8px;
+}
+
+QComboBox QAbstractItemView {
+ background-color: #ffffff;
+ border: 1px solid #dadce0;
+ border-radius: 8px;
+ selection-background-color: #e8f0fe;
+}
+
+/* ========== 复选框 ========== */
+QCheckBox {
+ spacing: 8px;
+}
+
+QCheckBox::indicator {
+ width: 18px;
+ height: 18px;
+ border-radius: 4px;
+ border: 2px solid #5f6368;
+}
+
+QCheckBox::indicator:checked {
+ background-color: #1a73e8;
+ border-color: #1a73e8;
+}
+
+QCheckBox::indicator:hover {
+ border-color: #1a73e8;
+}
+
+/* ========== 列表和树 ========== */
+QListWidget, QTreeWidget, QTableWidget {
+ background-color: #ffffff;
+ border: 1px solid #dadce0;
+ border-radius: 8px;
+ outline: none;
+}
+
+QListWidget::item, QTreeWidget::item {
+ padding: 8px;
+ border-radius: 4px;
+}
+
+QListWidget::item:selected, QTreeWidget::item:selected {
+ background-color: #e8f0fe;
+ color: #1a73e8;
+}
+
+QListWidget::item:hover, QTreeWidget::item:hover {
+ background-color: #f8f9fa;
+}
+
+QHeaderView::section {
+ background-color: #f8f9fa;
+ border: none;
+ border-bottom: 1px solid #dadce0;
+ padding: 10px 16px;
+ font-weight: 600;
+}
+
+QTableWidget {
+ gridline-color: #e8eaed;
+}
+
+QTableWidget::item {
+ padding: 8px;
+}
+
+QTableWidget::item:selected {
+ background-color: #e8f0fe;
+ color: #1a73e8;
+}
+
+/* ========== 滚动条 ========== */
+QScrollBar:vertical {
+ background-color: transparent;
+ width: 12px;
+ margin: 0;
+}
+
+QScrollBar::handle:vertical {
+ background-color: #dadce0;
+ border-radius: 6px;
+ min-height: 30px;
+ margin: 2px;
+}
+
+QScrollBar::handle:vertical:hover {
+ background-color: #bdc1c6;
+}
+
+QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {
+ height: 0;
+}
+
+QScrollBar:horizontal {
+ background-color: transparent;
+ height: 12px;
+ margin: 0;
+}
+
+QScrollBar::handle:horizontal {
+ background-color: #dadce0;
+ border-radius: 6px;
+ min-width: 30px;
+ margin: 2px;
+}
+
+QScrollBar::handle:horizontal:hover {
+ background-color: #bdc1c6;
+}
+
+QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal {
+ width: 0;
+}
+
+/* ========== 选项卡 ========== */
+QTabWidget::pane {
+ border: 1px solid #dadce0;
+ border-radius: 8px;
+ background-color: #ffffff;
+ margin-top: -1px;
+}
+
+QTabBar::tab {
+ background-color: transparent;
+ border: none;
+ padding: 10px 20px;
+ margin-right: 4px;
+ color: #5f6368;
+}
+
+QTabBar::tab:selected {
+ color: #1a73e8;
+ border-bottom: 2px solid #1a73e8;
+}
+
+QTabBar::tab:hover:!selected {
+ background-color: #f8f9fa;
+ border-radius: 6px 6px 0 0;
+}
+
+/* ========== 分组框 ========== */
+QGroupBox {
+ background-color: #ffffff;
+ border: 1px solid #dadce0;
+ border-radius: 8px;
+ margin-top: 16px;
+ padding: 16px;
+ padding-top: 24px;
+}
+
+QGroupBox::title {
+ subcontrol-origin: margin;
+ subcontrol-position: top left;
+ left: 16px;
+ padding: 0 8px;
+ background-color: #ffffff;
+ color: #5f6368;
+ font-weight: 600;
+}
+
+/* ========== 进度条 ========== */
+QProgressBar {
+ background-color: #e8eaed;
+ border: none;
+ border-radius: 4px;
+ height: 8px;
+ text-align: center;
+}
+
+QProgressBar::chunk {
+ background-color: #1a73e8;
+ border-radius: 4px;
+}
+
+/* ========== 分割器 ========== */
+QSplitter::handle {
+ background-color: #e0e0e0;
+}
+
+QSplitter::handle:horizontal {
+ width: 2px;
+}
+
+QSplitter::handle:vertical {
+ height: 2px;
+}
+
+QSplitter::handle:hover {
+ background-color: #1a73e8;
+}
+
+/* ========== 状态栏 ========== */
+QStatusBar {
+ background-color: #ffffff;
+ border-top: 1px solid #e0e0e0;
+ padding: 4px;
+}
+
+QStatusBar::item {
+ border: none;
+}
+
+/* ========== 提示框 ========== */
+QToolTip {
+ background-color: #3c4043;
+ color: #ffffff;
+ border: none;
+ border-radius: 4px;
+ padding: 8px 12px;
+}
+
+/* ========== 消息框 ========== */
+QMessageBox {
+ background-color: #ffffff;
+}
+
+/* ========== 导航侧边栏 ========== */
+QListWidget#navList {
+ background-color: #ffffff;
+ border: none;
+ border-right: 1px solid #e0e0e0;
+ padding: 8px;
+}
+
+QListWidget#navList::item {
+ padding: 12px 16px;
+ border-radius: 8px;
+ margin: 2px 0;
+}
+
+QListWidget#navList::item:selected {
+ background-color: #e8f0fe;
+ color: #1a73e8;
+ font-weight: 600;
+}
+
+/* ========== 日志查看器 ========== */
+QPlainTextEdit#logViewer {
+ font-family: "Consolas", "Courier New", monospace;
+ font-size: 12px;
+ background-color: #fafafa;
+ line-height: 1.5;
+}
+
+/* ========== SQL 编辑器 ========== */
+QPlainTextEdit#sqlEditor {
+ font-family: "Consolas", "Courier New", monospace;
+ font-size: 13px;
+ background-color: #ffffff;
+}
+
+/* ========== 卡片样式 ========== */
+QFrame[card="true"] {
+ background-color: #ffffff;
+ border: 1px solid #dadce0;
+ border-radius: 12px;
+ padding: 16px;
+}
+
+QFrame[card="true"]:hover {
+ border-color: #1a73e8;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
+}
+
+/* ========== 标签 ========== */
+QLabel[heading="true"] {
+ font-size: 18px;
+ font-weight: 600;
+ color: #202124;
+}
+
+QLabel[subheading="true"] {
+ font-size: 14px;
+ color: #5f6368;
+}
+
+QLabel[status="success"] {
+ color: #1e8e3e;
+ font-weight: 500;
+}
+
+QLabel[status="error"] {
+ color: #d93025;
+ font-weight: 500;
+}
+
+QLabel[status="warning"] {
+ color: #f9ab00;
+ font-weight: 500;
+}
+
+QLabel[status="info"] {
+ color: #1a73e8;
+ font-weight: 500;
+}
diff --git a/etl_billiards/dist/ETL_Manager/_internal/k5sprt64.dll b/etl_billiards/dist/ETL_Manager/_internal/k5sprt64.dll
new file mode 100644
index 0000000..14c6c69
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/k5sprt64.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/krb5_64.dll b/etl_billiards/dist/ETL_Manager/_internal/krb5_64.dll
new file mode 100644
index 0000000..9e2b43c
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/krb5_64.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/libcrypto-3-x64.dll b/etl_billiards/dist/ETL_Manager/_internal/libcrypto-3-x64.dll
new file mode 100644
index 0000000..440c1bc
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/libcrypto-3-x64.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/liblzma.dll b/etl_billiards/dist/ETL_Manager/_internal/liblzma.dll
new file mode 100644
index 0000000..da96c30
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/liblzma.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/libmpdec-4.dll b/etl_billiards/dist/ETL_Manager/_internal/libmpdec-4.dll
new file mode 100644
index 0000000..7447f2a
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/libmpdec-4.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/libpq.dll b/etl_billiards/dist/ETL_Manager/_internal/libpq.dll
new file mode 100644
index 0000000..d2a0958
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/libpq.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/libssl-3-x64.dll b/etl_billiards/dist/ETL_Manager/_internal/libssl-3-x64.dll
new file mode 100644
index 0000000..8d4217c
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/libssl-3-x64.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/python3.dll b/etl_billiards/dist/ETL_Manager/_internal/python3.dll
new file mode 100644
index 0000000..7db0269
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/python3.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/python313.dll b/etl_billiards/dist/ETL_Manager/_internal/python313.dll
new file mode 100644
index 0000000..46c52b9
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/python313.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/scheduled_tasks.json b/etl_billiards/dist/ETL_Manager/_internal/scheduled_tasks.json
new file mode 100644
index 0000000..c1ff3fb
--- /dev/null
+++ b/etl_billiards/dist/ETL_Manager/_internal/scheduled_tasks.json
@@ -0,0 +1,48 @@
+{
+ "tasks": {
+ "8e41eb3a": {
+ "id": "8e41eb3a",
+ "name": "数据校验 (最近 2h)",
+ "task_codes": [
+ "DATA_INTEGRITY_CHECK"
+ ],
+ "schedule": {
+ "schedule_type": "interval",
+ "interval_value": 1,
+ "interval_unit": "hours",
+ "daily_time": "04:00",
+ "weekly_days": [
+ 1
+ ],
+ "weekly_time": "04:00",
+ "cron_expression": "0 4 * * *",
+ "enabled": true,
+ "start_date": null,
+ "end_date": null
+ },
+ "task_config": {
+ "pipeline_flow": "FULL",
+ "lookback_hours": 2
+ },
+ "enabled": true,
+ "last_run": "2026-01-27T22:13:11.204212",
+ "next_run": "2026-01-27T23:13:11.204212",
+ "run_count": 1,
+ "last_status": "执行中",
+ "execution_history": [
+ {
+ "task_id": "0c577148",
+ "executed_at": "2026-01-27T22:13:11.204212",
+ "status": "pending",
+ "exit_code": null,
+ "duration_seconds": 0.0,
+ "summary": "",
+ "output": "",
+ "error": ""
+ }
+ ],
+ "created_at": "2026-01-27T22:12:39.781369",
+ "updated_at": "2026-01-27T22:13:11.204586"
+ }
+ }
+}
\ No newline at end of file
diff --git a/etl_billiards/dist/ETL_Manager/_internal/shiboken6/MSVCP140.dll b/etl_billiards/dist/ETL_Manager/_internal/shiboken6/MSVCP140.dll
new file mode 100644
index 0000000..e7b55fd
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/shiboken6/MSVCP140.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/shiboken6/VCRUNTIME140.dll b/etl_billiards/dist/ETL_Manager/_internal/shiboken6/VCRUNTIME140.dll
new file mode 100644
index 0000000..f51a624
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/shiboken6/VCRUNTIME140.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/shiboken6/VCRUNTIME140_1.dll b/etl_billiards/dist/ETL_Manager/_internal/shiboken6/VCRUNTIME140_1.dll
new file mode 100644
index 0000000..2545fcc
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/shiboken6/VCRUNTIME140_1.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/shiboken6/shiboken6.abi3.dll b/etl_billiards/dist/ETL_Manager/_internal/shiboken6/shiboken6.abi3.dll
new file mode 100644
index 0000000..4df32b6
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/shiboken6/shiboken6.abi3.dll differ
diff --git a/etl_billiards/dist/ETL_Manager/_internal/zlib.dll b/etl_billiards/dist/ETL_Manager/_internal/zlib.dll
new file mode 100644
index 0000000..8b9f303
Binary files /dev/null and b/etl_billiards/dist/ETL_Manager/_internal/zlib.dll differ
diff --git a/etl_billiards/docs/在线抓取,更新ODS ,然后将更新的ODS内容,对应到DWD的更新。.md b/etl_billiards/docs/在线抓取,更新ODS ,然后将更新的ODS内容,对应到DWD的更新。.md
index 461eca0..d949212 100644
--- a/etl_billiards/docs/在线抓取,更新ODS ,然后将更新的ODS内容,对应到DWD的更新。.md
+++ b/etl_billiards/docs/在线抓取,更新ODS ,然后将更新的ODS内容,对应到DWD的更新。.md
@@ -10,7 +10,7 @@ python -m etl_billiards.cli.main ^
--pg-dsn "%PG_DSN%" ^
--store-id %STORE_ID% ^
--api-token "%API_TOKEN%"
-(可选)指定落盘目录:加 --fetch-root "D:\etl\json";美化 JSON:--write-pretty-json
+(可选)指定落盘目录:加 --fetch-root "export/JSON";美化 JSON:--write-pretty-json
2) DWD:ODS → DWD
python -m etl_billiards.cli.main ^
diff --git a/etl_billiards/gui/README.md b/etl_billiards/gui/README.md
new file mode 100644
index 0000000..78b3fd7
--- /dev/null
+++ b/etl_billiards/gui/README.md
@@ -0,0 +1,141 @@
+# 飞球 ETL GUI 管理系统
+
+一个基于 PySide6 的图形化 ETL 管理工具。
+
+## 功能特性
+
+- **任务配置**: 选择和配置 ETL 任务,支持参数设置和 CLI 命令预览
+- **任务管理**: 任务队列管理、执行历史记录、自动执行
+- **环境配置**: 图形化编辑 `.env` 配置文件
+- **数据库查看**: 浏览表结构、执行 SQL 查询
+- **ETL 状态**: 实时查看 ODS/DWD 数据状态和执行记录
+- **日志查看**: 实时日志输出、过滤、导出
+
+## 快速开始
+
+### 1. 安装依赖
+
+```bash
+cd etl_billiards
+pip install -r requirements.txt
+```
+
+### 2. 运行 GUI
+
+**方法一:使用启动脚本**
+
+```bash
+# Windows 命令行
+run_gui.bat
+
+# 或 PowerShell
+.\run_gui.ps1
+```
+
+**方法二:直接运行 Python**
+
+```bash
+cd etl_billiards
+python -m gui.main
+```
+
+## 打包为 EXE
+
+### 安装打包工具
+
+```bash
+pip install pyinstaller
+```
+
+### 执行打包
+
+```bash
+# 目录模式(推荐,启动更快)
+python build_exe.py
+
+# 单文件模式
+python build_exe.py --onefile
+
+# 显示控制台(调试用)
+python build_exe.py --console
+
+# 清理并重新打包
+python build_exe.py --clean
+```
+
+打包完成后,EXE 文件位于 `dist/ETL管理系统/` 目录。
+
+## 目录结构
+
+```
+gui/
+├── main.py # 应用入口
+├── main_window.py # 主窗口
+├── widgets/ # UI 组件
+│ ├── task_panel.py # 任务配置面板
+│ ├── task_manager.py # 任务管理器
+│ ├── env_editor.py # 环境变量编辑器
+│ ├── log_viewer.py # 日志查看器
+│ ├── db_viewer.py # 数据库查看器
+│ └── status_panel.py # ETL 状态面板
+├── workers/ # 后台工作线程
+│ ├── task_worker.py # 任务执行线程
+│ └── db_worker.py # 数据库查询线程
+├── models/ # 数据模型
+│ └── task_model.py # 任务数据模型
+├── utils/ # 工具模块
+│ ├── cli_builder.py # CLI 命令构建器
+│ └── config_helper.py # 配置辅助
+└── resources/ # 资源文件
+ └── styles.qss # 样式表
+```
+
+## 使用说明
+
+### 任务配置
+
+1. 在左侧选择任务分类
+2. 勾选要执行的任务
+3. 配置运行参数(Pipeline 模式、时间窗口等)
+4. 查看底部的 CLI 命令预览
+5. 点击「立即执行」或「添加到队列」
+
+### 环境配置
+
+1. 打开「环境配置」面板
+2. 编辑各项配置(数据库、API、路径等)
+3. 点击「保存」
+
+### 数据库查看
+
+1. 打开「数据库」面板
+2. 输入或使用 .env 中的 DSN
+3. 点击「连接」
+4. 浏览表结构或执行 SQL 查询
+
+## 常见问题
+
+### Q: 启动时提示缺少 PySide6
+
+```bash
+pip install PySide6
+```
+
+### Q: 连接数据库失败
+
+检查 `.env` 中的 `PG_DSN` 配置是否正确。
+
+### Q: 打包后运行闪退
+
+使用 `--console` 参数重新打包,查看错误信息:
+
+```bash
+python build_exe.py --console
+```
+
+## 技术栈
+
+- Python 3.10+
+- PySide6 (Qt for Python)
+- psycopg2 (PostgreSQL)
+- PyInstaller (打包)
diff --git a/etl_billiards/gui/__init__.py b/etl_billiards/gui/__init__.py
new file mode 100644
index 0000000..25afec8
--- /dev/null
+++ b/etl_billiards/gui/__init__.py
@@ -0,0 +1,5 @@
+# -*- coding: utf-8 -*-
+"""ETL GUI 客户端模块"""
+
+__version__ = "1.0.0"
+__author__ = "ETL Team"
diff --git a/etl_billiards/gui/main.py b/etl_billiards/gui/main.py
new file mode 100644
index 0000000..d414768
--- /dev/null
+++ b/etl_billiards/gui/main.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+"""ETL GUI 应用入口"""
+
+import sys
+import os
+from pathlib import Path
+
+# 确保项目根目录在 Python 路径中
+PROJECT_ROOT = Path(__file__).resolve().parents[1]
+if str(PROJECT_ROOT) not in sys.path:
+ sys.path.insert(0, str(PROJECT_ROOT))
+
+from PySide6.QtWidgets import QApplication
+from PySide6.QtCore import Qt
+from PySide6.QtGui import QFont
+
+from gui.main_window import MainWindow
+
+
+def main():
+ """主函数"""
+ # 设置高 DPI 支持
+ QApplication.setHighDpiScaleFactorRoundingPolicy(
+ Qt.HighDpiScaleFactorRoundingPolicy.PassThrough
+ )
+
+ # 创建应用
+ app = QApplication(sys.argv)
+ app.setApplicationName("飞球 ETL 管理系统")
+ app.setApplicationVersion("1.0.0")
+ app.setOrganizationName("Billiards")
+
+ # 设置默认字体
+ font = QFont("Microsoft YaHei", 10)
+ app.setFont(font)
+
+ # 创建主窗口
+ window = MainWindow()
+ window.show()
+
+ # 运行应用
+ sys.exit(app.exec())
+
+
+if __name__ == "__main__":
+ main()
diff --git a/etl_billiards/gui/main_window.py b/etl_billiards/gui/main_window.py
new file mode 100644
index 0000000..c1ff360
--- /dev/null
+++ b/etl_billiards/gui/main_window.py
@@ -0,0 +1,397 @@
+# -*- coding: utf-8 -*-
+"""主窗口"""
+
+from PySide6.QtWidgets import (
+ QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,
+ QStackedWidget, QListWidget, QListWidgetItem,
+ QStatusBar, QLabel, QMessageBox, QSplitter
+)
+from PySide6.QtCore import Qt, QSize, Signal
+from PySide6.QtGui import QIcon, QAction
+
+from .widgets.task_panel import TaskPanel
+from .widgets.task_manager import TaskManager
+from .widgets.env_editor import EnvEditor
+from .widgets.log_viewer import LogViewer
+from .widgets.db_viewer import DBViewer
+from .widgets.status_panel import StatusPanel
+from .resources import load_stylesheet
+
+
+class MainWindow(QMainWindow):
+ """ETL GUI 主窗口"""
+
+ # 信号
+ status_message = Signal(str, int) # message, timeout_ms
+
+ def __init__(self):
+ super().__init__()
+ self.setWindowTitle("飞球 ETL 管理系统")
+ self.setMinimumSize(1200, 800)
+ self.resize(1400, 900)
+
+ # 应用样式
+ self.setStyleSheet(load_stylesheet())
+
+ # 初始化 UI
+ self._init_ui()
+ self._init_menu()
+ self._init_status_bar()
+ self._connect_signals()
+
+ # 默认选中第一项
+ self.nav_list.setCurrentRow(0)
+
+ # 首次显示标记
+ self._first_show = True
+
+ def showEvent(self, event):
+ """窗口显示事件"""
+ super().showEvent(event)
+ if self._first_show:
+ self._first_show = False
+ # 延迟检查配置,让窗口先显示
+ from PySide6.QtCore import QTimer
+ QTimer.singleShot(100, self._check_config_on_startup)
+
+ def _init_ui(self):
+ """初始化界面"""
+ # 中央部件
+ central_widget = QWidget()
+ self.setCentralWidget(central_widget)
+
+ # 主布局
+ main_layout = QHBoxLayout(central_widget)
+ main_layout.setContentsMargins(0, 0, 0, 0)
+ main_layout.setSpacing(0)
+
+ # 创建分割器
+ splitter = QSplitter(Qt.Horizontal)
+ main_layout.addWidget(splitter)
+
+ # 左侧导航栏
+ nav_widget = self._create_nav_widget()
+ splitter.addWidget(nav_widget)
+
+ # 右侧内容区
+ self.content_stack = QStackedWidget()
+ splitter.addWidget(self.content_stack)
+
+ # 设置分割比例
+ splitter.setSizes([200, 1200])
+ splitter.setStretchFactor(0, 0)
+ splitter.setStretchFactor(1, 1)
+
+ # 创建各个面板
+ self._create_panels()
+
+ def _create_nav_widget(self) -> QWidget:
+ """创建导航侧边栏"""
+ nav_widget = QWidget()
+ nav_widget.setMaximumWidth(220)
+ nav_widget.setMinimumWidth(180)
+
+ layout = QVBoxLayout(nav_widget)
+ layout.setContentsMargins(0, 0, 0, 0)
+ layout.setSpacing(0)
+
+ # 标题
+ title_label = QLabel(" ETL 控制台")
+ title_label.setProperty("heading", True)
+ title_label.setFixedHeight(60)
+ title_label.setAlignment(Qt.AlignVCenter)
+ layout.addWidget(title_label)
+
+ # 导航列表
+ self.nav_list = QListWidget()
+ self.nav_list.setObjectName("navList")
+ layout.addWidget(self.nav_list)
+
+ # 添加导航项
+ nav_items = [
+ ("任务配置", "配置并执行 ETL 任务"),
+ ("任务管理", "管理任务队列和历史记录"),
+ ("环境配置", "编辑 .env 配置文件"),
+ ("数据库", "查看数据库和执行查询"),
+ ("ETL 状态", "查看 ETL 运行状态"),
+ ("日志", "查看执行日志"),
+ ]
+
+ for name, tooltip in nav_items:
+ item = QListWidgetItem(name)
+ item.setToolTip(tooltip)
+ item.setSizeHint(QSize(0, 44))
+ self.nav_list.addItem(item)
+
+ return nav_widget
+
+ def _create_panels(self):
+ """创建各个功能面板"""
+ # 任务配置面板
+ self.task_panel = TaskPanel()
+ self.content_stack.addWidget(self.task_panel)
+
+ # 任务管理面板
+ self.task_manager = TaskManager()
+ self.content_stack.addWidget(self.task_manager)
+
+ # 环境配置面板
+ self.env_editor = EnvEditor()
+ self.content_stack.addWidget(self.env_editor)
+
+ # 数据库查看器
+ self.db_viewer = DBViewer()
+ self.content_stack.addWidget(self.db_viewer)
+
+ # ETL 状态面板
+ self.status_panel = StatusPanel()
+ self.content_stack.addWidget(self.status_panel)
+
+ # 日志面板
+ self.log_viewer = LogViewer()
+ self.content_stack.addWidget(self.log_viewer)
+
+ def _init_menu(self):
+ """初始化菜单栏"""
+ menubar = self.menuBar()
+
+ # 文件菜单
+ file_menu = menubar.addMenu("文件(&F)")
+
+ refresh_action = QAction("刷新配置(&R)", self)
+ refresh_action.setShortcut("Ctrl+R")
+ refresh_action.triggered.connect(self._refresh_config)
+ file_menu.addAction(refresh_action)
+
+ settings_action = QAction("设置(&S)...", self)
+ settings_action.setShortcut("Ctrl+,")
+ settings_action.triggered.connect(self._show_settings)
+ file_menu.addAction(settings_action)
+
+ file_menu.addSeparator()
+
+ exit_action = QAction("退出(&X)", self)
+ exit_action.setShortcut("Ctrl+Q")
+ exit_action.triggered.connect(self.close)
+ file_menu.addAction(exit_action)
+
+ # 视图菜单
+ view_menu = menubar.addMenu("视图(&V)")
+
+ task_config_action = QAction("任务配置(&T)", self)
+ task_config_action.setShortcut("Ctrl+1")
+ task_config_action.triggered.connect(lambda: self._switch_panel(0))
+ view_menu.addAction(task_config_action)
+
+ task_manager_action = QAction("任务管理(&M)", self)
+ task_manager_action.setShortcut("Ctrl+2")
+ task_manager_action.triggered.connect(lambda: self._switch_panel(1))
+ view_menu.addAction(task_manager_action)
+
+ env_action = QAction("环境配置(&E)", self)
+ env_action.setShortcut("Ctrl+3")
+ env_action.triggered.connect(lambda: self._switch_panel(2))
+ view_menu.addAction(env_action)
+
+ db_action = QAction("数据库(&D)", self)
+ db_action.setShortcut("Ctrl+4")
+ db_action.triggered.connect(lambda: self._switch_panel(3))
+ view_menu.addAction(db_action)
+
+ status_action = QAction("ETL 状态(&S)", self)
+ status_action.setShortcut("Ctrl+5")
+ status_action.triggered.connect(lambda: self._switch_panel(4))
+ view_menu.addAction(status_action)
+
+ log_action = QAction("日志(&L)", self)
+ log_action.setShortcut("Ctrl+6")
+ log_action.triggered.connect(lambda: self._switch_panel(5))
+ view_menu.addAction(log_action)
+
+ # 帮助菜单
+ help_menu = menubar.addMenu("帮助(&H)")
+
+ about_action = QAction("关于(&A)", self)
+ about_action.triggered.connect(self._show_about)
+ help_menu.addAction(about_action)
+
+ def _init_status_bar(self):
+ """初始化状态栏"""
+ self.status_bar = QStatusBar()
+ self.setStatusBar(self.status_bar)
+
+ # 连接状态
+ self.conn_status_label = QLabel("数据库: 未连接")
+ self.conn_status_label.setProperty("status", "warning")
+ self.status_bar.addPermanentWidget(self.conn_status_label)
+
+ # 任务状态
+ self.task_status_label = QLabel("任务: 空闲")
+ self.status_bar.addPermanentWidget(self.task_status_label)
+
+ # 默认消息
+ self.status_bar.showMessage("就绪", 3000)
+
+ def _connect_signals(self):
+ """连接信号"""
+ # 导航切换
+ self.nav_list.currentRowChanged.connect(self._on_nav_changed)
+
+ # 任务面板信号
+ self.task_panel.task_started.connect(self._on_task_started)
+ self.task_panel.task_finished.connect(self._on_task_finished)
+ self.task_panel.log_message.connect(self.log_viewer.append_log)
+ self.task_panel.add_to_queue.connect(self._on_add_to_queue)
+ self.task_panel.create_schedule.connect(self._on_create_schedule)
+
+ # 任务管理器信号
+ self.task_manager.task_started.connect(self._on_task_started)
+ self.task_manager.task_finished.connect(self._on_task_finished)
+ self.task_manager.log_message.connect(self.log_viewer.append_log)
+
+ # 数据库连接状态
+ self.db_viewer.connection_changed.connect(self._on_db_connection_changed)
+
+ # 状态消息
+ self.status_message.connect(self._show_status_message)
+
+ def _on_nav_changed(self, index: int):
+ """导航项切换"""
+ self.content_stack.setCurrentIndex(index)
+
+ def _switch_panel(self, index: int):
+ """切换到指定面板"""
+ self.nav_list.setCurrentRow(index)
+
+ def _refresh_config(self):
+ """刷新配置"""
+ self.env_editor.load_config()
+ self.task_panel.refresh_tasks()
+ self.status_bar.showMessage("配置已刷新", 3000)
+
+ def _on_task_started(self, task_info: str):
+ """任务开始时"""
+ self.task_status_label.setText(f"任务: 执行中 - {task_info}")
+ self.task_status_label.setProperty("status", "info")
+ self.task_status_label.style().unpolish(self.task_status_label)
+ self.task_status_label.style().polish(self.task_status_label)
+
+ def _on_task_finished(self, success: bool, message: str):
+ """任务完成时"""
+ if success:
+ self.task_status_label.setText("任务: 完成")
+ self.task_status_label.setProperty("status", "success")
+ else:
+ self.task_status_label.setText("任务: 失败")
+ self.task_status_label.setProperty("status", "error")
+ self.task_status_label.style().unpolish(self.task_status_label)
+ self.task_status_label.style().polish(self.task_status_label)
+ self.status_bar.showMessage(message, 5000)
+
+ def _on_db_connection_changed(self, connected: bool, message: str):
+ """数据库连接状态变化"""
+ if connected:
+ self.conn_status_label.setText("数据库: 已连接")
+ self.conn_status_label.setProperty("status", "success")
+ else:
+ self.conn_status_label.setText("数据库: 未连接")
+ self.conn_status_label.setProperty("status", "warning")
+ self.conn_status_label.style().unpolish(self.conn_status_label)
+ self.conn_status_label.style().polish(self.conn_status_label)
+ if message:
+ self.status_bar.showMessage(message, 3000)
+
+ def _show_status_message(self, message: str, timeout: int):
+ """显示状态栏消息"""
+ self.status_bar.showMessage(message, timeout)
+
+ def _on_add_to_queue(self, config):
+ """添加任务到队列"""
+ task_id = self.task_manager.add_task(config)
+ self.status_bar.showMessage(f"任务已添加到队列 (ID: {task_id})", 3000)
+
+ def _on_create_schedule(self, name: str, task_codes: list, task_config: dict):
+ """创建调度任务"""
+ # 打开调度编辑对话框
+ from .widgets.task_manager import ScheduleEditDialog
+ from .models.schedule_model import ScheduledTask, ScheduleConfig
+ import uuid
+
+ # 创建一个预填充的调度任务
+ task = ScheduledTask(
+ id=str(uuid.uuid4())[:8],
+ name=name,
+ task_codes=task_codes,
+ schedule=ScheduleConfig(),
+ task_config=task_config,
+ )
+
+ # 打开编辑对话框
+ dialog = ScheduleEditDialog(task=task, parent=self)
+ if dialog.exec():
+ updated_task = dialog.get_task()
+ if updated_task:
+ self.task_manager.schedule_store.add_task(updated_task)
+ self.task_manager._refresh_schedule_table()
+ self.status_bar.showMessage(f"调度任务已创建: {updated_task.name}", 3000)
+ # 切换到任务管理面板的调度选项卡
+ self._switch_panel(1)
+
+ def _show_settings(self):
+ """显示设置对话框"""
+ from .widgets.settings_dialog import SettingsDialog
+ dialog = SettingsDialog(self)
+ if dialog.exec():
+ # 重新加载配置
+ self._refresh_config()
+ self.status_bar.showMessage("设置已保存", 3000)
+
+ def _check_config_on_startup(self):
+ """启动时检查配置"""
+ from .utils.app_settings import app_settings
+ if not app_settings.is_configured():
+ QMessageBox.information(
+ self,
+ "首次配置",
+ "欢迎使用 ETL 管理系统!\n\n"
+ "请先配置 ETL 项目路径,否则无法执行任务。\n\n"
+ "点击 文件 → 设置 进行配置。"
+ )
+
+ def _show_about(self):
+ """显示关于对话框"""
+ QMessageBox.about(
+ self,
+ "关于 飞球 ETL 管理系统",
+ "
飞球 ETL 管理系统
"
+ "版本: 1.0.0
"
+ "一个用于管理台球场门店数据 ETL 的图形化工具。
"
+ "功能包括:
"
+ ""
+ "- 任务配置与执行
"
+ "- 环境变量管理
"
+ "- 数据库查询
"
+ "- ETL 状态监控
"
+ "
"
+ )
+
+ def closeEvent(self, event):
+ """关闭事件"""
+ # 检查是否有正在运行的任务
+ if hasattr(self, 'task_panel') and self.task_panel.is_running():
+ reply = QMessageBox.question(
+ self,
+ "确认退出",
+ "当前有任务正在执行,确定要退出吗?",
+ QMessageBox.Yes | QMessageBox.No,
+ QMessageBox.No
+ )
+ if reply == QMessageBox.No:
+ event.ignore()
+ return
+
+ # 关闭数据库连接
+ if hasattr(self, 'db_viewer'):
+ self.db_viewer.close_connection()
+
+ event.accept()
diff --git a/etl_billiards/gui/models/__init__.py b/etl_billiards/gui/models/__init__.py
new file mode 100644
index 0000000..cdcbb76
--- /dev/null
+++ b/etl_billiards/gui/models/__init__.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+"""数据模型模块"""
+
+from .task_model import TaskItem, TaskStatus, TaskHistory, TaskConfig, QueuedTask
+from .schedule_model import (
+ ScheduledTask, ScheduleConfig, ScheduleType, IntervalUnit, ScheduleStore
+)
+
+__all__ = [
+ "TaskItem",
+ "TaskStatus",
+ "TaskHistory",
+ "TaskConfig",
+ "QueuedTask",
+ "ScheduledTask",
+ "ScheduleConfig",
+ "ScheduleType",
+ "IntervalUnit",
+ "ScheduleStore",
+]
diff --git a/etl_billiards/gui/models/schedule_model.py b/etl_billiards/gui/models/schedule_model.py
index f7822ab..6a84f67 100644
--- a/etl_billiards/gui/models/schedule_model.py
+++ b/etl_billiards/gui/models/schedule_model.py
@@ -97,8 +97,14 @@ class ScheduleConfig:
return f"Cron: {self.cron_expression}"
return "未知"
+ # 首次执行延迟秒数
+ FIRST_RUN_DELAY_SECONDS = 60
+
def get_next_run_time(self, last_run: Optional[datetime] = None) -> Optional[datetime]:
- """计算下次运行时间"""
+ """计算下次运行时间
+
+ 注意:首次执行(last_run 为 None)时会延迟 60 秒,避免创建后立即执行
+ """
now = datetime.now()
# 检查日期范围
@@ -112,12 +118,15 @@ class ScheduleConfig:
if now >= end:
return None
+ # 首次执行延迟 60 秒
+ first_run_time = now + timedelta(seconds=self.FIRST_RUN_DELAY_SECONDS)
+
if self.schedule_type == ScheduleType.ONCE:
- return None if last_run else now
+ return None if last_run else first_run_time
elif self.schedule_type == ScheduleType.INTERVAL:
if not last_run:
- return now
+ return first_run_time
if self.interval_unit == IntervalUnit.MINUTES:
delta = timedelta(minutes=self.interval_value)
elif self.interval_unit == IntervalUnit.HOURS:
@@ -177,6 +186,47 @@ class ScheduleConfig:
return None
+@dataclass
+class ScheduleExecutionRecord:
+ """调度执行记录"""
+ task_id: str # 关联的 QueuedTask ID
+ executed_at: datetime # 执行时间
+ status: str = "" # 状态:success, failed, pending
+ exit_code: Optional[int] = None # 退出码
+ duration_seconds: float = 0.0 # 耗时(秒)
+ summary: str = "" # 执行摘要
+ output: str = "" # 完整执行日志
+ error: str = "" # 错误信息
+
+ # 日志最大长度限制(字符数)
+ MAX_OUTPUT_LENGTH: int = 100000 # 100KB
+
+ def to_dict(self) -> dict:
+ return {
+ "task_id": self.task_id,
+ "executed_at": self.executed_at.isoformat(),
+ "status": self.status,
+ "exit_code": self.exit_code,
+ "duration_seconds": self.duration_seconds,
+ "summary": self.summary,
+ "output": self.output[:self.MAX_OUTPUT_LENGTH] if self.output else "",
+ "error": self.error[:5000] if self.error else "",
+ }
+
+ @classmethod
+ def from_dict(cls, data: dict) -> "ScheduleExecutionRecord":
+ return cls(
+ task_id=data.get("task_id", ""),
+ executed_at=datetime.fromisoformat(data["executed_at"]) if data.get("executed_at") else datetime.now(),
+ status=data.get("status", ""),
+ exit_code=data.get("exit_code"),
+ duration_seconds=data.get("duration_seconds", 0.0),
+ summary=data.get("summary", ""),
+ output=data.get("output", ""),
+ error=data.get("error", ""),
+ )
+
+
@dataclass
class ScheduledTask:
"""调度任务"""
@@ -193,9 +243,33 @@ class ScheduledTask:
run_count: int = 0
last_status: str = ""
+ # 执行历史(最近 N 次执行记录)
+ execution_history: List[ScheduleExecutionRecord] = field(default_factory=list)
+ MAX_HISTORY_SIZE: int = field(default=50, repr=False) # 保留最近50次执行记录
+
created_at: datetime = field(default_factory=datetime.now)
updated_at: datetime = field(default_factory=datetime.now)
+ def add_execution_record(self, record: ScheduleExecutionRecord):
+ """添加执行记录"""
+ self.execution_history.insert(0, record)
+ # 限制历史记录数量
+ if len(self.execution_history) > self.MAX_HISTORY_SIZE:
+ self.execution_history = self.execution_history[:self.MAX_HISTORY_SIZE]
+
+ def update_execution_record(self, task_id: str, status: str, exit_code: int, duration: float,
+ summary: str, output: str = "", error: str = ""):
+ """更新执行记录状态"""
+ for record in self.execution_history:
+ if record.task_id == task_id:
+ record.status = status
+ record.exit_code = exit_code
+ record.duration_seconds = duration
+ record.summary = summary
+ record.output = output
+ record.error = error
+ break
+
def to_dict(self) -> dict:
"""转换为字典"""
return {
@@ -209,6 +283,7 @@ class ScheduledTask:
"next_run": self.next_run.isoformat() if self.next_run else None,
"run_count": self.run_count,
"last_status": self.last_status,
+ "execution_history": [r.to_dict() for r in self.execution_history],
"created_at": self.created_at.isoformat(),
"updated_at": self.updated_at.isoformat(),
}
@@ -216,6 +291,9 @@ class ScheduledTask:
@classmethod
def from_dict(cls, data: dict) -> "ScheduledTask":
"""从字典创建"""
+ history_data = data.get("execution_history", [])
+ execution_history = [ScheduleExecutionRecord.from_dict(r) for r in history_data]
+
return cls(
id=data["id"],
name=data["name"],
@@ -227,6 +305,7 @@ class ScheduledTask:
next_run=datetime.fromisoformat(data["next_run"]) if data.get("next_run") else None,
run_count=data.get("run_count", 0),
last_status=data.get("last_status", ""),
+ execution_history=execution_history,
created_at=datetime.fromisoformat(data["created_at"]) if data.get("created_at") else datetime.now(),
updated_at=datetime.fromisoformat(data["updated_at"]) if data.get("updated_at") else datetime.now(),
)
diff --git a/etl_billiards/gui/resources/__init__.py b/etl_billiards/gui/resources/__init__.py
new file mode 100644
index 0000000..ef67034
--- /dev/null
+++ b/etl_billiards/gui/resources/__init__.py
@@ -0,0 +1,14 @@
+# -*- coding: utf-8 -*-
+"""GUI 资源模块"""
+
+from pathlib import Path
+
+RESOURCES_DIR = Path(__file__).parent
+STYLES_PATH = RESOURCES_DIR / "styles.qss"
+
+
+def load_stylesheet() -> str:
+ """加载样式表"""
+ if STYLES_PATH.exists():
+ return STYLES_PATH.read_text(encoding="utf-8")
+ return ""
diff --git a/etl_billiards/gui/resources/styles.qss b/etl_billiards/gui/resources/styles.qss
new file mode 100644
index 0000000..84457dc
--- /dev/null
+++ b/etl_billiards/gui/resources/styles.qss
@@ -0,0 +1,458 @@
+/* ETL GUI 现代浅色主题样式表 */
+
+/* ========== 全局样式 ========== */
+QWidget {
+ font-family: "Microsoft YaHei", "Segoe UI", sans-serif;
+ font-size: 13px;
+ color: #333333;
+ background-color: #f5f5f5;
+}
+
+QMainWindow {
+ background-color: #f5f5f5;
+}
+
+/* ========== 菜单栏 ========== */
+QMenuBar {
+ background-color: #ffffff;
+ border-bottom: 1px solid #e0e0e0;
+ padding: 4px;
+}
+
+QMenuBar::item {
+ padding: 6px 12px;
+ background-color: transparent;
+ border-radius: 4px;
+}
+
+QMenuBar::item:selected {
+ background-color: #e8f0fe;
+}
+
+QMenu {
+ background-color: #ffffff;
+ border: 1px solid #e0e0e0;
+ border-radius: 8px;
+ padding: 4px;
+}
+
+QMenu::item {
+ padding: 8px 24px;
+ border-radius: 4px;
+}
+
+QMenu::item:selected {
+ background-color: #e8f0fe;
+}
+
+/* ========== 工具栏 ========== */
+QToolBar {
+ background-color: #ffffff;
+ border-bottom: 1px solid #e0e0e0;
+ padding: 4px;
+ spacing: 4px;
+}
+
+QToolButton {
+ background-color: transparent;
+ border: none;
+ border-radius: 6px;
+ padding: 8px;
+}
+
+QToolButton:hover {
+ background-color: #e8f0fe;
+}
+
+QToolButton:pressed {
+ background-color: #d2e3fc;
+}
+
+/* ========== 按钮 ========== */
+QPushButton {
+ background-color: #1a73e8;
+ color: white;
+ border: none;
+ border-radius: 6px;
+ padding: 8px 16px;
+ font-weight: 500;
+}
+
+QPushButton:hover {
+ background-color: #1557b0;
+}
+
+QPushButton:pressed {
+ background-color: #104080;
+}
+
+QPushButton:disabled {
+ background-color: #dadce0;
+ color: #9aa0a6;
+}
+
+QPushButton[secondary="true"] {
+ background-color: #ffffff;
+ color: #1a73e8;
+ border: 1px solid #dadce0;
+}
+
+QPushButton[secondary="true"]:hover {
+ background-color: #f8f9fa;
+ border-color: #1a73e8;
+}
+
+QPushButton[danger="true"] {
+ background-color: #ea4335;
+}
+
+QPushButton[danger="true"]:hover {
+ background-color: #c5221f;
+}
+
+/* ========== 输入框 ========== */
+QLineEdit, QTextEdit, QPlainTextEdit {
+ background-color: #ffffff;
+ border: 1px solid #dadce0;
+ border-radius: 6px;
+ padding: 8px 12px;
+ selection-background-color: #d2e3fc;
+}
+
+QLineEdit:focus, QTextEdit:focus, QPlainTextEdit:focus {
+ border-color: #1a73e8;
+ border-width: 2px;
+ padding: 7px 11px;
+}
+
+QLineEdit:disabled, QTextEdit:disabled, QPlainTextEdit:disabled {
+ background-color: #f1f3f4;
+ color: #9aa0a6;
+}
+
+/* ========== 下拉框 ========== */
+QComboBox {
+ background-color: #ffffff;
+ border: 1px solid #dadce0;
+ border-radius: 6px;
+ padding: 8px 12px;
+ padding-right: 30px;
+}
+
+QComboBox:hover {
+ border-color: #1a73e8;
+}
+
+QComboBox:focus {
+ border-color: #1a73e8;
+ border-width: 2px;
+}
+
+QComboBox::drop-down {
+ border: none;
+ width: 24px;
+}
+
+QComboBox::down-arrow {
+ image: none;
+ border-left: 5px solid transparent;
+ border-right: 5px solid transparent;
+ border-top: 6px solid #5f6368;
+ margin-right: 8px;
+}
+
+QComboBox QAbstractItemView {
+ background-color: #ffffff;
+ border: 1px solid #dadce0;
+ border-radius: 8px;
+ selection-background-color: #e8f0fe;
+}
+
+/* ========== 复选框 ========== */
+QCheckBox {
+ spacing: 8px;
+}
+
+QCheckBox::indicator {
+ width: 18px;
+ height: 18px;
+ border-radius: 4px;
+ border: 2px solid #5f6368;
+}
+
+QCheckBox::indicator:checked {
+ background-color: #1a73e8;
+ border-color: #1a73e8;
+}
+
+QCheckBox::indicator:hover {
+ border-color: #1a73e8;
+}
+
+/* ========== 列表和树 ========== */
+QListWidget, QTreeWidget, QTableWidget {
+ background-color: #ffffff;
+ border: 1px solid #dadce0;
+ border-radius: 8px;
+ outline: none;
+}
+
+QListWidget::item, QTreeWidget::item {
+ padding: 8px;
+ border-radius: 4px;
+}
+
+QListWidget::item:selected, QTreeWidget::item:selected {
+ background-color: #e8f0fe;
+ color: #1a73e8;
+}
+
+QListWidget::item:hover, QTreeWidget::item:hover {
+ background-color: #f8f9fa;
+}
+
+QHeaderView::section {
+ background-color: #f8f9fa;
+ border: none;
+ border-bottom: 1px solid #dadce0;
+ padding: 10px 16px;
+ font-weight: 600;
+}
+
+QTableWidget {
+ gridline-color: #e8eaed;
+}
+
+QTableWidget::item {
+ padding: 8px;
+}
+
+QTableWidget::item:selected {
+ background-color: #e8f0fe;
+ color: #1a73e8;
+}
+
+/* ========== 滚动条 ========== */
+QScrollBar:vertical {
+ background-color: transparent;
+ width: 12px;
+ margin: 0;
+}
+
+QScrollBar::handle:vertical {
+ background-color: #dadce0;
+ border-radius: 6px;
+ min-height: 30px;
+ margin: 2px;
+}
+
+QScrollBar::handle:vertical:hover {
+ background-color: #bdc1c6;
+}
+
+QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {
+ height: 0;
+}
+
+QScrollBar:horizontal {
+ background-color: transparent;
+ height: 12px;
+ margin: 0;
+}
+
+QScrollBar::handle:horizontal {
+ background-color: #dadce0;
+ border-radius: 6px;
+ min-width: 30px;
+ margin: 2px;
+}
+
+QScrollBar::handle:horizontal:hover {
+ background-color: #bdc1c6;
+}
+
+QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal {
+ width: 0;
+}
+
+/* ========== 选项卡 ========== */
+QTabWidget::pane {
+ border: 1px solid #dadce0;
+ border-radius: 8px;
+ background-color: #ffffff;
+ margin-top: -1px;
+}
+
+QTabBar::tab {
+ background-color: transparent;
+ border: none;
+ padding: 10px 20px;
+ margin-right: 4px;
+ color: #5f6368;
+}
+
+QTabBar::tab:selected {
+ color: #1a73e8;
+ border-bottom: 2px solid #1a73e8;
+}
+
+QTabBar::tab:hover:!selected {
+ background-color: #f8f9fa;
+ border-radius: 6px 6px 0 0;
+}
+
+/* ========== 分组框 ========== */
+QGroupBox {
+ background-color: #ffffff;
+ border: 1px solid #dadce0;
+ border-radius: 8px;
+ margin-top: 16px;
+ padding: 16px;
+ padding-top: 24px;
+}
+
+QGroupBox::title {
+ subcontrol-origin: margin;
+ subcontrol-position: top left;
+ left: 16px;
+ padding: 0 8px;
+ background-color: #ffffff;
+ color: #5f6368;
+ font-weight: 600;
+}
+
+/* ========== 进度条 ========== */
+QProgressBar {
+ background-color: #e8eaed;
+ border: none;
+ border-radius: 4px;
+ height: 8px;
+ text-align: center;
+}
+
+QProgressBar::chunk {
+ background-color: #1a73e8;
+ border-radius: 4px;
+}
+
+/* ========== 分割器 ========== */
+QSplitter::handle {
+ background-color: #e0e0e0;
+}
+
+QSplitter::handle:horizontal {
+ width: 2px;
+}
+
+QSplitter::handle:vertical {
+ height: 2px;
+}
+
+QSplitter::handle:hover {
+ background-color: #1a73e8;
+}
+
+/* ========== 状态栏 ========== */
+QStatusBar {
+ background-color: #ffffff;
+ border-top: 1px solid #e0e0e0;
+ padding: 4px;
+}
+
+QStatusBar::item {
+ border: none;
+}
+
+/* ========== 提示框 ========== */
+QToolTip {
+ background-color: #3c4043;
+ color: #ffffff;
+ border: none;
+ border-radius: 4px;
+ padding: 8px 12px;
+}
+
+/* ========== 消息框 ========== */
+QMessageBox {
+ background-color: #ffffff;
+}
+
+/* ========== 导航侧边栏 ========== */
+QListWidget#navList {
+ background-color: #ffffff;
+ border: none;
+ border-right: 1px solid #e0e0e0;
+ padding: 8px;
+}
+
+QListWidget#navList::item {
+ padding: 12px 16px;
+ border-radius: 8px;
+ margin: 2px 0;
+}
+
+QListWidget#navList::item:selected {
+ background-color: #e8f0fe;
+ color: #1a73e8;
+ font-weight: 600;
+}
+
+/* ========== 日志查看器 ========== */
+QPlainTextEdit#logViewer {
+ font-family: "Consolas", "Courier New", monospace;
+ font-size: 12px;
+ background-color: #fafafa;
+ line-height: 1.5;
+}
+
+/* ========== SQL 编辑器 ========== */
+QPlainTextEdit#sqlEditor {
+ font-family: "Consolas", "Courier New", monospace;
+ font-size: 13px;
+ background-color: #ffffff;
+}
+
+/* ========== 卡片样式 ========== */
+QFrame[card="true"] {
+ background-color: #ffffff;
+ border: 1px solid #dadce0;
+ border-radius: 12px;
+ padding: 16px;
+}
+
+QFrame[card="true"]:hover {
+ border-color: #1a73e8;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
+}
+
+/* ========== 标签 ========== */
+QLabel[heading="true"] {
+ font-size: 18px;
+ font-weight: 600;
+ color: #202124;
+}
+
+QLabel[subheading="true"] {
+ font-size: 14px;
+ color: #5f6368;
+}
+
+QLabel[status="success"] {
+ color: #1e8e3e;
+ font-weight: 500;
+}
+
+QLabel[status="error"] {
+ color: #d93025;
+ font-weight: 500;
+}
+
+QLabel[status="warning"] {
+ color: #f9ab00;
+ font-weight: 500;
+}
+
+QLabel[status="info"] {
+ color: #1a73e8;
+ font-weight: 500;
+}
diff --git a/etl_billiards/gui/utils/__init__.py b/etl_billiards/gui/utils/__init__.py
new file mode 100644
index 0000000..fcb45e1
--- /dev/null
+++ b/etl_billiards/gui/utils/__init__.py
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+"""工具模块"""
+
+from .cli_builder import CLIBuilder
+from .config_helper import ConfigHelper
+from .app_settings import app_settings, AppSettings
+
+__all__ = ["CLIBuilder", "ConfigHelper", "app_settings", "AppSettings"]
diff --git a/etl_billiards/gui/utils/app_settings.py b/etl_billiards/gui/utils/app_settings.py
new file mode 100644
index 0000000..1089de3
--- /dev/null
+++ b/etl_billiards/gui/utils/app_settings.py
@@ -0,0 +1,434 @@
+# -*- coding: utf-8 -*-
+"""应用程序设置管理"""
+
+import json
+import os
+import sys
+from pathlib import Path
+from typing import Any, Dict, Optional
+
+
+class AppSettings:
+ """应用程序设置单例"""
+
+ _instance: Optional["AppSettings"] = None
+
+ def __new__(cls):
+ if cls._instance is None:
+ cls._instance = super().__new__(cls)
+ cls._instance._initialized = False
+ return cls._instance
+
+ def __init__(self):
+ if self._initialized:
+ return
+ self._initialized = True
+
+ # 配置文件路径
+ self._settings_file = self._get_settings_path()
+
+ # 默认设置
+ self._settings = {
+ "etl_project_path": "", # ETL 项目路径
+ "env_file_path": "", # .env 文件路径
+ # 自动更新配置
+ "auto_update": {
+ "hours": 24,
+ "overlap_seconds": 3600,
+ "include_dwd": True,
+ "auto_verify": False,
+ "selected_tasks": [],
+ },
+ # 数据校验配置
+ "integrity_check": {
+ "mode": "history",
+ "history_start": "",
+ "history_end": "",
+ "lookback_hours": 24,
+ "include_dimensions": False,
+ "auto_backfill": False,
+ "ods_tasks": "",
+ },
+ # 高级配置
+ "advanced": {
+ "pipeline_flow": "FULL",
+ "dry_run": False,
+ "window_start": "",
+ "window_end": "",
+ "window_split": "none",
+ "window_compensation": 0,
+ "ingest_source": "",
+ "store_id": "",
+ "pg_dsn": "",
+ "api_token": "",
+ },
+ }
+
+ # 加载设置
+ self._load()
+
+ # 如果没有配置,尝试自动检测
+ if not self._settings["etl_project_path"]:
+ self._auto_detect_paths()
+
+ def _get_settings_path(self) -> Path:
+ """获取设置文件路径"""
+ # 优先使用用户目录
+ if sys.platform == "win32":
+ app_data = os.environ.get("APPDATA", "")
+ if app_data:
+ settings_dir = Path(app_data) / "ETL管理系统"
+ else:
+ settings_dir = Path.home() / ".etl_gui"
+ else:
+ settings_dir = Path.home() / ".etl_gui"
+
+ settings_dir.mkdir(parents=True, exist_ok=True)
+ return settings_dir / "settings.json"
+
+ def _auto_detect_paths(self):
+ """自动检测 ETL 项目路径"""
+ # 方法1: 检查是否从源码目录运行
+ try:
+ source_dir = Path(__file__).resolve().parents[2]
+ cli_main = source_dir / "cli" / "main.py"
+ if cli_main.exists():
+ rel_source = Path(os.path.relpath(source_dir, Path.cwd()))
+ self._settings["etl_project_path"] = str(rel_source)
+ env_file = rel_source / ".env"
+ if env_file.exists():
+ self._settings["env_file_path"] = str(env_file)
+ self._save()
+ return
+ except Exception:
+ pass
+
+ # 方法2: 检查常见位置
+ common_paths = [
+ Path("etl_billiards"),
+ Path("."),
+ ]
+
+ for path in common_paths:
+ if path.exists() and (path / "cli" / "main.py").exists():
+ self._settings["etl_project_path"] = str(path)
+ env_file = path / ".env"
+ if env_file.exists():
+ self._settings["env_file_path"] = str(env_file)
+ self._save()
+ return
+
+ def _load(self):
+ """加载设置"""
+ if self._settings_file.exists():
+ try:
+ data = json.loads(self._settings_file.read_text(encoding="utf-8"))
+ self._settings.update(data)
+ except Exception:
+ pass
+
+ def _save(self):
+ """保存设置"""
+ try:
+ self._settings_file.write_text(
+ json.dumps(self._settings, ensure_ascii=False, indent=2),
+ encoding="utf-8"
+ )
+ except Exception:
+ pass
+
+ @property
+ def etl_project_path(self) -> str:
+ """获取 ETL 项目路径"""
+ return self._settings.get("etl_project_path", "")
+
+ @etl_project_path.setter
+ def etl_project_path(self, value: str):
+ """设置 ETL 项目路径"""
+ self._settings["etl_project_path"] = value
+ # 同时更新 .env 路径
+ if value:
+ env_path = Path(value) / ".env"
+ if env_path.exists():
+ self._settings["env_file_path"] = str(env_path)
+ self._save()
+
+ @property
+ def env_file_path(self) -> str:
+ """获取 .env 文件路径"""
+ path = self._settings.get("env_file_path", "")
+ if not path and self.etl_project_path:
+ path = str(Path(self.etl_project_path) / ".env")
+ return path
+
+ @env_file_path.setter
+ def env_file_path(self, value: str):
+ """设置 .env 文件路径"""
+ self._settings["env_file_path"] = value
+ self._save()
+
+ def is_configured(self) -> bool:
+ """检查是否已配置"""
+ path = self.etl_project_path
+ if not path:
+ return False
+ return Path(path).exists() and (Path(path) / "cli" / "main.py").exists()
+
+ def validate(self) -> tuple[bool, str]:
+ """验证配置"""
+ path = self.etl_project_path
+ if not path:
+ return False, "未配置 ETL 项目路径"
+
+ project_path = Path(path)
+ if not project_path.exists():
+ return False, f"ETL 项目路径不存在: {path}"
+
+ cli_main = project_path / "cli" / "main.py"
+ if not cli_main.exists():
+ return False, f"找不到 CLI 入口: {cli_main}"
+
+ return True, "配置有效"
+
+ # ==================== 自动更新配置 ====================
+
+ @property
+ def auto_update_hours(self) -> int:
+ return self._settings.get("auto_update", {}).get("hours", 24)
+
+ @auto_update_hours.setter
+ def auto_update_hours(self, value: int):
+ self._settings.setdefault("auto_update", {})["hours"] = value
+ self._save()
+
+ @property
+ def auto_update_overlap_seconds(self) -> int:
+ return self._settings.get("auto_update", {}).get("overlap_seconds", 3600)
+
+ @auto_update_overlap_seconds.setter
+ def auto_update_overlap_seconds(self, value: int):
+ self._settings.setdefault("auto_update", {})["overlap_seconds"] = value
+ self._save()
+
+ @property
+ def auto_update_include_dwd(self) -> bool:
+ return self._settings.get("auto_update", {}).get("include_dwd", True)
+
+ @auto_update_include_dwd.setter
+ def auto_update_include_dwd(self, value: bool):
+ self._settings.setdefault("auto_update", {})["include_dwd"] = value
+ self._save()
+
+ @property
+ def auto_update_auto_verify(self) -> bool:
+ return self._settings.get("auto_update", {}).get("auto_verify", False)
+
+ @auto_update_auto_verify.setter
+ def auto_update_auto_verify(self, value: bool):
+ self._settings.setdefault("auto_update", {})["auto_verify"] = value
+ self._save()
+
+ @property
+ def auto_update_selected_tasks(self) -> list:
+ return self._settings.get("auto_update", {}).get("selected_tasks", [])
+
+ @auto_update_selected_tasks.setter
+ def auto_update_selected_tasks(self, value: list):
+ self._settings.setdefault("auto_update", {})["selected_tasks"] = value
+ self._save()
+
+ # ==================== 数据校验配置 ====================
+
+ @property
+ def integrity_mode(self) -> str:
+ return self._settings.get("integrity_check", {}).get("mode", "history")
+
+ @integrity_mode.setter
+ def integrity_mode(self, value: str):
+ self._settings.setdefault("integrity_check", {})["mode"] = value
+ self._save()
+
+ @property
+ def integrity_history_start(self) -> str:
+ return self._settings.get("integrity_check", {}).get("history_start", "")
+
+ @integrity_history_start.setter
+ def integrity_history_start(self, value: str):
+ self._settings.setdefault("integrity_check", {})["history_start"] = value
+ self._save()
+
+ @property
+ def integrity_history_end(self) -> str:
+ return self._settings.get("integrity_check", {}).get("history_end", "")
+
+ @integrity_history_end.setter
+ def integrity_history_end(self, value: str):
+ self._settings.setdefault("integrity_check", {})["history_end"] = value
+ self._save()
+
+ @property
+ def integrity_lookback_hours(self) -> int:
+ return self._settings.get("integrity_check", {}).get("lookback_hours", 24)
+
+ @integrity_lookback_hours.setter
+ def integrity_lookback_hours(self, value: int):
+ self._settings.setdefault("integrity_check", {})["lookback_hours"] = value
+ self._save()
+
+ @property
+ def integrity_include_dimensions(self) -> bool:
+ return self._settings.get("integrity_check", {}).get("include_dimensions", False)
+
+ @integrity_include_dimensions.setter
+ def integrity_include_dimensions(self, value: bool):
+ self._settings.setdefault("integrity_check", {})["include_dimensions"] = value
+ self._save()
+
+ @property
+ def integrity_auto_backfill(self) -> bool:
+ return self._settings.get("integrity_check", {}).get("auto_backfill", False)
+
+ @integrity_auto_backfill.setter
+ def integrity_auto_backfill(self, value: bool):
+ self._settings.setdefault("integrity_check", {})["auto_backfill"] = value
+ self._save()
+
+ @property
+ def integrity_ods_tasks(self) -> str:
+ return self._settings.get("integrity_check", {}).get("ods_tasks", "")
+
+ @integrity_ods_tasks.setter
+ def integrity_ods_tasks(self, value: str):
+ self._settings.setdefault("integrity_check", {})["ods_tasks"] = value
+ self._save()
+
+ # ==================== 高级配置 ====================
+
+ @property
+ def advanced_pipeline_flow(self) -> str:
+ return self._settings.get("advanced", {}).get("pipeline_flow", "FULL")
+
+ @advanced_pipeline_flow.setter
+ def advanced_pipeline_flow(self, value: str):
+ self._settings.setdefault("advanced", {})["pipeline_flow"] = value
+ self._save()
+
+ @property
+ def advanced_dry_run(self) -> bool:
+ return self._settings.get("advanced", {}).get("dry_run", False)
+
+ @advanced_dry_run.setter
+ def advanced_dry_run(self, value: bool):
+ self._settings.setdefault("advanced", {})["dry_run"] = value
+ self._save()
+
+ @property
+ def advanced_window_start(self) -> str:
+ return self._settings.get("advanced", {}).get("window_start", "")
+
+ @advanced_window_start.setter
+ def advanced_window_start(self, value: str):
+ self._settings.setdefault("advanced", {})["window_start"] = value
+ self._save()
+
+ @property
+ def advanced_window_end(self) -> str:
+ return self._settings.get("advanced", {}).get("window_end", "")
+
+ @advanced_window_end.setter
+ def advanced_window_end(self, value: str):
+ self._settings.setdefault("advanced", {})["window_end"] = value
+ self._save()
+
+ @property
+ def advanced_ingest_source(self) -> str:
+ return self._settings.get("advanced", {}).get("ingest_source", "")
+
+ @advanced_ingest_source.setter
+ def advanced_ingest_source(self, value: str):
+ self._settings.setdefault("advanced", {})["ingest_source"] = value
+ self._save()
+
+ @property
+ def advanced_window_split(self) -> str:
+ return self._settings.get("advanced", {}).get("window_split", "none")
+
+ @advanced_window_split.setter
+ def advanced_window_split(self, value: str):
+ self._settings.setdefault("advanced", {})["window_split"] = value
+ self._save()
+
+ @property
+ def advanced_window_compensation(self) -> int:
+ return self._settings.get("advanced", {}).get("window_compensation", 0)
+
+ @advanced_window_compensation.setter
+ def advanced_window_compensation(self, value: int):
+ self._settings.setdefault("advanced", {})["window_compensation"] = value
+ self._save()
+
+ def get_all_settings(self) -> Dict[str, Any]:
+ """获取所有设置(用于调试)"""
+ return self._settings.copy()
+
+ def save_all(self):
+ """强制保存所有设置"""
+ self._save()
+
+ # ==================== 任务历史存储 ====================
+
+ def _get_history_path(self) -> Path:
+ """获取任务历史文件路径"""
+ return self._settings_file.parent / "task_history.json"
+
+ def save_task_history(self, history_list: list):
+ """保存任务历史到文件"""
+ try:
+ history_path = self._get_history_path()
+
+ # 序列化任务历史
+ serialized = []
+ for task in history_list[:100]: # 最多保存100条
+ try:
+ task_data = {
+ "id": task.id,
+ "tasks": task.config.tasks if hasattr(task, 'config') else [],
+ "status": task.status.value if hasattr(task.status, 'value') else str(task.status),
+ "created_at": task.created_at.isoformat() if task.created_at else None,
+ "started_at": task.started_at.isoformat() if task.started_at else None,
+ "finished_at": task.finished_at.isoformat() if task.finished_at else None,
+ "exit_code": task.exit_code,
+ "error": task.error[:500] if task.error else "", # 限制长度
+ "output_preview": task.output[:1000] if task.output else "", # 输出预览
+ # 保存配置信息
+ "pipeline_flow": task.config.pipeline_flow if hasattr(task, 'config') else "FULL",
+ "window_start": task.config.window_start if hasattr(task, 'config') else None,
+ "window_end": task.config.window_end if hasattr(task, 'config') else None,
+ }
+ serialized.append(task_data)
+ except Exception:
+ continue
+
+ history_path.write_text(
+ json.dumps(serialized, ensure_ascii=False, indent=2),
+ encoding="utf-8"
+ )
+ except Exception as e:
+ print(f"保存任务历史失败: {e}")
+
+ def load_task_history(self) -> list:
+ """从文件加载任务历史"""
+ try:
+ history_path = self._get_history_path()
+ if not history_path.exists():
+ return []
+
+ data = json.loads(history_path.read_text(encoding="utf-8"))
+ return data
+ except Exception as e:
+ print(f"加载任务历史失败: {e}")
+ return []
+
+
+# 全局单例
+app_settings = AppSettings()
diff --git a/etl_billiards/gui/utils/cli_builder.py b/etl_billiards/gui/utils/cli_builder.py
new file mode 100644
index 0000000..2e7110e
--- /dev/null
+++ b/etl_billiards/gui/utils/cli_builder.py
@@ -0,0 +1,131 @@
+# -*- coding: utf-8 -*-
+"""CLI 命令构建器"""
+
+from typing import List, Dict, Any, Optional
+from ..models.task_model import TaskConfig
+
+
+# CLI 支持的命令行参数(来自 cli/main.py)
+CLI_SUPPORTED_ARGS = {
+ # 值类型参数
+ "store_id", "tasks", "pg_dsn", "pg_host", "pg_port", "pg_name",
+ "pg_user", "pg_password", "api_base", "api_token", "api_timeout",
+ "api_page_size", "api_retry_max", "window_start", "window_end",
+ "export_root", "log_root", "pipeline_flow", "fetch_root",
+ "ingest_source", "idle_start", "idle_end",
+ # 布尔类型参数
+ "dry_run", "force_window_override", "write_pretty_json", "allow_empty_advance",
+}
+
+
+class CLIBuilder:
+ """构建 CLI 命令行参数"""
+
+ def __init__(self, python_executable: str = "python"):
+ self.python_executable = python_executable
+
+ def build_command(self, config: TaskConfig) -> List[str]:
+ """
+ 根据任务配置构建命令行参数列表
+
+ Args:
+ config: 任务配置对象
+
+ Returns:
+ 命令行参数列表
+ """
+ cmd = [self.python_executable, "-m", "cli.main"]
+
+ # 任务列表
+ if config.tasks:
+ cmd.extend(["--tasks", ",".join(config.tasks)])
+
+ # Pipeline 流程
+ if config.pipeline_flow:
+ cmd.extend(["--pipeline-flow", config.pipeline_flow])
+
+ # Dry-run 模式
+ if config.dry_run:
+ cmd.append("--dry-run")
+
+ # 时间窗口
+ if config.window_start:
+ cmd.extend(["--window-start", config.window_start])
+ if config.window_end:
+ cmd.extend(["--window-end", config.window_end])
+
+ # 数据源目录
+ if config.ingest_source:
+ cmd.extend(["--ingest-source", config.ingest_source])
+
+ # 门店 ID
+ if config.store_id is not None:
+ cmd.extend(["--store-id", str(config.store_id)])
+
+ # 数据库 DSN
+ if config.pg_dsn:
+ cmd.extend(["--pg-dsn", config.pg_dsn])
+
+ # API Token
+ if config.api_token:
+ cmd.extend(["--api-token", config.api_token])
+
+ # 额外参数(只传递 CLI 支持的参数)
+ for key, value in config.extra_args.items():
+ if value is not None and key in CLI_SUPPORTED_ARGS:
+ arg_name = f"--{key.replace('_', '-')}"
+ if isinstance(value, bool):
+ if value:
+ cmd.append(arg_name)
+ else:
+ cmd.extend([arg_name, str(value)])
+
+ return cmd
+
+ def build_command_string(self, config: TaskConfig) -> str:
+ """
+ 构建命令行字符串(用于显示)
+
+ Args:
+ config: 任务配置对象
+
+ Returns:
+ 命令行字符串
+ """
+ cmd = self.build_command(config)
+ # 对包含空格的参数添加引号
+ quoted_cmd = []
+ for arg in cmd:
+ if ' ' in arg or '"' in arg:
+ quoted_cmd.append(f'"{arg}"')
+ else:
+ quoted_cmd.append(arg)
+ return " ".join(quoted_cmd)
+
+ def build_from_dict(self, params: Dict[str, Any]) -> List[str]:
+ """
+ 从字典构建命令行参数
+
+ Args:
+ params: 参数字典
+
+ Returns:
+ 命令行参数列表
+ """
+ config = TaskConfig(
+ tasks=params.get("tasks", []),
+ pipeline_flow=params.get("pipeline_flow", "FULL"),
+ dry_run=params.get("dry_run", False),
+ window_start=params.get("window_start"),
+ window_end=params.get("window_end"),
+ ingest_source=params.get("ingest_source"),
+ store_id=params.get("store_id"),
+ pg_dsn=params.get("pg_dsn"),
+ api_token=params.get("api_token"),
+ extra_args=params.get("extra_args", {}),
+ )
+ return self.build_command(config)
+
+
+# 全局实例
+cli_builder = CLIBuilder()
diff --git a/etl_billiards/gui/utils/config_helper.py b/etl_billiards/gui/utils/config_helper.py
new file mode 100644
index 0000000..4eef080
--- /dev/null
+++ b/etl_billiards/gui/utils/config_helper.py
@@ -0,0 +1,309 @@
+# -*- coding: utf-8 -*-
+"""配置辅助工具"""
+
+import os
+import re
+from pathlib import Path
+from typing import Dict, List, Tuple, Optional, Any
+
+
+# 环境变量分组
+ENV_GROUPS = {
+ "database": {
+ "title": "数据库配置",
+ "keys": ["PG_DSN", "PG_HOST", "PG_PORT", "PG_NAME", "PG_USER", "PG_PASSWORD", "PG_CONNECT_TIMEOUT"],
+ "sensitive": ["PG_PASSWORD"],
+ },
+ "api": {
+ "title": "API 配置",
+ "keys": ["API_BASE", "API_TOKEN", "FICOO_TOKEN", "API_TIMEOUT", "API_PAGE_SIZE", "API_RETRY_MAX"],
+ "sensitive": ["API_TOKEN", "FICOO_TOKEN"],
+ },
+ "store": {
+ "title": "门店配置",
+ "keys": ["STORE_ID", "TIMEZONE", "SCHEMA_OLTP", "SCHEMA_ETL"],
+ "sensitive": [],
+ },
+ "paths": {
+ "title": "路径配置",
+ "keys": ["EXPORT_ROOT", "LOG_ROOT", "FETCH_ROOT", "INGEST_SOURCE_DIR", "JSON_FETCH_ROOT", "JSON_SOURCE_DIR"],
+ "sensitive": [],
+ },
+ "pipeline": {
+ "title": "流水线配置",
+ "keys": ["PIPELINE_FLOW", "RUN_TASKS", "OVERLAP_SECONDS"],
+ "sensitive": [],
+ },
+ "window": {
+ "title": "时间窗口配置",
+ "keys": ["WINDOW_START", "WINDOW_END", "WINDOW_BUSY_MIN", "WINDOW_IDLE_MIN", "IDLE_START", "IDLE_END"],
+ "sensitive": [],
+ },
+ "integrity": {
+ "title": "数据完整性配置",
+ "keys": ["INTEGRITY_MODE", "INTEGRITY_HISTORY_START", "INTEGRITY_HISTORY_END",
+ "INTEGRITY_INCLUDE_DIMENSIONS", "INTEGRITY_AUTO_CHECK", "INTEGRITY_ODS_TASK_CODES"],
+ "sensitive": [],
+ },
+}
+
+
+class ConfigHelper:
+ """配置文件辅助类"""
+
+ def __init__(self, env_path: Optional[Path] = None):
+ """
+ 初始化配置辅助器
+
+ Args:
+ env_path: .env 文件路径,默认使用 AppSettings 中的路径
+ """
+ if env_path is not None:
+ self.env_path = Path(env_path)
+ else:
+ # 从 AppSettings 获取路径
+ from .app_settings import app_settings
+ settings_path = app_settings.env_file_path
+ if settings_path:
+ self.env_path = Path(settings_path)
+ else:
+ # 回退到源码目录
+ self.env_path = Path(__file__).resolve().parents[2] / ".env"
+
+ def load_env(self) -> Dict[str, str]:
+ """
+ 加载 .env 文件内容
+
+ Returns:
+ 环境变量字典
+ """
+ env_vars = {}
+ if not self.env_path.exists():
+ return env_vars
+
+ try:
+ content = self.env_path.read_text(encoding="utf-8", errors="ignore")
+ for line in content.splitlines():
+ parsed = self._parse_line(line)
+ if parsed:
+ key, value = parsed
+ env_vars[key] = value
+ except Exception:
+ pass
+
+ return env_vars
+
+ def save_env(self, env_vars: Dict[str, str]) -> bool:
+ """
+ 保存环境变量到 .env 文件
+
+ Args:
+ env_vars: 环境变量字典
+
+ Returns:
+ 是否保存成功
+ """
+ try:
+ lines = []
+ # 按分组输出
+ written_keys = set()
+
+ for group_id, group_info in ENV_GROUPS.items():
+ group_lines = []
+ for key in group_info["keys"]:
+ if key in env_vars:
+ value = env_vars[key]
+ group_lines.append(self._format_line(key, value))
+ written_keys.add(key)
+
+ if group_lines:
+ lines.append(f"\n# {group_info['title']}")
+ lines.extend(group_lines)
+
+ # 写入未分组的变量
+ other_lines = []
+ for key, value in env_vars.items():
+ if key not in written_keys:
+ other_lines.append(self._format_line(key, value))
+
+ if other_lines:
+ lines.append("\n# 其他配置")
+ lines.extend(other_lines)
+
+ content = "\n".join(lines).strip() + "\n"
+ self.env_path.write_text(content, encoding="utf-8")
+ return True
+ except Exception:
+ return False
+
+ def get_grouped_env(self) -> Dict[str, List[Tuple[str, str, bool]]]:
+ """
+ 获取分组的环境变量
+
+ Returns:
+ 分组字典 {group_id: [(key, value, is_sensitive), ...]}
+ """
+ env_vars = self.load_env()
+ result = {}
+ used_keys = set()
+
+ for group_id, group_info in ENV_GROUPS.items():
+ items = []
+ for key in group_info["keys"]:
+ value = env_vars.get(key, "")
+ is_sensitive = key in group_info.get("sensitive", [])
+ items.append((key, value, is_sensitive))
+ if key in env_vars:
+ used_keys.add(key)
+ result[group_id] = items
+
+ # 添加未分组的变量到 "other" 组
+ other_items = []
+ for key, value in env_vars.items():
+ if key not in used_keys:
+ other_items.append((key, value, False))
+ if other_items:
+ result["other"] = other_items
+
+ return result
+
+ def validate_env(self, env_vars: Dict[str, str]) -> List[str]:
+ """
+ 验证环境变量
+
+ Args:
+ env_vars: 环境变量字典
+
+ Returns:
+ 错误消息列表
+ """
+ errors = []
+
+ # 验证 PG_DSN 格式
+ pg_dsn = env_vars.get("PG_DSN", "")
+ if pg_dsn and not pg_dsn.startswith("postgresql://"):
+ errors.append("PG_DSN 应以 'postgresql://' 开头")
+
+ # 验证端口号
+ pg_port = env_vars.get("PG_PORT", "")
+ if pg_port:
+ try:
+ port = int(pg_port)
+ if port < 1 or port > 65535:
+ errors.append("PG_PORT 应在 1-65535 范围内")
+ except ValueError:
+ errors.append("PG_PORT 应为数字")
+
+ # 验证 STORE_ID
+ store_id = env_vars.get("STORE_ID", "")
+ if store_id:
+ try:
+ int(store_id)
+ except ValueError:
+ errors.append("STORE_ID 应为数字")
+
+ # 验证路径存在性(可选)
+ for key in ["EXPORT_ROOT", "LOG_ROOT", "FETCH_ROOT"]:
+ path = env_vars.get(key, "")
+ if path and not os.path.isabs(path):
+ errors.append(f"{key} 建议使用绝对路径")
+
+ return errors
+
+ def mask_sensitive(self, value: str, visible_chars: int = 4) -> str:
+ """
+ 脱敏敏感值
+
+ Args:
+ value: 原始值
+ visible_chars: 可见字符数
+
+ Returns:
+ 脱敏后的值
+ """
+ if not value or len(value) <= visible_chars:
+ return "*" * len(value) if value else ""
+ return value[:visible_chars] + "*" * (len(value) - visible_chars)
+
+ def _parse_line(self, line: str) -> Optional[Tuple[str, str]]:
+ """解析 .env 文件的一行"""
+ stripped = line.strip()
+ if not stripped or stripped.startswith("#"):
+ return None
+ if stripped.startswith("export "):
+ stripped = stripped[7:].strip()
+ if "=" not in stripped:
+ return None
+
+ key, value = stripped.split("=", 1)
+ key = key.strip()
+ value = self._unquote_value(value)
+ return key, value
+
+ def _unquote_value(self, value: str) -> str:
+ """处理引号和注释"""
+ # 去除内联注释
+ value = self._strip_inline_comment(value)
+ value = value.rstrip(",").strip()
+
+ if not value:
+ return value
+
+ # 去除引号
+ if len(value) >= 2 and value[0] in ("'", '"') and value[-1] == value[0]:
+ return value[1:-1]
+ if len(value) >= 3 and value[0] in ("r", "R") and value[1] in ("'", '"') and value[-1] == value[1]:
+ return value[2:-1]
+
+ return value
+
+ def _strip_inline_comment(self, value: str) -> str:
+ """去除内联注释"""
+ result = []
+ in_quote = False
+ quote_char = ""
+ escape = False
+
+ for ch in value:
+ if escape:
+ result.append(ch)
+ escape = False
+ continue
+ if ch == "\\":
+ escape = True
+ result.append(ch)
+ continue
+ if ch in ("'", '"'):
+ if not in_quote:
+ in_quote = True
+ quote_char = ch
+ elif quote_char == ch:
+ in_quote = False
+ quote_char = ""
+ result.append(ch)
+ continue
+ if ch == "#" and not in_quote:
+ break
+ result.append(ch)
+
+ return "".join(result).rstrip()
+
+ def _format_line(self, key: str, value: str) -> str:
+ """格式化为 .env 行"""
+ # 如果值包含特殊字符,使用引号包裹
+ if any(c in value for c in [' ', '"', "'", '#', '\n', '\r']):
+ # 使用双引号,转义内部的双引号
+ escaped = value.replace('\\', '\\\\').replace('"', '\\"')
+ return f'{key}="{escaped}"'
+ return f"{key}={value}"
+
+ @staticmethod
+ def get_group_title(group_id: str) -> str:
+ """获取分组标题"""
+ if group_id in ENV_GROUPS:
+ return ENV_GROUPS[group_id]["title"]
+ return "其他配置"
+
+
+# 全局实例
+config_helper = ConfigHelper()
diff --git a/etl_billiards/gui/widgets/__init__.py b/etl_billiards/gui/widgets/__init__.py
new file mode 100644
index 0000000..5d20561
--- /dev/null
+++ b/etl_billiards/gui/widgets/__init__.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+"""GUI 组件模块"""
+
+from .task_panel import TaskPanel
+from .env_editor import EnvEditor
+from .log_viewer import LogViewer
+from .db_viewer import DBViewer
+from .status_panel import StatusPanel
+from .task_manager import TaskManager
+
+__all__ = [
+ "TaskPanel",
+ "EnvEditor",
+ "LogViewer",
+ "DBViewer",
+ "StatusPanel",
+ "TaskManager",
+]
diff --git a/etl_billiards/gui/widgets/db_viewer.py b/etl_billiards/gui/widgets/db_viewer.py
new file mode 100644
index 0000000..d0b4909
--- /dev/null
+++ b/etl_billiards/gui/widgets/db_viewer.py
@@ -0,0 +1,390 @@
+# -*- coding: utf-8 -*-
+"""数据库查看器"""
+
+from PySide6.QtWidgets import (
+ QWidget, QVBoxLayout, QHBoxLayout, QSplitter,
+ QGroupBox, QLabel, QPushButton, QLineEdit, QPlainTextEdit,
+ QTableWidget, QTableWidgetItem, QTreeWidget, QTreeWidgetItem,
+ QHeaderView, QComboBox, QTabWidget, QMessageBox, QFrame
+)
+from PySide6.QtCore import Qt, Signal
+from PySide6.QtGui import QFont
+
+from ..workers.db_worker import DBWorker
+from ..utils.config_helper import ConfigHelper
+
+
+# 常用查询模板
+QUERY_TEMPLATES = {
+ "ODS 行数统计": """
+SELECT
+ table_name,
+ (xpath('/row/cnt/text()',
+ query_to_xml('SELECT COUNT(*) AS cnt FROM ' || table_schema || '.' || table_name, false, false, ''))
+ )[1]::text::bigint AS row_count
+FROM information_schema.tables
+WHERE table_schema = 'billiards_ods'
+ORDER BY table_name;
+""",
+ "DWD 行数统计": """
+SELECT
+ table_name,
+ (xpath('/row/cnt/text()',
+ query_to_xml('SELECT COUNT(*) AS cnt FROM ' || table_schema || '.' || table_name, false, false, ''))
+ )[1]::text::bigint AS row_count
+FROM information_schema.tables
+WHERE table_schema = 'billiards_dwd'
+ORDER BY table_name;
+""",
+ "ETL 游标状态": """
+SELECT
+ task_code,
+ last_start,
+ last_end,
+ last_run_id,
+ updated_at
+FROM etl_admin.etl_cursor
+ORDER BY task_code;
+""",
+ "最近运行记录": """
+SELECT
+ run_id,
+ task_code,
+ status,
+ started_at,
+ finished_at,
+ EXTRACT(EPOCH FROM (finished_at - started_at))::int AS duration_sec,
+ rows_affected
+FROM etl_admin.run_tracker
+ORDER BY started_at DESC
+LIMIT 50;
+""",
+ "ODS 最新入库时间": """
+SELECT
+ 'payment_transactions' AS table_name, MAX(fetched_at) AS max_fetched_at FROM billiards_ods.payment_transactions
+UNION ALL
+SELECT 'member_profiles', MAX(fetched_at) FROM billiards_ods.member_profiles
+UNION ALL
+SELECT 'settlement_records', MAX(fetched_at) FROM billiards_ods.settlement_records
+UNION ALL
+SELECT 'recharge_settlements', MAX(fetched_at) FROM billiards_ods.recharge_settlements
+ORDER BY table_name;
+""",
+}
+
+
+class DBViewer(QWidget):
+ """数据库查看器"""
+
+ # 信号
+ connection_changed = Signal(bool, str) # 连接状态变化
+
+ def __init__(self, parent=None):
+ super().__init__(parent)
+ self.config_helper = ConfigHelper()
+ self.db_worker = DBWorker(self)
+ self._connected = False
+
+ self._init_ui()
+ self._connect_signals()
+ self._load_dsn_from_env()
+
+ def _init_ui(self):
+ """初始化界面"""
+ layout = QVBoxLayout(self)
+ layout.setContentsMargins(16, 16, 16, 16)
+ layout.setSpacing(16)
+
+ # 标题
+ title = QLabel("数据库查看器")
+ title.setProperty("heading", True)
+ layout.addWidget(title)
+
+ # 连接配置
+ conn_group = QGroupBox("数据库连接")
+ conn_layout = QHBoxLayout(conn_group)
+
+ conn_layout.addWidget(QLabel("DSN:"))
+ self.dsn_edit = QLineEdit()
+ self.dsn_edit.setPlaceholderText("postgresql://user:password@host:5432/dbname")
+ self.dsn_edit.setEchoMode(QLineEdit.Password)
+ conn_layout.addWidget(self.dsn_edit, 1)
+
+ self.show_dsn_btn = QPushButton("显示")
+ self.show_dsn_btn.setProperty("secondary", True)
+ self.show_dsn_btn.setCheckable(True)
+ self.show_dsn_btn.setFixedWidth(60)
+ conn_layout.addWidget(self.show_dsn_btn)
+
+ self.connect_btn = QPushButton("连接")
+ self.connect_btn.setFixedWidth(80)
+ conn_layout.addWidget(self.connect_btn)
+
+ self.disconnect_btn = QPushButton("断开")
+ self.disconnect_btn.setProperty("secondary", True)
+ self.disconnect_btn.setFixedWidth(80)
+ self.disconnect_btn.setEnabled(False)
+ conn_layout.addWidget(self.disconnect_btn)
+
+ layout.addWidget(conn_group)
+
+ # 主分割器
+ main_splitter = QSplitter(Qt.Horizontal)
+ layout.addWidget(main_splitter, 1)
+
+ # 左侧:表浏览器
+ left_widget = self._create_table_browser()
+ main_splitter.addWidget(left_widget)
+
+ # 右侧:查询和结果
+ right_widget = self._create_query_area()
+ main_splitter.addWidget(right_widget)
+
+ # 设置分割比例
+ main_splitter.setSizes([300, 700])
+
+ def _create_table_browser(self) -> QWidget:
+ """创建表浏览器"""
+ widget = QWidget()
+ layout = QVBoxLayout(widget)
+ layout.setContentsMargins(0, 0, 8, 0)
+
+ # 标题和刷新按钮
+ header_layout = QHBoxLayout()
+ header_layout.addWidget(QLabel("表结构"))
+ self.refresh_tables_btn = QPushButton("刷新")
+ self.refresh_tables_btn.setProperty("secondary", True)
+ self.refresh_tables_btn.setEnabled(False)
+ header_layout.addWidget(self.refresh_tables_btn)
+ layout.addLayout(header_layout)
+
+ # 表树形视图
+ self.table_tree = QTreeWidget()
+ self.table_tree.setHeaderLabels(["名称", "行数", "最后更新"])
+ self.table_tree.header().setSectionResizeMode(0, QHeaderView.Stretch)
+ self.table_tree.setColumnWidth(1, 80)
+ self.table_tree.setColumnWidth(2, 130)
+ layout.addWidget(self.table_tree, 1)
+
+ return widget
+
+ def _create_query_area(self) -> QWidget:
+ """创建查询区域"""
+ widget = QWidget()
+ layout = QVBoxLayout(widget)
+ layout.setContentsMargins(8, 0, 0, 0)
+
+ # 查询输入区
+ query_group = QGroupBox("SQL 查询")
+ query_layout = QVBoxLayout(query_group)
+
+ # 模板选择
+ template_layout = QHBoxLayout()
+ template_layout.addWidget(QLabel("常用查询:"))
+ self.template_combo = QComboBox()
+ self.template_combo.addItem("-- 选择模板 --")
+ for name in QUERY_TEMPLATES.keys():
+ self.template_combo.addItem(name)
+ template_layout.addWidget(self.template_combo, 1)
+ query_layout.addLayout(template_layout)
+
+ # SQL 编辑器
+ self.sql_editor = QPlainTextEdit()
+ self.sql_editor.setObjectName("sqlEditor")
+ self.sql_editor.setPlaceholderText("输入 SQL 查询语句...")
+ self.sql_editor.setFont(QFont("Consolas", 11))
+ self.sql_editor.setMaximumHeight(150)
+ query_layout.addWidget(self.sql_editor)
+
+ # 执行按钮
+ exec_layout = QHBoxLayout()
+ exec_layout.addStretch()
+
+ self.exec_btn = QPushButton("执行查询 (Ctrl+Enter)")
+ self.exec_btn.setEnabled(False)
+ exec_layout.addWidget(self.exec_btn)
+
+ query_layout.addLayout(exec_layout)
+ layout.addWidget(query_group)
+
+ # 结果区域
+ result_group = QGroupBox("查询结果")
+ result_layout = QVBoxLayout(result_group)
+
+ # 结果表格
+ self.result_table = QTableWidget()
+ self.result_table.setAlternatingRowColors(True)
+ self.result_table.horizontalHeader().setStretchLastSection(True)
+ result_layout.addWidget(self.result_table, 1)
+
+ # 结果统计
+ self.result_label = QLabel("就绪")
+ self.result_label.setProperty("subheading", True)
+ result_layout.addWidget(self.result_label)
+
+ layout.addWidget(result_group, 1)
+
+ return widget
+
+ def _connect_signals(self):
+ """连接信号"""
+ # 连接按钮
+ self.show_dsn_btn.toggled.connect(self._toggle_dsn_visibility)
+ self.connect_btn.clicked.connect(self._connect_db)
+ self.disconnect_btn.clicked.connect(self._disconnect_db)
+ self.refresh_tables_btn.clicked.connect(self._refresh_tables)
+
+ # 模板选择
+ self.template_combo.currentIndexChanged.connect(self._on_template_selected)
+
+ # 执行查询
+ self.exec_btn.clicked.connect(self._execute_query)
+
+ # 表双击
+ self.table_tree.itemDoubleClicked.connect(self._on_table_double_clicked)
+
+ # 工作线程信号
+ self.db_worker.connection_status.connect(self._on_connection_status)
+ self.db_worker.tables_loaded.connect(self._on_tables_loaded)
+ self.db_worker.query_finished.connect(self._on_query_finished)
+ self.db_worker.query_error.connect(self._on_query_error)
+
+ def _load_dsn_from_env(self):
+ """从环境变量加载 DSN"""
+ env_vars = self.config_helper.load_env()
+ dsn = env_vars.get("PG_DSN", "")
+ if dsn:
+ self.dsn_edit.setText(dsn)
+
+ def _toggle_dsn_visibility(self, checked: bool):
+ """切换 DSN 可见性"""
+ self.dsn_edit.setEchoMode(
+ QLineEdit.Normal if checked else QLineEdit.Password
+ )
+ self.show_dsn_btn.setText("隐藏" if checked else "显示")
+
+ def _connect_db(self):
+ """连接数据库"""
+ dsn = self.dsn_edit.text().strip()
+ if not dsn:
+ QMessageBox.warning(self, "提示", "请输入数据库连接字符串")
+ return
+
+ self.connect_btn.setEnabled(False)
+ self.connect_btn.setText("连接中...")
+ self.db_worker.connect_db(dsn)
+
+ def _disconnect_db(self):
+ """断开数据库连接"""
+ self.db_worker.disconnect_db()
+
+ def _refresh_tables(self):
+ """刷新表列表"""
+ self.db_worker.load_tables()
+
+ def _on_connection_status(self, connected: bool, message: str):
+ """处理连接状态变化"""
+ self._connected = connected
+ self.connect_btn.setEnabled(not connected)
+ self.connect_btn.setText("连接")
+ self.disconnect_btn.setEnabled(connected)
+ self.refresh_tables_btn.setEnabled(connected)
+ self.exec_btn.setEnabled(connected)
+
+ self.connection_changed.emit(connected, message)
+
+ if connected:
+ # 自动加载表列表
+ self._refresh_tables()
+
+ def _on_tables_loaded(self, tables_dict: dict):
+ """处理表列表加载完成"""
+ self.table_tree.clear()
+
+ for schema, tables in tables_dict.items():
+ schema_item = QTreeWidgetItem([schema, "", ""])
+ schema_item.setExpanded(True)
+
+ for table_name, row_count, updated_at in tables:
+ table_item = QTreeWidgetItem([table_name, str(row_count), updated_at])
+ table_item.setData(0, Qt.UserRole, f"{schema}.{table_name}")
+ schema_item.addChild(table_item)
+
+ self.table_tree.addTopLevelItem(schema_item)
+
+ def _on_template_selected(self, index: int):
+ """模板选择变化"""
+ if index <= 0:
+ return
+
+ template_name = self.template_combo.currentText()
+ if template_name in QUERY_TEMPLATES:
+ self.sql_editor.setPlainText(QUERY_TEMPLATES[template_name].strip())
+
+ # 重置选择
+ self.template_combo.setCurrentIndex(0)
+
+ def _on_table_double_clicked(self, item: QTreeWidgetItem, column: int):
+ """表双击事件"""
+ full_name = item.data(0, Qt.UserRole)
+ if full_name:
+ # 生成预览查询
+ sql = f"SELECT * FROM {full_name} LIMIT 100;"
+ self.sql_editor.setPlainText(sql)
+ self._execute_query()
+
+ def _execute_query(self):
+ """执行查询"""
+ sql = self.sql_editor.toPlainText().strip()
+ if not sql:
+ QMessageBox.warning(self, "提示", "请输入 SQL 语句")
+ return
+
+ self.exec_btn.setEnabled(False)
+ self.exec_btn.setText("执行中...")
+ self.result_label.setText("正在查询...")
+
+ self.db_worker.execute_query(sql)
+
+ def _on_query_finished(self, columns: list, rows: list):
+ """查询完成"""
+ self.exec_btn.setEnabled(True)
+ self.exec_btn.setText("执行查询 (Ctrl+Enter)")
+
+ # 更新结果表格
+ self.result_table.clear()
+ self.result_table.setColumnCount(len(columns))
+ self.result_table.setRowCount(len(rows))
+ self.result_table.setHorizontalHeaderLabels(columns)
+
+ for row_idx, row_data in enumerate(rows):
+ for col_idx, col_name in enumerate(columns):
+ value = row_data.get(col_name, "")
+ item = QTableWidgetItem(str(value) if value is not None else "NULL")
+ if value is None:
+ item.setForeground(Qt.gray)
+ self.result_table.setItem(row_idx, col_idx, item)
+
+ # 更新统计
+ self.result_label.setText(f"返回 {len(rows)} 行, {len(columns)} 列")
+
+ def _on_query_error(self, error: str):
+ """查询错误"""
+ self.exec_btn.setEnabled(True)
+ self.exec_btn.setText("执行查询 (Ctrl+Enter)")
+ self.result_label.setText(f"错误: {error}")
+ QMessageBox.critical(self, "查询错误", error)
+
+ def close_connection(self):
+ """关闭连接"""
+ if self._connected:
+ self.db_worker.disconnect_db()
+
+ def keyPressEvent(self, event):
+ """键盘事件"""
+ # Ctrl+Enter 执行查询
+ if event.modifiers() == Qt.ControlModifier and event.key() == Qt.Key_Return:
+ if self._connected:
+ self._execute_query()
+ else:
+ super().keyPressEvent(event)
diff --git a/etl_billiards/gui/widgets/env_editor.py b/etl_billiards/gui/widgets/env_editor.py
new file mode 100644
index 0000000..d27ce23
--- /dev/null
+++ b/etl_billiards/gui/widgets/env_editor.py
@@ -0,0 +1,318 @@
+# -*- coding: utf-8 -*-
+"""环境变量编辑器"""
+
+from PySide6.QtWidgets import (
+ QWidget, QVBoxLayout, QHBoxLayout, QGridLayout,
+ QGroupBox, QLabel, QLineEdit, QPushButton, QScrollArea,
+ QFrame, QMessageBox, QFileDialog, QCheckBox
+)
+from PySide6.QtCore import Qt, Signal
+
+from ..utils.config_helper import ConfigHelper, ENV_GROUPS
+
+
+class EnvEditor(QWidget):
+ """环境变量编辑器"""
+
+ # 信号
+ config_saved = Signal() # 配置保存成功
+
+ def __init__(self, parent=None):
+ super().__init__(parent)
+ self.config_helper = ConfigHelper()
+ self.field_widgets = {} # 存储字段控件
+ self.show_sensitive = False
+
+ self._init_ui()
+ self.load_config()
+
+ def _init_ui(self):
+ """初始化界面"""
+ layout = QVBoxLayout(self)
+ layout.setContentsMargins(16, 16, 16, 16)
+ layout.setSpacing(16)
+
+ # 标题和按钮
+ header_layout = QHBoxLayout()
+
+ title = QLabel("环境配置")
+ title.setProperty("heading", True)
+ header_layout.addWidget(title)
+
+ header_layout.addStretch()
+
+ self.show_sensitive_check = QCheckBox("显示敏感信息")
+ self.show_sensitive_check.stateChanged.connect(self._toggle_sensitive)
+ header_layout.addWidget(self.show_sensitive_check)
+
+ self.import_btn = QPushButton("导入")
+ self.import_btn.setProperty("secondary", True)
+ self.import_btn.clicked.connect(self._import_config)
+ header_layout.addWidget(self.import_btn)
+
+ self.export_btn = QPushButton("导出")
+ self.export_btn.setProperty("secondary", True)
+ self.export_btn.clicked.connect(self._export_config)
+ header_layout.addWidget(self.export_btn)
+
+ self.reload_btn = QPushButton("重新加载")
+ self.reload_btn.setProperty("secondary", True)
+ self.reload_btn.clicked.connect(self.load_config)
+ header_layout.addWidget(self.reload_btn)
+
+ self.save_btn = QPushButton("保存")
+ self.save_btn.clicked.connect(self._save_config)
+ header_layout.addWidget(self.save_btn)
+
+ layout.addLayout(header_layout)
+
+ # 配置文件路径
+ path_layout = QHBoxLayout()
+ path_layout.addWidget(QLabel("配置文件:"))
+ self.path_label = QLabel(str(self.config_helper.env_path))
+ self.path_label.setProperty("subheading", True)
+ path_layout.addWidget(self.path_label, 1)
+ layout.addLayout(path_layout)
+
+ # 滚动区域
+ scroll_area = QScrollArea()
+ scroll_area.setWidgetResizable(True)
+ scroll_area.setFrameShape(QFrame.NoFrame)
+ layout.addWidget(scroll_area, 1)
+
+ # 配置组容器
+ config_widget = QWidget()
+ self.config_layout = QVBoxLayout(config_widget)
+ self.config_layout.setSpacing(16)
+
+ # 创建各配置组
+ self._create_config_groups()
+
+ # 弹性空间
+ self.config_layout.addStretch()
+
+ scroll_area.setWidget(config_widget)
+
+ # 验证结果
+ self.validation_label = QLabel()
+ self.validation_label.setWordWrap(True)
+ layout.addWidget(self.validation_label)
+
+ def _create_config_groups(self):
+ """创建配置分组"""
+ for group_id, group_info in ENV_GROUPS.items():
+ group = QGroupBox(group_info["title"])
+ grid_layout = QGridLayout(group)
+
+ for row, key in enumerate(group_info["keys"]):
+ # 标签
+ label = QLabel(f"{key}:")
+ label.setMinimumWidth(180)
+ grid_layout.addWidget(label, row, 0)
+
+ # 输入框
+ edit = QLineEdit()
+ edit.setPlaceholderText(self._get_placeholder(key))
+
+ # 敏感字段处理
+ if key in group_info.get("sensitive", []):
+ edit.setEchoMode(QLineEdit.Password)
+ edit.setProperty("sensitive", True)
+
+ edit.textChanged.connect(self._on_value_changed)
+ grid_layout.addWidget(edit, row, 1)
+
+ # 存储控件引用
+ self.field_widgets[key] = edit
+
+ self.config_layout.addWidget(group)
+
+ # 其他配置组(动态添加)
+ self.other_group = QGroupBox("其他配置")
+ self.other_layout = QGridLayout(self.other_group)
+ self.other_group.setVisible(False)
+ self.config_layout.addWidget(self.other_group)
+
+ def load_config(self):
+ """加载配置"""
+ env_vars = self.config_helper.load_env()
+
+ # 更新已知字段
+ for key, edit in self.field_widgets.items():
+ value = env_vars.get(key, "")
+ edit.blockSignals(True)
+ edit.setText(value)
+ edit.blockSignals(False)
+
+ # 处理其他字段
+ known_keys = set(self.field_widgets.keys())
+ other_keys = [k for k in env_vars.keys() if k not in known_keys]
+
+ # 清除旧的其他字段
+ while self.other_layout.count():
+ item = self.other_layout.takeAt(0)
+ if item.widget():
+ item.widget().deleteLater()
+
+ # 添加其他字段
+ if other_keys:
+ self.other_group.setVisible(True)
+ for row, key in enumerate(sorted(other_keys)):
+ label = QLabel(f"{key}:")
+ self.other_layout.addWidget(label, row, 0)
+
+ edit = QLineEdit(env_vars[key])
+ edit.textChanged.connect(self._on_value_changed)
+ self.other_layout.addWidget(edit, row, 1)
+
+ self.field_widgets[key] = edit
+ else:
+ self.other_group.setVisible(False)
+
+ self._validate()
+
+ def _save_config(self):
+ """保存配置"""
+ # 收集所有值
+ env_vars = {}
+ for key, edit in self.field_widgets.items():
+ value = edit.text().strip()
+ if value:
+ env_vars[key] = value
+
+ # 验证
+ errors = self.config_helper.validate_env(env_vars)
+ if errors:
+ reply = QMessageBox.question(
+ self,
+ "验证警告",
+ "配置存在以下问题:\n\n" + "\n".join(f"• {e}" for e in errors) + "\n\n是否仍要保存?",
+ QMessageBox.Yes | QMessageBox.No,
+ QMessageBox.No
+ )
+ if reply == QMessageBox.No:
+ return
+
+ # 保存
+ if self.config_helper.save_env(env_vars):
+ QMessageBox.information(self, "成功", "配置已保存")
+ self.config_saved.emit()
+ else:
+ QMessageBox.critical(self, "错误", "保存配置失败")
+
+ def _import_config(self):
+ """导入配置"""
+ file_path, _ = QFileDialog.getOpenFileName(
+ self,
+ "导入配置文件",
+ "",
+ "环境文件 (*.env);;所有文件 (*.*)"
+ )
+ if not file_path:
+ return
+
+ try:
+ from pathlib import Path
+ temp_helper = ConfigHelper(Path(file_path))
+ env_vars = temp_helper.load_env()
+
+ # 更新字段
+ for key, value in env_vars.items():
+ if key in self.field_widgets:
+ self.field_widgets[key].setText(value)
+
+ QMessageBox.information(self, "成功", f"已导入 {len(env_vars)} 个配置项")
+ except Exception as e:
+ QMessageBox.critical(self, "错误", f"导入失败: {e}")
+
+ def _export_config(self):
+ """导出配置"""
+ file_path, _ = QFileDialog.getSaveFileName(
+ self,
+ "导出配置文件",
+ ".env.backup",
+ "环境文件 (*.env);;所有文件 (*.*)"
+ )
+ if not file_path:
+ return
+
+ try:
+ from pathlib import Path
+
+ # 收集当前值
+ env_vars = {}
+ for key, edit in self.field_widgets.items():
+ value = edit.text().strip()
+ if value:
+ env_vars[key] = value
+
+ # 保存到指定路径
+ temp_helper = ConfigHelper(Path(file_path))
+ if temp_helper.save_env(env_vars):
+ QMessageBox.information(self, "成功", f"配置已导出到:\n{file_path}")
+ else:
+ QMessageBox.critical(self, "错误", "导出失败")
+ except Exception as e:
+ QMessageBox.critical(self, "错误", f"导出失败: {e}")
+
+ def _toggle_sensitive(self, state: int):
+ """切换敏感信息显示"""
+ self.show_sensitive = state == Qt.Checked
+
+ for key, edit in self.field_widgets.items():
+ if edit.property("sensitive"):
+ edit.setEchoMode(
+ QLineEdit.Normal if self.show_sensitive else QLineEdit.Password
+ )
+
+ def _on_value_changed(self):
+ """值变化时验证"""
+ self._validate()
+
+ def _validate(self):
+ """验证配置"""
+ env_vars = {}
+ for key, edit in self.field_widgets.items():
+ value = edit.text().strip()
+ if value:
+ env_vars[key] = value
+
+ errors = self.config_helper.validate_env(env_vars)
+
+ if errors:
+ self.validation_label.setText("⚠ " + "; ".join(errors))
+ self.validation_label.setProperty("status", "warning")
+ else:
+ self.validation_label.setText("✓ 配置验证通过")
+ self.validation_label.setProperty("status", "success")
+
+ self.validation_label.style().unpolish(self.validation_label)
+ self.validation_label.style().polish(self.validation_label)
+
+ @staticmethod
+ def _get_placeholder(key: str) -> str:
+ """获取占位符提示"""
+ placeholders = {
+ "PG_DSN": "postgresql://user:password@host:5432/dbname",
+ "PG_HOST": "localhost",
+ "PG_PORT": "5432",
+ "PG_NAME": "billiards",
+ "PG_USER": "postgres",
+ "PG_PASSWORD": "密码",
+ "API_BASE": "https://pc.ficoo.vip/apiprod/admin/v1",
+ "API_TOKEN": "Bearer token",
+ "API_TIMEOUT": "20",
+ "API_PAGE_SIZE": "200",
+ "STORE_ID": "门店ID (数字)",
+ "TIMEZONE": "Asia/Taipei",
+ "EXPORT_ROOT": "export/JSON",
+ "LOG_ROOT": "export/LOG",
+ "FETCH_ROOT": "JSON 抓取输出目录",
+ "INGEST_SOURCE_DIR": "本地 JSON 输入目录",
+ "PIPELINE_FLOW": "FULL / FETCH_ONLY / INGEST_ONLY",
+ "RUN_TASKS": "任务列表,逗号分隔",
+ "OVERLAP_SECONDS": "3600",
+ "WINDOW_START": "2025-07-01 00:00:00",
+ "WINDOW_END": "2025-08-01 00:00:00",
+ }
+ return placeholders.get(key, "")
diff --git a/etl_billiards/gui/widgets/log_viewer.py b/etl_billiards/gui/widgets/log_viewer.py
new file mode 100644
index 0000000..3172468
--- /dev/null
+++ b/etl_billiards/gui/widgets/log_viewer.py
@@ -0,0 +1,247 @@
+# -*- coding: utf-8 -*-
+"""日志查看器"""
+
+import re
+from datetime import datetime
+
+from PySide6.QtWidgets import (
+ QWidget, QVBoxLayout, QHBoxLayout,
+ QPlainTextEdit, QPushButton, QLineEdit, QLabel,
+ QComboBox, QCheckBox, QFileDialog, QMessageBox
+)
+from PySide6.QtCore import Qt, Signal, Slot
+from PySide6.QtGui import QTextCharFormat, QColor, QFont, QTextCursor
+
+
+class LogViewer(QWidget):
+ """日志查看器"""
+
+ # 信号
+ log_cleared = Signal()
+
+ def __init__(self, parent=None):
+ super().__init__(parent)
+ self.max_lines = 10000
+ self.auto_scroll = True
+ self.filter_text = ""
+ self.filter_level = "ALL"
+ self._all_logs = [] # 存储所有日志
+
+ self._init_ui()
+ self._connect_signals()
+
+ def _init_ui(self):
+ """初始化界面"""
+ layout = QVBoxLayout(self)
+ layout.setContentsMargins(16, 16, 16, 16)
+ layout.setSpacing(8)
+
+ # 标题和工具栏
+ header_layout = QHBoxLayout()
+
+ title = QLabel("执行日志")
+ title.setProperty("heading", True)
+ header_layout.addWidget(title)
+
+ header_layout.addStretch()
+
+ # 日志级别过滤
+ header_layout.addWidget(QLabel("级别:"))
+ self.level_combo = QComboBox()
+ self.level_combo.addItems(["ALL", "INFO", "WARNING", "ERROR", "DEBUG"])
+ self.level_combo.setFixedWidth(100)
+ header_layout.addWidget(self.level_combo)
+
+ # 搜索框
+ header_layout.addWidget(QLabel("搜索:"))
+ self.search_edit = QLineEdit()
+ self.search_edit.setPlaceholderText("输入关键字...")
+ self.search_edit.setFixedWidth(200)
+ header_layout.addWidget(self.search_edit)
+
+ # 自动滚动
+ self.auto_scroll_check = QCheckBox("自动滚动")
+ self.auto_scroll_check.setChecked(True)
+ header_layout.addWidget(self.auto_scroll_check)
+
+ layout.addLayout(header_layout)
+
+ # 日志文本区域
+ self.log_text = QPlainTextEdit()
+ self.log_text.setObjectName("logViewer")
+ self.log_text.setReadOnly(True)
+ self.log_text.setFont(QFont("Consolas", 10))
+ self.log_text.setLineWrapMode(QPlainTextEdit.NoWrap)
+ layout.addWidget(self.log_text, 1)
+
+ # 底部工具栏
+ footer_layout = QHBoxLayout()
+
+ self.line_count_label = QLabel("0 行")
+ self.line_count_label.setProperty("subheading", True)
+ footer_layout.addWidget(self.line_count_label)
+
+ footer_layout.addStretch()
+
+ self.copy_btn = QPushButton("复制全部")
+ self.copy_btn.setProperty("secondary", True)
+ footer_layout.addWidget(self.copy_btn)
+
+ self.export_btn = QPushButton("导出")
+ self.export_btn.setProperty("secondary", True)
+ footer_layout.addWidget(self.export_btn)
+
+ self.clear_btn = QPushButton("清空")
+ self.clear_btn.setProperty("secondary", True)
+ footer_layout.addWidget(self.clear_btn)
+
+ layout.addLayout(footer_layout)
+
+ def _connect_signals(self):
+ """连接信号"""
+ self.level_combo.currentTextChanged.connect(self._apply_filter)
+ self.search_edit.textChanged.connect(self._apply_filter)
+ self.auto_scroll_check.stateChanged.connect(self._toggle_auto_scroll)
+ self.copy_btn.clicked.connect(self._copy_all)
+ self.export_btn.clicked.connect(self._export_log)
+ self.clear_btn.clicked.connect(self._clear_log)
+
+ @Slot(str)
+ def append_log(self, text: str):
+ """追加日志"""
+ # 添加时间戳(如果没有)
+ if not re.match(r'^\d{4}-\d{2}-\d{2}', text) and not text.startswith('['):
+ timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
+ text = f"[{timestamp}] {text}"
+
+ # 存储到全部日志
+ self._all_logs.append(text)
+
+ # 限制日志行数
+ if len(self._all_logs) > self.max_lines:
+ self._all_logs = self._all_logs[-self.max_lines:]
+
+ # 检查是否通过过滤器
+ if self._matches_filter(text):
+ self._append_formatted_line(text)
+
+ # 更新行数
+ self._update_line_count()
+
+ def _append_formatted_line(self, text: str):
+ """追加格式化的行"""
+ cursor = self.log_text.textCursor()
+ cursor.movePosition(QTextCursor.End)
+
+ # 设置格式
+ fmt = QTextCharFormat()
+
+ text_lower = text.lower()
+ if "[error]" in text_lower or "错误" in text or "失败" in text:
+ fmt.setForeground(QColor("#d93025"))
+ fmt.setFontWeight(QFont.Bold)
+ elif "[warning]" in text_lower or "警告" in text or "warn" in text_lower:
+ fmt.setForeground(QColor("#f9ab00"))
+ elif "[info]" in text_lower:
+ fmt.setForeground(QColor("#1a73e8"))
+ elif "[debug]" in text_lower:
+ fmt.setForeground(QColor("#9aa0a6"))
+ elif "[gui]" in text_lower:
+ fmt.setForeground(QColor("#1e8e3e"))
+ else:
+ fmt.setForeground(QColor("#333333"))
+
+ cursor.insertText(text + "\n", fmt)
+
+ # 自动滚动
+ if self.auto_scroll:
+ self.log_text.verticalScrollBar().setValue(
+ self.log_text.verticalScrollBar().maximum()
+ )
+
+ def _matches_filter(self, text: str) -> bool:
+ """检查是否匹配过滤器"""
+ # 级别过滤
+ if self.filter_level != "ALL":
+ level_marker = f"[{self.filter_level}]"
+ if level_marker.lower() not in text.lower():
+ return False
+
+ # 文本过滤
+ if self.filter_text:
+ if self.filter_text.lower() not in text.lower():
+ return False
+
+ return True
+
+ def _apply_filter(self):
+ """应用过滤器"""
+ self.filter_level = self.level_combo.currentText()
+ self.filter_text = self.search_edit.text().strip()
+
+ # 重新显示日志
+ self.log_text.clear()
+ for line in self._all_logs:
+ if self._matches_filter(line):
+ self._append_formatted_line(line)
+
+ self._update_line_count()
+
+ def _toggle_auto_scroll(self, state: int):
+ """切换自动滚动"""
+ self.auto_scroll = state == Qt.Checked
+
+ def _copy_all(self):
+ """复制全部日志"""
+ from PySide6.QtWidgets import QApplication
+ text = self.log_text.toPlainText()
+ QApplication.clipboard().setText(text)
+ QMessageBox.information(self, "提示", "日志已复制到剪贴板")
+
+ def _export_log(self):
+ """导出日志"""
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
+ default_name = f"etl_log_{timestamp}.txt"
+
+ file_path, _ = QFileDialog.getSaveFileName(
+ self,
+ "导出日志",
+ default_name,
+ "文本文件 (*.txt);;日志文件 (*.log);;所有文件 (*.*)"
+ )
+
+ if not file_path:
+ return
+
+ try:
+ with open(file_path, "w", encoding="utf-8") as f:
+ f.write(self.log_text.toPlainText())
+ QMessageBox.information(self, "成功", f"日志已导出到:\n{file_path}")
+ except Exception as e:
+ QMessageBox.critical(self, "错误", f"导出失败: {e}")
+
+ def _clear_log(self):
+ """清空日志"""
+ reply = QMessageBox.question(
+ self,
+ "确认",
+ "确定要清空所有日志吗?",
+ QMessageBox.Yes | QMessageBox.No,
+ QMessageBox.No
+ )
+
+ if reply == QMessageBox.Yes:
+ self._all_logs.clear()
+ self.log_text.clear()
+ self._update_line_count()
+ self.log_cleared.emit()
+
+ def _update_line_count(self):
+ """更新行数显示"""
+ visible_count = self.log_text.document().blockCount() - 1
+ total_count = len(self._all_logs)
+
+ if visible_count < total_count:
+ self.line_count_label.setText(f"{visible_count} / {total_count} 行")
+ else:
+ self.line_count_label.setText(f"{total_count} 行")
diff --git a/etl_billiards/gui/widgets/settings_dialog.py b/etl_billiards/gui/widgets/settings_dialog.py
new file mode 100644
index 0000000..1d6a47a
--- /dev/null
+++ b/etl_billiards/gui/widgets/settings_dialog.py
@@ -0,0 +1,166 @@
+# -*- coding: utf-8 -*-
+"""应用程序设置对话框"""
+
+from pathlib import Path
+
+from PySide6.QtWidgets import (
+ QDialog, QVBoxLayout, QHBoxLayout, QGridLayout,
+ QGroupBox, QLabel, QLineEdit, QPushButton,
+ QFileDialog, QMessageBox, QDialogButtonBox
+)
+from PySide6.QtCore import Qt
+
+from ..utils.app_settings import app_settings
+
+
+class SettingsDialog(QDialog):
+ """设置对话框"""
+
+ def __init__(self, parent=None):
+ super().__init__(parent)
+ self.setWindowTitle("应用程序设置")
+ self.setMinimumWidth(600)
+ self._init_ui()
+ self._load_settings()
+
+ def _init_ui(self):
+ layout = QVBoxLayout(self)
+
+ # ETL 项目路径
+ project_group = QGroupBox("ETL 项目配置")
+ project_layout = QGridLayout(project_group)
+
+ project_layout.addWidget(QLabel("ETL 项目路径:"), 0, 0)
+ self.project_path_edit = QLineEdit()
+ self.project_path_edit.setPlaceholderText("例: etl_billiards")
+ project_layout.addWidget(self.project_path_edit, 0, 1)
+
+ browse_project_btn = QPushButton("浏览...")
+ browse_project_btn.clicked.connect(self._browse_project_path)
+ project_layout.addWidget(browse_project_btn, 0, 2)
+
+ project_layout.addWidget(QLabel(".env 文件路径:"), 1, 0)
+ self.env_path_edit = QLineEdit()
+ self.env_path_edit.setPlaceholderText("例: etl_billiards/.env")
+ project_layout.addWidget(self.env_path_edit, 1, 1)
+
+ browse_env_btn = QPushButton("浏览...")
+ browse_env_btn.clicked.connect(self._browse_env_path)
+ project_layout.addWidget(browse_env_btn, 1, 2)
+
+ # 验证按钮
+ validate_btn = QPushButton("验证配置")
+ validate_btn.clicked.connect(self._validate_config)
+ project_layout.addWidget(validate_btn, 2, 1)
+
+ # 验证结果
+ self.validation_label = QLabel()
+ self.validation_label.setWordWrap(True)
+ project_layout.addWidget(self.validation_label, 3, 0, 1, 3)
+
+ layout.addWidget(project_group)
+
+ # 说明
+ note = QLabel(
+ "说明:\n"
+ "• ETL 项目路径:包含 cli/main.py 的目录\n"
+ "• .env 文件路径:环境变量配置文件\n"
+ "• 配置后才能正常执行 ETL 任务"
+ )
+ note.setProperty("subheading", True)
+ note.setWordWrap(True)
+ layout.addWidget(note)
+
+ layout.addStretch()
+
+ # 按钮
+ btn_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
+ btn_box.accepted.connect(self._save_and_accept)
+ btn_box.rejected.connect(self.reject)
+ layout.addWidget(btn_box)
+
+ def _load_settings(self):
+ """加载设置"""
+ self.project_path_edit.setText(app_settings.etl_project_path)
+ self.env_path_edit.setText(app_settings.env_file_path)
+ self._validate_config()
+
+ def _browse_project_path(self):
+ """浏览项目路径"""
+ path = QFileDialog.getExistingDirectory(
+ self, "选择 ETL 项目目录",
+ self.project_path_edit.text() or str(Path.home())
+ )
+ if path:
+ self.project_path_edit.setText(path)
+ # 自动填充 .env 路径
+ env_path = Path(path) / ".env"
+ if env_path.exists():
+ self.env_path_edit.setText(str(env_path))
+ self._validate_config()
+
+ def _browse_env_path(self):
+ """浏览 .env 文件"""
+ path, _ = QFileDialog.getOpenFileName(
+ self, "选择 .env 文件",
+ self.env_path_edit.text() or str(Path.home()),
+ "环境变量文件 (*.env);;所有文件 (*.*)"
+ )
+ if path:
+ self.env_path_edit.setText(path)
+ self._validate_config()
+
+ def _validate_config(self):
+ """验证配置"""
+ project_path = self.project_path_edit.text().strip()
+ env_path = self.env_path_edit.text().strip()
+
+ issues = []
+
+ if not project_path:
+ issues.append("• 未设置 ETL 项目路径")
+ else:
+ p = Path(project_path)
+ if not p.exists():
+ issues.append(f"• ETL 项目路径不存在")
+ elif not (p / "cli" / "main.py").exists():
+ issues.append(f"• 找不到 cli/main.py")
+
+ if not env_path:
+ issues.append("• 未设置 .env 文件路径")
+ elif not Path(env_path).exists():
+ issues.append("• .env 文件不存在")
+
+ if issues:
+ self.validation_label.setText("❌ 配置问题:\n" + "\n".join(issues))
+ self.validation_label.setStyleSheet("color: #d93025;")
+ else:
+ self.validation_label.setText("✅ 配置有效")
+ self.validation_label.setStyleSheet("color: #1e8e3e;")
+
+ def _save_and_accept(self):
+ """保存并关闭"""
+ project_path = self.project_path_edit.text().strip()
+ env_path = self.env_path_edit.text().strip()
+
+ # 简单验证
+ if project_path:
+ p = Path(project_path)
+ if not p.exists():
+ QMessageBox.warning(self, "警告", "ETL 项目路径不存在")
+ return
+ if not (p / "cli" / "main.py").exists():
+ reply = QMessageBox.question(
+ self, "确认",
+ "找不到 cli/main.py,确定要使用此路径吗?",
+ QMessageBox.Yes | QMessageBox.No
+ )
+ if reply == QMessageBox.No:
+ return
+
+ # 保存设置
+ app_settings.etl_project_path = project_path
+ if env_path:
+ app_settings.env_file_path = env_path
+
+ self.accept()
diff --git a/etl_billiards/gui/widgets/task_manager.py b/etl_billiards/gui/widgets/task_manager.py
new file mode 100644
index 0000000..91f5689
--- /dev/null
+++ b/etl_billiards/gui/widgets/task_manager.py
@@ -0,0 +1,1948 @@
+# -*- coding: utf-8 -*-
+"""任务管理器面板"""
+
+import uuid
+from datetime import datetime, timedelta
+from typing import Dict, List, Optional
+
+from PySide6.QtWidgets import (
+ QWidget, QVBoxLayout, QHBoxLayout, QSplitter, QGridLayout,
+ QGroupBox, QLabel, QPushButton, QTableWidget, QTableWidgetItem,
+ QHeaderView, QMessageBox, QMenu, QAbstractItemView, QDialog,
+ QComboBox, QSpinBox, QLineEdit, QCheckBox, QTimeEdit, QDateEdit,
+ QListWidget, QListWidgetItem, QDialogButtonBox, QTabWidget, QFrame,
+ QTextEdit, QPlainTextEdit
+)
+from PySide6.QtCore import Qt, Signal, QTimer, QTime, QDate
+from PySide6.QtGui import QColor, QAction, QFont
+
+from ..models.task_model import QueuedTask, TaskConfig, TaskStatus
+from ..models.schedule_model import (
+ ScheduledTask, ScheduleConfig, ScheduleType, IntervalUnit, ScheduleStore,
+ ScheduleExecutionRecord
+)
+from ..utils.cli_builder import CLIBuilder
+from ..utils.app_settings import app_settings
+from ..workers.task_worker import TaskWorker
+
+
+# 可调度的任务列表(包含所有 ODS 任务 + DWD/质量检查任务)
+SCHEDULABLE_TASKS = [
+ # ODS 数据抓取任务(与 task_panel.AUTO_UPDATE_TASKS 保持一致)
+ ("ODS_PAYMENT", "支付流水"),
+ ("ODS_MEMBER", "会员档案"),
+ ("ODS_MEMBER_CARD", "会员储值卡"),
+ ("ODS_MEMBER_BALANCE", "会员余额变动"),
+ ("ODS_SETTLEMENT_RECORDS", "结账记录"),
+ ("ODS_TABLE_USE", "台费计费流水"),
+ ("ODS_ASSISTANT_ACCOUNT", "助教账号"),
+ ("ODS_ASSISTANT_LEDGER", "助教流水"),
+ ("ODS_ASSISTANT_ABOLISH", "助教作废"),
+ ("ODS_REFUND", "退款流水"),
+ ("ODS_PLATFORM_COUPON", "平台券核销"),
+ ("ODS_RECHARGE_SETTLE", "充值结算"),
+ ("ODS_SETTLEMENT_TICKET", "结账小票"),
+ # DWD 和质量检查任务
+ ("DWD_LOAD_FROM_ODS", "ODS→DWD 装载"),
+ ("DWD_QUALITY_CHECK", "DWD 质量检查"),
+ ("DATA_INTEGRITY_CHECK", "数据完整性检查"),
+ ("CHECK_CUTOFF", "检查 Cutoff"),
+]
+
+
+class TaskLogDialog(QDialog):
+ """任务日志查看对话框"""
+
+ def __init__(self, task: QueuedTask, parent=None):
+ super().__init__(parent)
+ self.task = task
+ self.setWindowTitle(f"任务日志 - {', '.join(task.config.tasks[:2])}")
+ self.setMinimumSize(800, 600)
+ self._init_ui()
+
+ def _init_ui(self):
+ layout = QVBoxLayout(self)
+
+ # 任务信息
+ info_group = QGroupBox("任务信息")
+ info_layout = QGridLayout(info_group)
+
+ info_layout.addWidget(QLabel("任务 ID:"), 0, 0)
+ info_layout.addWidget(QLabel(self.task.id), 0, 1)
+
+ info_layout.addWidget(QLabel("任务列表:"), 0, 2)
+ info_layout.addWidget(QLabel(", ".join(self.task.config.tasks)), 0, 3)
+
+ info_layout.addWidget(QLabel("状态:"), 1, 0)
+ status_label = QLabel(self._get_status_text(self.task.status))
+ status_label.setStyleSheet(f"color: {self._get_status_color(self.task.status)};")
+ info_layout.addWidget(status_label, 1, 1)
+
+ info_layout.addWidget(QLabel("退出码:"), 1, 2)
+ info_layout.addWidget(QLabel(str(self.task.exit_code) if self.task.exit_code is not None else "-"), 1, 3)
+
+ if self.task.started_at:
+ info_layout.addWidget(QLabel("开始时间:"), 2, 0)
+ info_layout.addWidget(QLabel(self.task.started_at.strftime("%Y-%m-%d %H:%M:%S")), 2, 1)
+
+ if self.task.finished_at:
+ info_layout.addWidget(QLabel("结束时间:"), 2, 2)
+ info_layout.addWidget(QLabel(self.task.finished_at.strftime("%Y-%m-%d %H:%M:%S")), 2, 3)
+
+ if self.task.started_at:
+ duration = (self.task.finished_at - self.task.started_at).total_seconds()
+ info_layout.addWidget(QLabel("耗时:"), 3, 0)
+ info_layout.addWidget(QLabel(f"{duration:.1f} 秒"), 3, 1)
+
+ layout.addWidget(info_group)
+
+ # 命令行
+ cmd_group = QGroupBox("执行命令")
+ cmd_layout = QVBoxLayout(cmd_group)
+ cmd_text = QLineEdit()
+ cmd_text.setReadOnly(True)
+ from ..utils.cli_builder import CLIBuilder
+ cli = CLIBuilder()
+ cmd_text.setText(cli.build_command_string(self.task.config))
+ cmd_layout.addWidget(cmd_text)
+
+ # 显示环境变量
+ if hasattr(self.task.config, 'env_vars') and self.task.config.env_vars:
+ env_label = QLabel("环境变量: " + ", ".join(f"{k}={v}" for k, v in self.task.config.env_vars.items()))
+ env_label.setWordWrap(True)
+ cmd_layout.addWidget(env_label)
+
+ layout.addWidget(cmd_group)
+
+ # 输出日志
+ log_group = QGroupBox("执行输出")
+ log_layout = QVBoxLayout(log_group)
+
+ self.log_text = QPlainTextEdit()
+ self.log_text.setReadOnly(True)
+ self.log_text.setFont(QFont("Consolas", 9))
+ self.log_text.setPlainText(self.task.output if self.task.output else "(无输出)")
+ log_layout.addWidget(self.log_text)
+
+ layout.addWidget(log_group)
+
+ # 错误信息
+ if self.task.error:
+ error_group = QGroupBox("错误信息")
+ error_layout = QVBoxLayout(error_group)
+ error_text = QPlainTextEdit()
+ error_text.setReadOnly(True)
+ error_text.setPlainText(self.task.error)
+ error_text.setMaximumHeight(100)
+ error_layout.addWidget(error_text)
+ layout.addWidget(error_group)
+
+ # 按钮
+ btn_layout = QHBoxLayout()
+
+ copy_btn = QPushButton("复制日志")
+ copy_btn.clicked.connect(self._copy_log)
+ btn_layout.addWidget(copy_btn)
+
+ btn_layout.addStretch()
+
+ close_btn = QPushButton("关闭")
+ close_btn.clicked.connect(self.accept)
+ btn_layout.addWidget(close_btn)
+
+ layout.addLayout(btn_layout)
+
+ def _copy_log(self):
+ """复制日志到剪贴板"""
+ from PySide6.QtWidgets import QApplication
+ QApplication.clipboard().setText(self.task.output or "")
+ QMessageBox.information(self, "提示", "日志已复制到剪贴板")
+
+ @staticmethod
+ def _get_status_text(status: TaskStatus) -> str:
+ return {
+ TaskStatus.PENDING: "待执行",
+ TaskStatus.RUNNING: "执行中",
+ TaskStatus.SUCCESS: "成功",
+ TaskStatus.FAILED: "失败",
+ TaskStatus.CANCELLED: "已取消",
+ }.get(status, "未知")
+
+ @staticmethod
+ def _get_status_color(status: TaskStatus) -> str:
+ return {
+ TaskStatus.PENDING: "#5f6368",
+ TaskStatus.RUNNING: "#1a73e8",
+ TaskStatus.SUCCESS: "#1e8e3e",
+ TaskStatus.FAILED: "#d93025",
+ TaskStatus.CANCELLED: "#9aa0a6",
+ }.get(status, "#333333")
+
+
+class ScheduleEditDialog(QDialog):
+ """调度任务编辑对话框"""
+
+ def __init__(self, task: Optional[ScheduledTask] = None, parent=None):
+ super().__init__(parent)
+ self.task = task
+ self.cli_builder = CLIBuilder()
+ self.setWindowTitle("编辑调度任务" if task else "新建调度任务")
+ self.setMinimumWidth(600)
+ self.setMinimumHeight(700)
+ self._init_ui()
+ self._connect_preview_signals()
+ if task:
+ self._load_task(task)
+ self._update_cli_preview() # 初始化预览
+
+ def _init_ui(self):
+ layout = QVBoxLayout(self)
+
+ # 基本信息
+ basic_group = QGroupBox("基本信息")
+ basic_layout = QGridLayout(basic_group)
+
+ basic_layout.addWidget(QLabel("任务名称:"), 0, 0)
+ self.name_edit = QLineEdit()
+ self.name_edit.setPlaceholderText("例: 每日数据更新")
+ basic_layout.addWidget(self.name_edit, 0, 1)
+
+ basic_layout.addWidget(QLabel("启用:"), 1, 0)
+ self.enabled_check = QCheckBox("启用此调度任务")
+ self.enabled_check.setChecked(True)
+ basic_layout.addWidget(self.enabled_check, 1, 1)
+
+ layout.addWidget(basic_group)
+
+ # 任务选择
+ task_group = QGroupBox("执行任务")
+ task_layout = QVBoxLayout(task_group)
+
+ self.task_list = QListWidget()
+ self.task_list.setSelectionMode(QListWidget.MultiSelection)
+ self.task_list.setMaximumHeight(150)
+ for code, name in SCHEDULABLE_TASKS:
+ item = QListWidgetItem(f"{name} ({code})")
+ item.setData(Qt.UserRole, code)
+ self.task_list.addItem(item)
+ task_layout.addWidget(self.task_list)
+
+ layout.addWidget(task_group)
+
+ # 调度设置
+ schedule_group = QGroupBox("调度设置")
+ schedule_layout = QVBoxLayout(schedule_group)
+
+ # 调度类型
+ type_layout = QHBoxLayout()
+ type_layout.addWidget(QLabel("调度类型:"))
+ self.schedule_type_combo = QComboBox()
+ self.schedule_type_combo.addItem("固定间隔", ScheduleType.INTERVAL)
+ self.schedule_type_combo.addItem("每天定时", ScheduleType.DAILY)
+ self.schedule_type_combo.addItem("每周定时", ScheduleType.WEEKLY)
+ self.schedule_type_combo.addItem("Cron 表达式", ScheduleType.CRON)
+ self.schedule_type_combo.currentIndexChanged.connect(self._on_type_changed)
+ type_layout.addWidget(self.schedule_type_combo, 1)
+ schedule_layout.addLayout(type_layout)
+
+ # 间隔设置
+ self.interval_widget = QWidget()
+ interval_layout = QHBoxLayout(self.interval_widget)
+ interval_layout.setContentsMargins(0, 0, 0, 0)
+ interval_layout.addWidget(QLabel("执行间隔:"))
+ self.interval_value = QSpinBox()
+ self.interval_value.setRange(1, 999)
+ self.interval_value.setValue(1)
+ interval_layout.addWidget(self.interval_value)
+ self.interval_unit = QComboBox()
+ self.interval_unit.addItem("分钟", IntervalUnit.MINUTES)
+ self.interval_unit.addItem("小时", IntervalUnit.HOURS)
+ self.interval_unit.addItem("天", IntervalUnit.DAYS)
+ self.interval_unit.setCurrentIndex(1) # 默认小时
+ interval_layout.addWidget(self.interval_unit)
+ interval_layout.addStretch()
+ schedule_layout.addWidget(self.interval_widget)
+
+ # 每日设置
+ self.daily_widget = QWidget()
+ daily_layout = QHBoxLayout(self.daily_widget)
+ daily_layout.setContentsMargins(0, 0, 0, 0)
+ daily_layout.addWidget(QLabel("执行时间:"))
+ self.daily_time = QTimeEdit()
+ self.daily_time.setTime(QTime(4, 0))
+ self.daily_time.setDisplayFormat("HH:mm")
+ daily_layout.addWidget(self.daily_time)
+ daily_layout.addStretch()
+ self.daily_widget.setVisible(False)
+ schedule_layout.addWidget(self.daily_widget)
+
+ # 每周设置
+ self.weekly_widget = QWidget()
+ weekly_layout = QVBoxLayout(self.weekly_widget)
+ weekly_layout.setContentsMargins(0, 0, 0, 0)
+
+ days_layout = QHBoxLayout()
+ days_layout.addWidget(QLabel("执行日:"))
+ self.day_checks = {}
+ for i, day in enumerate(["一", "二", "三", "四", "五", "六", "日"], 1):
+ check = QCheckBox(f"周{day}")
+ check.setChecked(i == 1) # 默认周一
+ self.day_checks[i] = check
+ days_layout.addWidget(check)
+ weekly_layout.addLayout(days_layout)
+
+ weekly_time_layout = QHBoxLayout()
+ weekly_time_layout.addWidget(QLabel("执行时间:"))
+ self.weekly_time = QTimeEdit()
+ self.weekly_time.setTime(QTime(4, 0))
+ self.weekly_time.setDisplayFormat("HH:mm")
+ weekly_time_layout.addWidget(self.weekly_time)
+ weekly_time_layout.addStretch()
+ weekly_layout.addLayout(weekly_time_layout)
+
+ self.weekly_widget.setVisible(False)
+ schedule_layout.addWidget(self.weekly_widget)
+
+ # Cron 设置
+ self.cron_widget = QWidget()
+ cron_layout = QHBoxLayout(self.cron_widget)
+ cron_layout.setContentsMargins(0, 0, 0, 0)
+ cron_layout.addWidget(QLabel("Cron:"))
+ self.cron_edit = QLineEdit()
+ self.cron_edit.setPlaceholderText("分 时 日 月 周 (例: 0 4 * * *)")
+ self.cron_edit.setText("0 4 * * *")
+ cron_layout.addWidget(self.cron_edit, 1)
+ self.cron_widget.setVisible(False)
+ schedule_layout.addWidget(self.cron_widget)
+
+ layout.addWidget(schedule_group)
+
+ # 任务配置
+ config_group = QGroupBox("任务配置")
+ config_layout = QGridLayout(config_group)
+
+ config_layout.addWidget(QLabel("运行模式:"), 0, 0)
+ self.pipeline_combo = QComboBox()
+ self.pipeline_combo.addItem("FULL - 在线抓取 + 入库", "FULL")
+ self.pipeline_combo.addItem("INGEST_ONLY - 仅入库", "INGEST_ONLY")
+ config_layout.addWidget(self.pipeline_combo, 0, 1)
+
+ config_layout.addWidget(QLabel("回溯小时:"), 1, 0)
+ self.lookback_hours = QSpinBox()
+ self.lookback_hours.setRange(1, 720)
+ self.lookback_hours.setValue(24)
+ self.lookback_hours.setSuffix(" 小时")
+ self.lookback_hours.setToolTip("每次执行时,抓取最近 N 小时的数据")
+ config_layout.addWidget(self.lookback_hours, 1, 1)
+
+ layout.addWidget(config_group)
+
+ # CLI 命令行预览
+ cli_group = QGroupBox("命令行预览")
+ cli_layout = QVBoxLayout(cli_group)
+
+ self.cli_preview = QPlainTextEdit()
+ self.cli_preview.setMaximumHeight(100)
+ self.cli_preview.setFont(QFont("Consolas", 9))
+ self.cli_preview.setPlaceholderText("CLI 命令行将在此显示...")
+ cli_layout.addWidget(self.cli_preview)
+
+ # CLI 编辑提示和复制按钮
+ cli_btn_layout = QHBoxLayout()
+ self.cli_editable_check = QCheckBox("允许手动编辑")
+ self.cli_editable_check.setToolTip("勾选后可以手动修改命令行参数")
+ self.cli_editable_check.stateChanged.connect(self._on_cli_editable_changed)
+ cli_btn_layout.addWidget(self.cli_editable_check)
+
+ cli_btn_layout.addStretch()
+
+ self.copy_cli_btn = QPushButton("复制命令")
+ self.copy_cli_btn.setProperty("secondary", True)
+ self.copy_cli_btn.clicked.connect(self._copy_cli_to_clipboard)
+ cli_btn_layout.addWidget(self.copy_cli_btn)
+
+ self.refresh_cli_btn = QPushButton("刷新预览")
+ self.refresh_cli_btn.setProperty("secondary", True)
+ self.refresh_cli_btn.clicked.connect(self._update_cli_preview)
+ cli_btn_layout.addWidget(self.refresh_cli_btn)
+
+ cli_layout.addLayout(cli_btn_layout)
+
+ layout.addWidget(cli_group)
+
+ # 按钮
+ btn_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
+ btn_box.accepted.connect(self.accept)
+ btn_box.rejected.connect(self.reject)
+ layout.addWidget(btn_box)
+
+ def _on_type_changed(self, index: int):
+ schedule_type = self.schedule_type_combo.currentData()
+ self.interval_widget.setVisible(schedule_type == ScheduleType.INTERVAL)
+ self.daily_widget.setVisible(schedule_type == ScheduleType.DAILY)
+ self.weekly_widget.setVisible(schedule_type == ScheduleType.WEEKLY)
+ self.cron_widget.setVisible(schedule_type == ScheduleType.CRON)
+
+ def _load_task(self, task: ScheduledTask):
+ """加载任务数据"""
+ self.name_edit.setText(task.name)
+ self.enabled_check.setChecked(task.enabled)
+
+ # 选择任务
+ for i in range(self.task_list.count()):
+ item = self.task_list.item(i)
+ code = item.data(Qt.UserRole)
+ item.setSelected(code in task.task_codes)
+
+ # 调度设置
+ schedule = task.schedule
+
+ # 设置类型
+ for i in range(self.schedule_type_combo.count()):
+ if self.schedule_type_combo.itemData(i) == schedule.schedule_type:
+ self.schedule_type_combo.setCurrentIndex(i)
+ break
+
+ self.interval_value.setValue(schedule.interval_value)
+ for i in range(self.interval_unit.count()):
+ if self.interval_unit.itemData(i) == schedule.interval_unit:
+ self.interval_unit.setCurrentIndex(i)
+ break
+
+ if schedule.daily_time:
+ h, m = map(int, schedule.daily_time.split(":"))
+ self.daily_time.setTime(QTime(h, m))
+
+ for day, check in self.day_checks.items():
+ check.setChecked(day in schedule.weekly_days)
+
+ if schedule.weekly_time:
+ h, m = map(int, schedule.weekly_time.split(":"))
+ self.weekly_time.setTime(QTime(h, m))
+
+ self.cron_edit.setText(schedule.cron_expression)
+
+ # 任务配置
+ if task.task_config.get("pipeline_flow"):
+ for i in range(self.pipeline_combo.count()):
+ if self.pipeline_combo.itemData(i) == task.task_config["pipeline_flow"]:
+ self.pipeline_combo.setCurrentIndex(i)
+ break
+
+ self.lookback_hours.setValue(task.task_config.get("lookback_hours", 24))
+
+ def get_task(self) -> Optional[ScheduledTask]:
+ """获取配置的任务"""
+ name = self.name_edit.text().strip()
+ if not name:
+ QMessageBox.warning(self, "提示", "请输入任务名称")
+ return None
+
+ # 获取选中的任务
+ task_codes = []
+ for i in range(self.task_list.count()):
+ item = self.task_list.item(i)
+ if item.isSelected():
+ task_codes.append(item.data(Qt.UserRole))
+
+ if not task_codes:
+ QMessageBox.warning(self, "提示", "请至少选择一个任务")
+ return None
+
+ # 构建调度配置
+ schedule_type = self.schedule_type_combo.currentData()
+
+ weekly_days = [day for day, check in self.day_checks.items() if check.isChecked()]
+
+ schedule = ScheduleConfig(
+ schedule_type=schedule_type,
+ interval_value=self.interval_value.value(),
+ interval_unit=self.interval_unit.currentData(),
+ daily_time=self.daily_time.time().toString("HH:mm"),
+ weekly_days=weekly_days or [1],
+ weekly_time=self.weekly_time.time().toString("HH:mm"),
+ cron_expression=self.cron_edit.text().strip(),
+ enabled=True,
+ )
+
+ # 构建任务配置
+ task_config = {
+ "pipeline_flow": self.pipeline_combo.currentData(),
+ "lookback_hours": self.lookback_hours.value(),
+ }
+
+ # 创建或更新任务
+ if self.task:
+ task = self.task
+ task.name = name
+ task.task_codes = task_codes
+ task.schedule = schedule
+ task.task_config = task_config
+ task.enabled = self.enabled_check.isChecked()
+ else:
+ task = ScheduledTask(
+ id=str(uuid.uuid4())[:8],
+ name=name,
+ task_codes=task_codes,
+ schedule=schedule,
+ task_config=task_config,
+ enabled=self.enabled_check.isChecked(),
+ )
+
+ task.update_next_run()
+ return task
+
+ def _connect_preview_signals(self):
+ """连接信号以实时更新 CLI 预览"""
+ # 任务选择变化
+ self.task_list.itemSelectionChanged.connect(self._update_cli_preview)
+
+ # 调度配置变化
+ self.schedule_type_combo.currentIndexChanged.connect(self._update_cli_preview)
+ self.interval_value.valueChanged.connect(self._update_cli_preview)
+ self.interval_unit.currentIndexChanged.connect(self._update_cli_preview)
+
+ # 任务配置变化
+ self.pipeline_combo.currentIndexChanged.connect(self._update_cli_preview)
+ self.lookback_hours.valueChanged.connect(self._update_cli_preview)
+
+ def _update_cli_preview(self):
+ """更新 CLI 命令行预览"""
+ # 如果用户正在手动编辑,不自动更新
+ if self.cli_editable_check.isChecked():
+ return
+
+ # 获取选中的任务
+ task_codes = []
+ for i in range(self.task_list.count()):
+ item = self.task_list.item(i)
+ if item.isSelected():
+ task_codes.append(item.data(Qt.UserRole))
+
+ if not task_codes:
+ self.cli_preview.setPlainText("# 请选择至少一个任务")
+ return
+
+ # 获取配置
+ lookback_hours = self.lookback_hours.value()
+ pipeline_flow = self.pipeline_combo.currentData()
+
+ # 构建说明注释
+ lines = []
+
+ # 调度规则说明
+ schedule_type = self.schedule_type_combo.currentData()
+ if schedule_type == ScheduleType.INTERVAL:
+ interval_val = self.interval_value.value()
+ interval_unit = self.interval_unit.currentText()
+ lines.append(f"# 调度:每 {interval_val} {interval_unit} 执行一次")
+ elif schedule_type == ScheduleType.DAILY:
+ daily_time = self.daily_time.time().toString("HH:mm")
+ lines.append(f"# 调度:每天 {daily_time} 执行")
+ elif schedule_type == ScheduleType.WEEKLY:
+ weekly_time = self.weekly_time.time().toString("HH:mm")
+ days = [f"周{['一','二','三','四','五','六','日'][d-1]}"
+ for d, c in self.day_checks.items() if c.isChecked()]
+ lines.append(f"# 调度:每周 {','.join(days)} {weekly_time} 执行")
+ elif schedule_type == ScheduleType.CRON:
+ cron_expr = self.cron_edit.text().strip()
+ lines.append(f"# 调度:Cron 表达式 {cron_expr}")
+
+ # 动态时间窗口说明
+ lines.append(f"# 回溯窗口:{lookback_hours} 小时")
+ lines.append("#")
+ lines.append("# ⚠ 时间窗口在每次执行时动态计算:")
+ lines.append(f"# --window-start = <执行时间> - {lookback_hours}h")
+ lines.append(f"# --window-end = <执行时间>")
+ lines.append("")
+
+ # 生成命令行(使用占位符表示动态时间)
+ tasks_str = ",".join(task_codes)
+ cmd_parts = [
+ "python -m cli.main",
+ f"--tasks {tasks_str}",
+ f"--pipeline-flow {pipeline_flow}",
+ f'--window-start "<执行时间 - {lookback_hours}h>"',
+ f'--window-end "<执行时间>"',
+ ]
+ lines.append(" \\\n ".join(cmd_parts))
+
+ # 添加示例(使用当前时间作为示例)
+ lines.append("")
+ lines.append("# -------- 示例(假设现在执行)--------")
+ now = datetime.now()
+ start_time = now - timedelta(hours=lookback_hours)
+
+ # 构建示例 TaskConfig
+ config = TaskConfig(
+ tasks=task_codes,
+ pipeline_flow=pipeline_flow,
+ window_start=start_time.strftime("%Y-%m-%d %H:%M:%S"),
+ window_end=now.strftime("%Y-%m-%d %H:%M:%S"),
+ )
+ example_cmd = self.cli_builder.build_command_string(config)
+ lines.append(f"# {example_cmd}")
+
+ self.cli_preview.setPlainText("\n".join(lines))
+
+ def _on_cli_editable_changed(self, state):
+ """切换 CLI 编辑模式"""
+ editable = state == Qt.Checked
+ self.cli_preview.setReadOnly(not editable)
+
+ if editable:
+ # 切换到编辑模式,提示用户
+ current_text = self.cli_preview.toPlainText()
+ if not current_text.startswith("# [手动编辑模式]"):
+ self.cli_preview.setPlainText(f"# [手动编辑模式] 修改后点击「刷新预览」可恢复自动生成\n{current_text}")
+ else:
+ # 切换回只读模式,刷新预览
+ self._update_cli_preview()
+
+ def _copy_cli_to_clipboard(self):
+ """复制 CLI 命令到剪贴板"""
+ from PySide6.QtWidgets import QApplication
+ text = self.cli_preview.toPlainText()
+ # 提取实际命令行(跳过注释行)
+ lines = text.split('\n')
+ cmd_lines = [line for line in lines if line.strip() and not line.strip().startswith('#')]
+ cmd_text = '\n'.join(cmd_lines)
+
+ if cmd_text:
+ QApplication.clipboard().setText(cmd_text)
+ QMessageBox.information(self, "提示", "命令行已复制到剪贴板")
+ else:
+ QMessageBox.warning(self, "提示", "没有可复制的命令")
+
+
+class ScheduleLogDialog(QDialog):
+ """调度任务日志查看对话框"""
+
+ def __init__(self, scheduled_task: ScheduledTask, task_history: List[QueuedTask],
+ task_queue: List[QueuedTask] = None, parent=None):
+ super().__init__(parent)
+ self.scheduled_task = scheduled_task
+ self.task_history = task_history # 引用任务管理器的执行历史
+ self.task_queue = task_queue or [] # 引用任务队列(用于获取执行中任务的实时日志)
+ self.setWindowTitle(f"调度日志 - {scheduled_task.name}")
+ self.setMinimumSize(900, 600)
+ self._init_ui()
+
+ # 定时刷新执行中任务的日志
+ self._refresh_timer = QTimer(self)
+ self._refresh_timer.timeout.connect(self._refresh_running_log)
+ self._refresh_timer.start(1000) # 每秒刷新
+
+ def _init_ui(self):
+ layout = QVBoxLayout(self)
+
+ # 调度任务基本信息
+ info_group = QGroupBox("调度任务信息")
+ info_layout = QGridLayout(info_group)
+
+ info_layout.addWidget(QLabel("任务名称:"), 0, 0)
+ info_layout.addWidget(QLabel(self.scheduled_task.name), 0, 1)
+
+ info_layout.addWidget(QLabel("执行任务:"), 0, 2)
+ tasks_str = ", ".join(self.scheduled_task.task_codes[:3])
+ if len(self.scheduled_task.task_codes) > 3:
+ tasks_str += f" (+{len(self.scheduled_task.task_codes) - 3})"
+ info_layout.addWidget(QLabel(tasks_str), 0, 3)
+
+ info_layout.addWidget(QLabel("调度规则:"), 1, 0)
+ info_layout.addWidget(QLabel(self.scheduled_task.schedule.get_description()), 1, 1)
+
+ info_layout.addWidget(QLabel("执行次数:"), 1, 2)
+ info_layout.addWidget(QLabel(str(self.scheduled_task.run_count)), 1, 3)
+
+ layout.addWidget(info_group)
+
+ # 分割器
+ splitter = QSplitter(Qt.Vertical)
+ layout.addWidget(splitter, 1)
+
+ # 执行历史列表
+ history_group = QGroupBox(f"执行历史 (最近 {len(self.scheduled_task.execution_history)} 次)")
+ history_layout = QVBoxLayout(history_group)
+
+ self.history_table = QTableWidget()
+ self.history_table.setColumnCount(5)
+ self.history_table.setHorizontalHeaderLabels(["执行时间", "状态", "耗时", "退出码", "摘要"])
+ self.history_table.horizontalHeader().setSectionResizeMode(0, QHeaderView.ResizeToContents)
+ self.history_table.horizontalHeader().setSectionResizeMode(4, QHeaderView.Stretch)
+ self.history_table.setSelectionBehavior(QAbstractItemView.SelectRows)
+ self.history_table.setSelectionMode(QAbstractItemView.SingleSelection)
+ self.history_table.itemSelectionChanged.connect(self._on_selection_changed)
+ history_layout.addWidget(self.history_table)
+
+ splitter.addWidget(history_group)
+
+ # 日志详情
+ log_group = QGroupBox("执行日志")
+ log_layout = QVBoxLayout(log_group)
+
+ self.log_text = QPlainTextEdit()
+ self.log_text.setReadOnly(True)
+ self.log_text.setFont(QFont("Consolas", 9))
+ self.log_text.setPlaceholderText("选择上方的执行记录查看详细日志...")
+ log_layout.addWidget(self.log_text)
+
+ splitter.addWidget(log_group)
+ splitter.setSizes([250, 350])
+
+ # 按钮
+ btn_layout = QHBoxLayout()
+
+ copy_btn = QPushButton("复制日志")
+ copy_btn.clicked.connect(self._copy_log)
+ btn_layout.addWidget(copy_btn)
+
+ btn_layout.addStretch()
+
+ close_btn = QPushButton("关闭")
+ close_btn.clicked.connect(self.accept)
+ btn_layout.addWidget(close_btn)
+
+ layout.addLayout(btn_layout)
+
+ # 填充历史表格
+ self._load_history()
+
+ def _load_history(self):
+ """加载执行历史"""
+ records = self.scheduled_task.execution_history
+ self.history_table.setRowCount(len(records))
+
+ for row, record in enumerate(records):
+ # 执行时间
+ time_str = record.executed_at.strftime("%Y-%m-%d %H:%M:%S")
+ self.history_table.setItem(row, 0, QTableWidgetItem(time_str))
+
+ # 状态
+ status_item = QTableWidgetItem(self._get_status_text(record.status))
+ status_item.setForeground(self._get_status_color(record.status))
+ self.history_table.setItem(row, 1, status_item)
+
+ # 耗时
+ if record.duration_seconds > 0:
+ if record.duration_seconds < 60:
+ duration_str = f"{record.duration_seconds:.1f}秒"
+ else:
+ mins = int(record.duration_seconds // 60)
+ secs = int(record.duration_seconds % 60)
+ duration_str = f"{mins}分{secs}秒"
+ else:
+ duration_str = "-"
+ self.history_table.setItem(row, 2, QTableWidgetItem(duration_str))
+
+ # 退出码
+ exit_str = str(record.exit_code) if record.exit_code is not None else "-"
+ self.history_table.setItem(row, 3, QTableWidgetItem(exit_str))
+
+ # 摘要
+ summary_item = QTableWidgetItem(record.summary[:50] if record.summary else "-")
+ summary_item.setData(Qt.UserRole, record.task_id) # 存储关联的任务ID
+ self.history_table.setItem(row, 4, summary_item)
+
+ # 自动选择第一行
+ if records:
+ self.history_table.selectRow(0)
+
+ def _on_selection_changed(self):
+ """选择变化时显示对应的日志"""
+ row = self.history_table.currentRow()
+ if row < 0 or row >= len(self.scheduled_task.execution_history):
+ self.log_text.clear()
+ return
+
+ record = self.scheduled_task.execution_history[row]
+
+ # 如果是执行中的任务,从任务队列获取实时日志
+ if record.status == "pending":
+ self._show_running_task_log(record)
+ return
+
+ # 优先使用执行记录中保存的日志
+ if record.output:
+ log_content = record.output
+ # 如果有错误信息,附加到末尾
+ if record.error:
+ log_content += f"\n\n===== 错误信息 =====\n{record.error}"
+ self.log_text.setPlainText(log_content)
+ else:
+ # 尝试从任务历史中查找(兼容旧记录)
+ queued_task = None
+ for task in self.task_history:
+ if task.id == record.task_id:
+ queued_task = task
+ break
+
+ if queued_task and queued_task.output:
+ self.log_text.setPlainText(queued_task.output)
+ else:
+ # 显示基本信息
+ info_lines = [
+ f"执行时间: {record.executed_at.strftime('%Y-%m-%d %H:%M:%S')}",
+ f"状态: {self._get_status_text(record.status)}",
+ f"耗时: {record.duration_seconds:.1f} 秒",
+ f"退出码: {record.exit_code}",
+ f"",
+ f"执行摘要:",
+ record.summary if record.summary else "(无)",
+ ]
+ if record.error:
+ info_lines.extend(["", "错误信息:", record.error])
+ self.log_text.setPlainText("\n".join(info_lines))
+
+ def _show_running_task_log(self, record: ScheduleExecutionRecord):
+ """显示执行中任务的实时日志"""
+ # 1. 先从任务队列中查找正在执行的任务
+ found_task = None
+ task_source = "queue"
+ for task in self.task_queue:
+ if task.id == record.task_id:
+ found_task = task
+ break
+
+ # 2. 如果队列中找不到,可能任务刚完成还在历史中,从历史中查找
+ if not found_task:
+ for task in self.task_history:
+ if task.id == record.task_id:
+ found_task = task
+ task_source = "history"
+ break
+
+ if found_task and found_task.output:
+ # 显示日志
+ if task_source == "queue" and found_task.status == TaskStatus.RUNNING:
+ # 任务还在执行中
+ header = f"===== 任务执行中 (实时日志) =====\n"
+ header += f"任务 ID: {found_task.id}\n"
+ if found_task.started_at:
+ elapsed = (datetime.now() - found_task.started_at).total_seconds()
+ header += f"已运行: {elapsed:.0f} 秒\n"
+ header += "=" * 40 + "\n\n"
+ else:
+ # 任务已完成(可能是刚完成,记录状态还没更新)
+ status_text = "成功" if found_task.status == TaskStatus.SUCCESS else "已完成"
+ if found_task.status == TaskStatus.FAILED:
+ status_text = "失败"
+ header = f"===== 任务 {status_text} =====\n"
+ header += f"任务 ID: {found_task.id}\n"
+ if found_task.started_at and found_task.finished_at:
+ duration = (found_task.finished_at - found_task.started_at).total_seconds()
+ header += f"执行耗时: {duration:.1f} 秒\n"
+ header += "=" * 40 + "\n\n"
+ self.log_text.setPlainText(header + found_task.output)
+ else:
+ # 任务可能还未开始
+ info_lines = [
+ "===== 任务执行中 =====",
+ f"任务 ID: {record.task_id}",
+ f"开始时间: {record.executed_at.strftime('%Y-%m-%d %H:%M:%S')}",
+ "",
+ "日志正在生成中,请稍候...",
+ "(日志将在任务执行过程中实时更新)",
+ ]
+ self.log_text.setPlainText("\n".join(info_lines))
+
+ def _refresh_running_log(self):
+ """定时刷新执行中任务的日志"""
+ row = self.history_table.currentRow()
+ if row < 0 or row >= len(self.scheduled_task.execution_history):
+ return
+
+ record = self.scheduled_task.execution_history[row]
+
+ # 检查任务是否还在执行中
+ if record.status == "pending":
+ # 保存当前滚动位置
+ scrollbar = self.log_text.verticalScrollBar()
+ at_bottom = scrollbar.value() >= scrollbar.maximum() - 10
+
+ # 检查任务是否已经完成(可能记录状态还没更新)
+ task_completed = False
+ for task in self.task_history:
+ if task.id == record.task_id:
+ task_completed = True
+ break
+
+ if task_completed:
+ # 任务已完成,刷新历史表格以更新状态显示
+ # 重新加载历史数据(从 schedule_store 获取最新状态)
+ # 注意:这里需要从父窗口重新获取调度任务的最新状态
+ self._show_running_task_log(record)
+ # 触发重新选择以更新显示
+ self._on_selection_changed()
+ else:
+ self._show_running_task_log(record)
+
+ # 如果之前在底部,保持在底部
+ if at_bottom:
+ scrollbar.setValue(scrollbar.maximum())
+
+ def _copy_log(self):
+ """复制日志到剪贴板"""
+ from PySide6.QtWidgets import QApplication
+ text = self.log_text.toPlainText()
+ if text:
+ QApplication.clipboard().setText(text)
+ QMessageBox.information(self, "提示", "日志已复制到剪贴板")
+
+ @staticmethod
+ def _get_status_text(status: str) -> str:
+ return {
+ "pending": "执行中",
+ "success": "成功",
+ "failed": "失败",
+ }.get(status, status or "未知")
+
+ @staticmethod
+ def _get_status_color(status: str) -> QColor:
+ return {
+ "pending": QColor("#1a73e8"),
+ "success": QColor("#1e8e3e"),
+ "failed": QColor("#d93025"),
+ }.get(status, QColor("#333333"))
+
+
+class TaskManager(QWidget):
+ """任务管理器"""
+
+ # 信号
+ task_started = Signal(str) # 任务开始
+ task_finished = Signal(bool, str) # 任务完成
+ log_message = Signal(str) # 日志消息
+
+ def __init__(self, parent=None):
+ super().__init__(parent)
+ self.cli_builder = CLIBuilder()
+ self.task_queue: List[QueuedTask] = []
+ self.task_history: List[QueuedTask] = []
+ self.current_worker: Optional[TaskWorker] = None
+ self.auto_run = False
+
+ # 调度任务存储
+ self.schedule_store = ScheduleStore()
+ self.scheduler_enabled = False
+
+ # 任务ID到调度任务ID的映射,用于在任务完成时更新调度执行记录
+ self._task_schedule_mapping: Dict[str, str] = {}
+
+ self._init_ui()
+ self._connect_signals()
+
+ # 定时刷新
+ self.refresh_timer = QTimer(self)
+ self.refresh_timer.timeout.connect(self._refresh_display)
+ self.refresh_timer.start(1000) # 每秒刷新
+
+ # 调度检查定时器
+ self.schedule_timer = QTimer(self)
+ self.schedule_timer.timeout.connect(self._check_scheduled_tasks)
+
+ # 加载调度任务
+ self._refresh_schedule_table()
+
+ # 加载任务历史
+ self._load_task_history()
+
+ def _init_ui(self):
+ """初始化界面"""
+ layout = QVBoxLayout(self)
+ layout.setContentsMargins(16, 16, 16, 16)
+ layout.setSpacing(16)
+
+ # 标题
+ title = QLabel("任务管理")
+ title.setProperty("heading", True)
+ layout.addWidget(title)
+
+ # 使用选项卡
+ tab_widget = QTabWidget()
+ layout.addWidget(tab_widget, 1)
+
+ # ====== 任务队列选项卡 ======
+ queue_tab = QWidget()
+ queue_tab_layout = QVBoxLayout(queue_tab)
+ queue_tab_layout.setContentsMargins(0, 8, 0, 0)
+
+ # 控制按钮
+ header_layout = QHBoxLayout()
+ self.auto_run_btn = QPushButton("自动执行: 关")
+ self.auto_run_btn.setProperty("secondary", True)
+ self.auto_run_btn.setCheckable(True)
+ header_layout.addWidget(self.auto_run_btn)
+
+ self.clear_queue_btn = QPushButton("清空队列")
+ self.clear_queue_btn.setProperty("secondary", True)
+ header_layout.addWidget(self.clear_queue_btn)
+ header_layout.addStretch()
+ queue_tab_layout.addLayout(header_layout)
+
+ # 分割器
+ splitter = QSplitter(Qt.Vertical)
+ queue_tab_layout.addWidget(splitter, 1)
+
+ # 任务队列
+ queue_group = QGroupBox("任务队列")
+ queue_layout = QVBoxLayout(queue_group)
+
+ self.queue_table = QTableWidget()
+ self.queue_table.setColumnCount(5)
+ self.queue_table.setHorizontalHeaderLabels(["ID", "任务", "状态", "创建时间", "操作"])
+ self.queue_table.horizontalHeader().setSectionResizeMode(1, QHeaderView.Stretch)
+ self.queue_table.setSelectionBehavior(QAbstractItemView.SelectRows)
+ self.queue_table.setContextMenuPolicy(Qt.CustomContextMenu)
+ queue_layout.addWidget(self.queue_table)
+
+ queue_btn_layout = QHBoxLayout()
+ self.run_next_btn = QPushButton("执行下一个")
+ self.run_all_btn = QPushButton("执行全部")
+ self.stop_btn = QPushButton("停止当前")
+ self.stop_btn.setProperty("danger", True)
+ self.stop_btn.setEnabled(False)
+ queue_btn_layout.addWidget(self.run_next_btn)
+ queue_btn_layout.addWidget(self.run_all_btn)
+ queue_btn_layout.addStretch()
+ queue_btn_layout.addWidget(self.stop_btn)
+ queue_layout.addLayout(queue_btn_layout)
+
+ splitter.addWidget(queue_group)
+
+ # 实时日志
+ log_group = QGroupBox("执行日志 (实时)")
+ log_layout = QVBoxLayout(log_group)
+
+ self.live_log = QPlainTextEdit()
+ self.live_log.setReadOnly(True)
+ self.live_log.setFont(QFont("Consolas", 9))
+ self.live_log.setMaximumBlockCount(1000) # 限制行数
+ self.live_log.setPlaceholderText("任务执行时,日志将在此实时显示...")
+ log_layout.addWidget(self.live_log)
+
+ log_btn_layout = QHBoxLayout()
+ self.clear_log_btn = QPushButton("清空日志")
+ self.clear_log_btn.setProperty("secondary", True)
+ self.clear_log_btn.clicked.connect(self.live_log.clear)
+ self.auto_scroll_check = QCheckBox("自动滚动")
+ self.auto_scroll_check.setChecked(True)
+ log_btn_layout.addWidget(self.clear_log_btn)
+ log_btn_layout.addWidget(self.auto_scroll_check)
+ log_btn_layout.addStretch()
+ log_layout.addLayout(log_btn_layout)
+
+ splitter.addWidget(log_group)
+
+ # 执行历史
+ history_group = QGroupBox("执行历史")
+ history_layout = QVBoxLayout(history_group)
+
+ self.history_table = QTableWidget()
+ self.history_table.setColumnCount(6)
+ self.history_table.setHorizontalHeaderLabels(["ID", "任务", "状态", "开始时间", "耗时", "结果"])
+ self.history_table.horizontalHeader().setSectionResizeMode(1, QHeaderView.Stretch)
+ self.history_table.horizontalHeader().setSectionResizeMode(5, QHeaderView.Stretch)
+ self.history_table.setSelectionBehavior(QAbstractItemView.SelectRows)
+ self.history_table.setContextMenuPolicy(Qt.CustomContextMenu)
+ history_layout.addWidget(self.history_table)
+
+ # 提示标签
+ hint_label = QLabel("提示:双击任务可查看详细日志")
+ hint_label.setProperty("subheading", True)
+ history_layout.addWidget(hint_label)
+
+ history_btn_layout = QHBoxLayout()
+ self.clear_history_btn = QPushButton("清空历史")
+ self.clear_history_btn.setProperty("secondary", True)
+ history_btn_layout.addStretch()
+ history_btn_layout.addWidget(self.clear_history_btn)
+ history_layout.addLayout(history_btn_layout)
+
+ splitter.addWidget(history_group)
+ splitter.setSizes([200, 250, 250])
+
+ tab_widget.addTab(queue_tab, "任务队列")
+
+ # ====== 定时调度选项卡 ======
+ schedule_tab = QWidget()
+ schedule_layout = QVBoxLayout(schedule_tab)
+ schedule_layout.setContentsMargins(0, 8, 0, 0)
+
+ # 调度控制
+ schedule_header = QHBoxLayout()
+
+ self.scheduler_btn = QPushButton("调度器: 关")
+ self.scheduler_btn.setProperty("secondary", True)
+ self.scheduler_btn.setCheckable(True)
+ self.scheduler_btn.setToolTip("开启后将自动执行到期的调度任务")
+ schedule_header.addWidget(self.scheduler_btn)
+
+ schedule_header.addStretch()
+
+ self.add_schedule_btn = QPushButton("新建调度")
+ schedule_header.addWidget(self.add_schedule_btn)
+
+ schedule_layout.addLayout(schedule_header)
+
+ # 调度任务表格
+ self.schedule_table = QTableWidget()
+ self.schedule_table.setColumnCount(7)
+ self.schedule_table.setHorizontalHeaderLabels([
+ "名称", "任务", "调度", "下次执行", "上次执行", "执行次数", "状态"
+ ])
+ self.schedule_table.horizontalHeader().setSectionResizeMode(0, QHeaderView.ResizeToContents)
+ self.schedule_table.horizontalHeader().setSectionResizeMode(1, QHeaderView.Stretch)
+ self.schedule_table.horizontalHeader().setSectionResizeMode(2, QHeaderView.ResizeToContents)
+ self.schedule_table.setSelectionBehavior(QAbstractItemView.SelectRows)
+ self.schedule_table.setContextMenuPolicy(Qt.CustomContextMenu)
+ schedule_layout.addWidget(self.schedule_table, 1)
+
+ # 调度说明
+ schedule_note = QLabel(
+ "提示: 双击调度任务可查看执行日志。"
+ "调度器运行时会自动检查并执行到期的任务。"
+ "新建调度任务首次执行将延迟 60 秒。"
+ )
+ schedule_note.setProperty("subheading", True)
+ schedule_note.setWordWrap(True)
+ schedule_layout.addWidget(schedule_note)
+
+ tab_widget.addTab(schedule_tab, "定时调度")
+
+ def _connect_signals(self):
+ """连接信号"""
+ self.auto_run_btn.toggled.connect(self._toggle_auto_run)
+ self.clear_queue_btn.clicked.connect(self._clear_queue)
+ self.run_next_btn.clicked.connect(self._run_next)
+ self.run_all_btn.clicked.connect(self._run_all)
+ self.stop_btn.clicked.connect(self._stop_current)
+ self.clear_history_btn.clicked.connect(self._clear_history)
+ self.queue_table.customContextMenuRequested.connect(self._show_queue_menu)
+
+ # 历史表格
+ self.history_table.customContextMenuRequested.connect(self._show_history_menu)
+ self.history_table.doubleClicked.connect(self._view_task_log)
+
+ # 调度相关
+ self.scheduler_btn.toggled.connect(self._toggle_scheduler)
+ self.add_schedule_btn.clicked.connect(self._add_schedule)
+ self.schedule_table.customContextMenuRequested.connect(self._show_schedule_menu)
+ self.schedule_table.doubleClicked.connect(self._on_schedule_double_click)
+
+ def add_task(self, config: TaskConfig) -> str:
+ """添加任务到队列"""
+ task_id = str(uuid.uuid4())[:8]
+ task = QueuedTask(
+ id=task_id,
+ config=config,
+ status=TaskStatus.PENDING,
+ )
+ self.task_queue.append(task)
+ self._refresh_queue_table()
+
+ # 如果开启了自动执行且当前没有任务在运行
+ if self.auto_run and not self._is_running():
+ self._run_next()
+
+ return task_id
+
+ def _toggle_auto_run(self, checked: bool):
+ """切换自动执行"""
+ self.auto_run = checked
+ self.auto_run_btn.setText(f"自动执行: {'开' if checked else '关'}")
+
+ # 如果开启自动执行且有待执行任务
+ if checked and self.task_queue and not self._is_running():
+ self._run_next()
+
+ def _clear_queue(self):
+ """清空队列"""
+ # 只清除未执行的任务
+ self.task_queue = [t for t in self.task_queue if t.status == TaskStatus.RUNNING]
+ self._refresh_queue_table()
+
+ def _run_next(self):
+ """执行下一个任务"""
+ if self._is_running():
+ QMessageBox.information(self, "提示", "当前有任务正在执行")
+ return
+
+ # 找到下一个待执行的任务
+ for task in self.task_queue:
+ if task.status == TaskStatus.PENDING:
+ self._execute_task(task)
+ break
+
+ def _run_all(self):
+ """执行全部任务"""
+ self.auto_run = True
+ self.auto_run_btn.setChecked(True)
+ if not self._is_running():
+ self._run_next()
+
+ def _stop_current(self):
+ """停止当前任务"""
+ if self.current_worker and self.current_worker.isRunning():
+ self.current_worker.stop()
+
+ def _clear_history(self):
+ """清空历史"""
+ self.task_history.clear()
+ self._refresh_history_table()
+ self._save_task_history() # 保存到文件
+
+ def _execute_task(self, task: QueuedTask):
+ """执行任务"""
+ # 构建命令
+ cmd = self.cli_builder.build_command(task.config)
+
+ # 获取额外环境变量
+ extra_env = task.config.env_vars if hasattr(task.config, 'env_vars') else {}
+
+ # 创建工作线程
+ self.current_worker = TaskWorker(cmd, extra_env=extra_env)
+ self.current_worker.output_received.connect(lambda line: self._on_output(task, line))
+ self.current_worker.task_finished.connect(lambda code, summary: self._on_finished(task, code, summary))
+ self.current_worker.error_occurred.connect(lambda error: self._on_error(task, error))
+
+ # 更新任务状态
+ task.status = TaskStatus.RUNNING
+ task.started_at = datetime.now()
+
+ # 更新 UI
+ self.stop_btn.setEnabled(True)
+ self._refresh_queue_table()
+
+ # 发送信号
+ task_info = ",".join(task.config.tasks[:2])
+ if len(task.config.tasks) > 2:
+ task_info += f" 等{len(task.config.tasks)}个"
+ self.task_started.emit(task_info)
+
+ # 在实时日志中显示任务开始信息
+ self.live_log.appendPlainText("")
+ self.live_log.appendPlainText("=" * 60)
+ self.live_log.appendPlainText(f"▶ 开始执行任务: {task_info}")
+ self.live_log.appendPlainText(f" 任务 ID: {task.id}")
+ self.live_log.appendPlainText(f" 开始时间: {task.started_at.strftime('%Y-%m-%d %H:%M:%S')}")
+ self.live_log.appendPlainText("=" * 60)
+
+ # 启动
+ self.current_worker.start()
+
+ def _on_output(self, task: QueuedTask, line: str):
+ """收到输出"""
+ task.output += line + "\n"
+ self.log_message.emit(line)
+
+ # 显示到实时日志区域
+ timestamp = datetime.now().strftime("%H:%M:%S")
+ self.live_log.appendPlainText(f"[{timestamp}] {line}")
+
+ # 自动滚动
+ if self.auto_scroll_check.isChecked():
+ scrollbar = self.live_log.verticalScrollBar()
+ scrollbar.setValue(scrollbar.maximum())
+
+ def _on_finished(self, task: QueuedTask, exit_code: int, summary: str):
+ """任务完成"""
+ task.finished_at = datetime.now()
+ task.exit_code = exit_code
+
+ if exit_code == 0:
+ task.status = TaskStatus.SUCCESS
+ else:
+ task.status = TaskStatus.FAILED
+ task.error = summary
+
+ # 在实时日志中显示任务完成信息(详细报告)
+ duration = (task.finished_at - task.started_at).total_seconds() if task.started_at else 0
+ status_text = "✓ 成功" if exit_code == 0 else f"✗ 失败 (退出码: {exit_code})"
+
+ self.live_log.appendPlainText("")
+ self.live_log.appendPlainText("=" * 60)
+ self.live_log.appendPlainText(f"■ 任务执行报告")
+ self.live_log.appendPlainText("=" * 60)
+ self.live_log.appendPlainText(f" 状态: {status_text}")
+ self.live_log.appendPlainText(f" 任务 ID: {task.id}")
+ self.live_log.appendPlainText(f" 任务列表: {', '.join(task.config.tasks)}")
+ self.live_log.appendPlainText(f" 开始时间: {task.started_at.strftime('%Y-%m-%d %H:%M:%S') if task.started_at else '-'}")
+ self.live_log.appendPlainText(f" 结束时间: {task.finished_at.strftime('%Y-%m-%d %H:%M:%S') if task.finished_at else '-'}")
+
+ # 格式化耗时
+ if duration < 60:
+ duration_str = f"{duration:.1f} 秒"
+ elif duration < 3600:
+ mins = int(duration // 60)
+ secs = int(duration % 60)
+ duration_str = f"{mins} 分 {secs} 秒"
+ else:
+ hours = int(duration // 3600)
+ mins = int((duration % 3600) // 60)
+ duration_str = f"{hours} 时 {mins} 分"
+ self.live_log.appendPlainText(f" 总耗时: {duration_str}")
+
+ # 显示详细摘要
+ if summary:
+ self.live_log.appendPlainText("")
+ self.live_log.appendPlainText(" -------- 执行摘要 --------")
+ for line in summary.split('\n'):
+ self.live_log.appendPlainText(f" {line}")
+
+ self.live_log.appendPlainText("=" * 60)
+ self.live_log.appendPlainText("")
+
+ # 【重要】先更新调度执行记录(如果此任务来自调度),确保日志能正确保存
+ # 必须在移除任务之前执行,否则 ScheduleLogDialog 无法获取实时日志
+ self._update_schedule_execution_record(task, duration, summary)
+
+ # 移动到历史
+ self.task_queue.remove(task)
+ self.task_history.insert(0, task)
+
+ # 限制历史记录数量
+ if len(self.task_history) > 100:
+ self.task_history = self.task_history[:100]
+
+ # 保存历史到文件
+ self._save_task_history()
+
+ # 更新 UI
+ self.stop_btn.setEnabled(False)
+ self._refresh_queue_table()
+ self._refresh_history_table()
+ self._refresh_schedule_table()
+
+ # 发送信号
+ self.task_finished.emit(exit_code == 0, summary)
+
+ # 如果开启自动执行,或者队列中有定时任务待执行,继续下一个
+ if self.auto_run or self._has_scheduled_tasks_pending():
+ QTimer.singleShot(500, self._run_next)
+
+ def _on_error(self, task: QueuedTask, error: str):
+ """发生错误"""
+ task.error = error
+ self.log_message.emit(f"[错误] {error}")
+
+ def _is_running(self) -> bool:
+ """是否有任务在运行"""
+ return self.current_worker is not None and self.current_worker.isRunning()
+
+ def _has_scheduled_tasks_pending(self) -> bool:
+ """检查队列中是否有待执行的定时任务"""
+ for task in self.task_queue:
+ if task.status == TaskStatus.PENDING and task.id in self._task_schedule_mapping:
+ return True
+ return False
+
+ def _refresh_display(self):
+ """刷新显示"""
+ # 更新运行中任务的状态
+ if self._is_running():
+ for row in range(self.queue_table.rowCount()):
+ status_item = self.queue_table.item(row, 2)
+ if status_item and status_item.text() == "执行中":
+ # 添加动画效果
+ dots = "." * (int(datetime.now().timestamp()) % 4)
+ status_item.setText(f"执行中{dots}")
+
+ def _refresh_queue_table(self):
+ """刷新队列表格"""
+ self.queue_table.setRowCount(len(self.task_queue))
+
+ for row, task in enumerate(self.task_queue):
+ # ID
+ self.queue_table.setItem(row, 0, QTableWidgetItem(task.id))
+
+ # 任务
+ tasks_str = ", ".join(task.config.tasks[:3])
+ if len(task.config.tasks) > 3:
+ tasks_str += f" (+{len(task.config.tasks) - 3})"
+ self.queue_table.setItem(row, 1, QTableWidgetItem(tasks_str))
+
+ # 状态
+ status_item = QTableWidgetItem(self._get_status_text(task.status))
+ status_item.setForeground(self._get_status_color(task.status))
+ self.queue_table.setItem(row, 2, status_item)
+
+ # 创建时间
+ time_str = task.created_at.strftime("%H:%M:%S")
+ self.queue_table.setItem(row, 3, QTableWidgetItem(time_str))
+
+ # 操作按钮
+ self.queue_table.setItem(row, 4, QTableWidgetItem(""))
+
+ def _refresh_history_table(self):
+ """刷新历史表格"""
+ self.history_table.setRowCount(len(self.task_history))
+
+ for row, task in enumerate(self.task_history):
+ # ID
+ self.history_table.setItem(row, 0, QTableWidgetItem(task.id))
+
+ # 任务
+ tasks_str = ", ".join(task.config.tasks[:3])
+ if len(task.config.tasks) > 3:
+ tasks_str += f" (+{len(task.config.tasks) - 3})"
+ self.history_table.setItem(row, 1, QTableWidgetItem(tasks_str))
+
+ # 状态
+ status_item = QTableWidgetItem(self._get_status_text(task.status))
+ status_item.setForeground(self._get_status_color(task.status))
+ self.history_table.setItem(row, 2, status_item)
+
+ # 开始时间
+ time_str = task.started_at.strftime("%Y-%m-%d %H:%M:%S") if task.started_at else "-"
+ self.history_table.setItem(row, 3, QTableWidgetItem(time_str))
+
+ # 耗时
+ if task.started_at and task.finished_at:
+ duration = (task.finished_at - task.started_at).total_seconds()
+ if duration < 60:
+ duration_str = f"{duration:.1f}秒"
+ else:
+ duration_str = f"{int(duration // 60)}分{int(duration % 60)}秒"
+ else:
+ duration_str = "-"
+ self.history_table.setItem(row, 4, QTableWidgetItem(duration_str))
+
+ # 结果 - 提取摘要的第一行作为显示
+ if task.status == TaskStatus.SUCCESS:
+ # 从 output 中提取摘要信息
+ result = self._extract_result_summary(task)
+ else:
+ result = task.error if task.error else "失败"
+
+ # 显示结果(取第一行,最多80字符)
+ result_display = result.split('\n')[0][:80] if result else "成功"
+ result_item = QTableWidgetItem(result_display)
+ result_item.setToolTip(result) # 完整内容作为 tooltip
+ self.history_table.setItem(row, 5, result_item)
+
+ def _show_queue_menu(self, pos):
+ """显示队列右键菜单"""
+ item = self.queue_table.itemAt(pos)
+ if not item:
+ return
+
+ row = item.row()
+ if row >= len(self.task_queue):
+ return
+
+ task = self.task_queue[row]
+
+ menu = QMenu(self)
+
+ if task.status == TaskStatus.PENDING:
+ run_action = QAction("立即执行", self)
+ run_action.triggered.connect(lambda: self._execute_task(task))
+ menu.addAction(run_action)
+
+ remove_action = QAction("移除", self)
+ remove_action.triggered.connect(lambda: self._remove_task(task))
+ menu.addAction(remove_action)
+ elif task.status == TaskStatus.RUNNING:
+ stop_action = QAction("停止", self)
+ stop_action.triggered.connect(self._stop_current)
+ menu.addAction(stop_action)
+
+ menu.exec(self.queue_table.mapToGlobal(pos))
+
+ def _remove_task(self, task: QueuedTask):
+ """移除任务"""
+ if task in self.task_queue:
+ self.task_queue.remove(task)
+ self._refresh_queue_table()
+
+ def _show_history_menu(self, pos):
+ """显示历史右键菜单"""
+ item = self.history_table.itemAt(pos)
+ if not item:
+ return
+
+ row = item.row()
+ if row >= len(self.task_history):
+ return
+
+ task = self.task_history[row]
+
+ menu = QMenu(self)
+
+ view_action = QAction("查看日志", self)
+ view_action.triggered.connect(lambda: self._show_task_log_dialog(task))
+ menu.addAction(view_action)
+
+ rerun_action = QAction("重新执行", self)
+ rerun_action.triggered.connect(lambda: self._rerun_task(task))
+ menu.addAction(rerun_action)
+
+ menu.addSeparator()
+
+ remove_action = QAction("从历史删除", self)
+ remove_action.triggered.connect(lambda: self._remove_from_history(task))
+ menu.addAction(remove_action)
+
+ menu.exec(self.history_table.mapToGlobal(pos))
+
+ def _view_task_log(self, index):
+ """双击查看任务日志"""
+ row = index.row()
+ if row < len(self.task_history):
+ self._show_task_log_dialog(self.task_history[row])
+
+ def _show_task_log_dialog(self, task: QueuedTask):
+ """显示任务日志对话框"""
+ dialog = TaskLogDialog(task, self)
+ dialog.exec()
+
+ def _rerun_task(self, task: QueuedTask):
+ """重新执行任务"""
+ # 创建新任务(使用相同配置)
+ self.add_task(task.config)
+ QMessageBox.information(self, "提示", "任务已添加到队列")
+
+ def _remove_from_history(self, task: QueuedTask):
+ """从历史中删除任务"""
+ if task in self.task_history:
+ self.task_history.remove(task)
+ self._refresh_history_table()
+ self._save_task_history() # 保存到文件
+
+ def _load_task_history(self):
+ """从文件加载任务历史"""
+ try:
+ history_data = app_settings.load_task_history()
+ for item in history_data:
+ try:
+ # 重建 TaskConfig
+ config = TaskConfig(
+ tasks=item.get("tasks", []),
+ pipeline_flow=item.get("pipeline_flow", "FULL"),
+ window_start=item.get("window_start"),
+ window_end=item.get("window_end"),
+ )
+
+ # 重建 QueuedTask
+ status_str = item.get("status", "success")
+ status_map = {
+ "pending": TaskStatus.PENDING,
+ "running": TaskStatus.RUNNING,
+ "success": TaskStatus.SUCCESS,
+ "failed": TaskStatus.FAILED,
+ "cancelled": TaskStatus.CANCELLED,
+ }
+ status = status_map.get(status_str, TaskStatus.SUCCESS)
+
+ task = QueuedTask(
+ id=item.get("id", "unknown"),
+ config=config,
+ status=status,
+ )
+
+ # 恢复时间
+ if item.get("created_at"):
+ task.created_at = datetime.fromisoformat(item["created_at"])
+ if item.get("started_at"):
+ task.started_at = datetime.fromisoformat(item["started_at"])
+ if item.get("finished_at"):
+ task.finished_at = datetime.fromisoformat(item["finished_at"])
+
+ task.exit_code = item.get("exit_code")
+ task.error = item.get("error", "")
+ task.output = item.get("output_preview", "")
+
+ self.task_history.append(task)
+ except Exception:
+ continue
+
+ # 刷新显示
+ self._refresh_history_table()
+
+ if self.task_history:
+ self.log_message.emit(f"[系统] 已加载 {len(self.task_history)} 条历史任务记录")
+ except Exception as e:
+ print(f"加载任务历史失败: {e}")
+
+ def _save_task_history(self):
+ """保存任务历史到文件"""
+ try:
+ app_settings.save_task_history(self.task_history)
+ except Exception as e:
+ print(f"保存任务历史失败: {e}")
+
+ def _extract_result_summary(self, task: QueuedTask) -> str:
+ """从任务输出中提取结果摘要"""
+ import re
+
+ if not task.output:
+ return "成功"
+
+ lines = task.output.split('\n')
+ summary_parts = []
+
+ # 统计关键数据
+ total_inserted = 0
+ total_missing = 0
+ total_records = 0
+
+ for line in lines:
+ # 解析 DWD 装载统计
+ if "完成,统计=" in line:
+ try:
+ match = re.search(r"统计=(\{.+\})", line)
+ if match:
+ import json
+ stats_str = match.group(1).replace("'", '"')
+ stats = json.loads(stats_str)
+ if 'tables' in stats:
+ for tbl in stats['tables']:
+ inserted = tbl.get('inserted', 0)
+ processed = tbl.get('processed', 0)
+ total_inserted += inserted + processed
+ except Exception:
+ pass
+
+ # 解析数据校验结果
+ if "结果统计:" in line or "结果统计:" in line:
+ try:
+ match = re.search(r"\{.+\}", line)
+ if match:
+ import json
+ stats_str = match.group(0).replace("'", '"')
+ stats = json.loads(stats_str)
+ total_missing = stats.get('missing', 0)
+ except Exception:
+ pass
+
+ # 解析 CHECK_DONE
+ match = re.search(r'CHECK_DONE.*records=(\d+)', line)
+ if match:
+ total_records += int(match.group(1))
+
+ # 构建摘要
+ if total_inserted > 0:
+ summary_parts.append(f"处理 {total_inserted} 条")
+
+ if total_records > 0:
+ if total_missing > 0:
+ summary_parts.append(f"校验 {total_records} 条, 缺失 {total_missing}")
+ else:
+ summary_parts.append(f"校验 {total_records} 条, 数据完整")
+
+ if summary_parts:
+ return " | ".join(summary_parts)
+
+ return "成功"
+
+ @staticmethod
+ def _get_status_text(status: TaskStatus) -> str:
+ """获取状态文本"""
+ return {
+ TaskStatus.PENDING: "待执行",
+ TaskStatus.RUNNING: "执行中",
+ TaskStatus.SUCCESS: "成功",
+ TaskStatus.FAILED: "失败",
+ TaskStatus.CANCELLED: "已取消",
+ }.get(status, "未知")
+
+ @staticmethod
+ def _get_status_color(status: TaskStatus) -> QColor:
+ """获取状态颜色"""
+ return {
+ TaskStatus.PENDING: QColor("#5f6368"),
+ TaskStatus.RUNNING: QColor("#1a73e8"),
+ TaskStatus.SUCCESS: QColor("#1e8e3e"),
+ TaskStatus.FAILED: QColor("#d93025"),
+ TaskStatus.CANCELLED: QColor("#9aa0a6"),
+ }.get(status, QColor("#333333"))
+
+ # ========== 调度相关方法 ==========
+
+ def _toggle_scheduler(self, checked: bool):
+ """切换调度器状态"""
+ self.scheduler_enabled = checked
+ self.scheduler_btn.setText(f"调度器: {'开' if checked else '关'}")
+
+ if checked:
+ # 启动调度检查定时器(每分钟检查一次)
+ self.schedule_timer.start(60000)
+ # 立即检查一次
+ self._check_scheduled_tasks()
+ self.log_message.emit("[调度器] 已启动")
+ else:
+ self.schedule_timer.stop()
+ self.log_message.emit("[调度器] 已停止")
+
+ def _check_scheduled_tasks(self):
+ """检查并执行到期的调度任务"""
+ if not self.scheduler_enabled:
+ return
+
+ due_tasks = self.schedule_store.get_due_tasks()
+ for task in due_tasks:
+ self._execute_scheduled_task(task)
+
+ def _execute_scheduled_task(self, scheduled_task: ScheduledTask):
+ """执行调度任务"""
+ # 构建任务配置
+ lookback_hours = scheduled_task.task_config.get("lookback_hours", 24)
+ now = datetime.now()
+ start_time = now - timedelta(hours=lookback_hours)
+
+ config = TaskConfig(
+ tasks=scheduled_task.task_codes,
+ pipeline_flow=scheduled_task.task_config.get("pipeline_flow", "FULL"),
+ window_start=start_time.strftime("%Y-%m-%d %H:%M:%S"),
+ window_end=now.strftime("%Y-%m-%d %H:%M:%S"),
+ )
+
+ # 添加到队列
+ task_id = self.add_task(config)
+
+ # 创建执行记录
+ execution_record = ScheduleExecutionRecord(
+ task_id=task_id,
+ executed_at=now,
+ status="pending",
+ )
+ scheduled_task.add_execution_record(execution_record)
+
+ # 保存映射关系,以便任务完成时更新记录
+ self._task_schedule_mapping[task_id] = scheduled_task.id
+
+ # 更新调度任务状态
+ scheduled_task.last_run = now
+ scheduled_task.run_count += 1
+ scheduled_task.last_status = "执行中"
+ scheduled_task.update_next_run()
+ self.schedule_store.update_task(scheduled_task)
+
+ self._refresh_schedule_table()
+ self.log_message.emit(f"[调度器] 执行任务: {scheduled_task.name} (ID: {task_id})")
+
+ # 定时任务必须立即启动执行,不受 auto_run 设置影响
+ if not self._is_running():
+ # 从队列中找到刚添加的任务并执行
+ for queued_task in self.task_queue:
+ if queued_task.id == task_id:
+ self._execute_task(queued_task)
+ break
+
+ def _add_schedule(self):
+ """添加调度任务"""
+ dialog = ScheduleEditDialog(parent=self)
+ if dialog.exec() == QDialog.Accepted:
+ task = dialog.get_task()
+ if task:
+ self.schedule_store.add_task(task)
+ self._refresh_schedule_table()
+ self.log_message.emit(f"[调度器] 已创建任务: {task.name}")
+
+ def _edit_schedule(self):
+ """编辑调度任务"""
+ row = self.schedule_table.currentRow()
+ if row < 0:
+ return
+
+ tasks = self.schedule_store.get_all_tasks()
+ if row >= len(tasks):
+ return
+
+ task = tasks[row]
+ dialog = ScheduleEditDialog(task=task, parent=self)
+ if dialog.exec() == QDialog.Accepted:
+ updated_task = dialog.get_task()
+ if updated_task:
+ self.schedule_store.update_task(updated_task)
+ self._refresh_schedule_table()
+ self.log_message.emit(f"[调度器] 已更新任务: {updated_task.name}")
+
+ def _delete_schedule(self, task_id: str):
+ """删除调度任务"""
+ task = self.schedule_store.get_task(task_id)
+ if not task:
+ return
+
+ reply = QMessageBox.question(
+ self,
+ "确认删除",
+ f"确定要删除调度任务 '{task.name}' 吗?",
+ QMessageBox.Yes | QMessageBox.No,
+ QMessageBox.No
+ )
+
+ if reply == QMessageBox.Yes:
+ self.schedule_store.remove_task(task_id)
+ self._refresh_schedule_table()
+ self.log_message.emit(f"[调度器] 已删除任务: {task.name}")
+
+ def _toggle_schedule_enabled(self, task_id: str):
+ """切换调度任务启用状态"""
+ task = self.schedule_store.get_task(task_id)
+ if task:
+ task.enabled = not task.enabled
+ task.update_next_run()
+ self.schedule_store.update_task(task)
+ self._refresh_schedule_table()
+ status = "启用" if task.enabled else "禁用"
+ self.log_message.emit(f"[调度器] {task.name}: {status}")
+
+ def _run_schedule_now(self, task_id: str):
+ """立即执行调度任务"""
+ task = self.schedule_store.get_task(task_id)
+ if task:
+ self._execute_scheduled_task(task)
+
+ def _show_schedule_menu(self, pos):
+ """显示调度任务右键菜单"""
+ item = self.schedule_table.itemAt(pos)
+ if not item:
+ return
+
+ row = item.row()
+ tasks = self.schedule_store.get_all_tasks()
+ if row >= len(tasks):
+ return
+
+ task = tasks[row]
+
+ menu = QMenu(self)
+
+ # 查看日志
+ log_action = QAction("查看执行日志", self)
+ log_action.triggered.connect(lambda: self._view_schedule_log(task.id))
+ menu.addAction(log_action)
+
+ menu.addSeparator()
+
+ # 立即执行
+ run_action = QAction("立即执行", self)
+ run_action.triggered.connect(lambda: self._run_schedule_now(task.id))
+ menu.addAction(run_action)
+
+ # 编辑
+ edit_action = QAction("编辑", self)
+ edit_action.triggered.connect(self._edit_schedule)
+ menu.addAction(edit_action)
+
+ menu.addSeparator()
+
+ # 启用/禁用
+ toggle_text = "禁用" if task.enabled else "启用"
+ toggle_action = QAction(toggle_text, self)
+ toggle_action.triggered.connect(lambda: self._toggle_schedule_enabled(task.id))
+ menu.addAction(toggle_action)
+
+ menu.addSeparator()
+
+ # 删除
+ delete_action = QAction("删除", self)
+ delete_action.triggered.connect(lambda: self._delete_schedule(task.id))
+ menu.addAction(delete_action)
+
+ menu.exec(self.schedule_table.mapToGlobal(pos))
+
+ def _refresh_schedule_table(self):
+ """刷新调度任务表格"""
+ tasks = self.schedule_store.get_all_tasks()
+ self.schedule_table.setRowCount(len(tasks))
+
+ for row, task in enumerate(tasks):
+ # 名称
+ name_item = QTableWidgetItem(task.name)
+ name_item.setData(Qt.UserRole, task.id)
+ self.schedule_table.setItem(row, 0, name_item)
+
+ # 任务
+ tasks_str = ", ".join(task.task_codes[:2])
+ if len(task.task_codes) > 2:
+ tasks_str += f" (+{len(task.task_codes) - 2})"
+ self.schedule_table.setItem(row, 1, QTableWidgetItem(tasks_str))
+
+ # 调度
+ self.schedule_table.setItem(row, 2, QTableWidgetItem(task.schedule.get_description()))
+
+ # 下次执行
+ if task.next_run:
+ next_str = task.next_run.strftime("%m-%d %H:%M")
+ else:
+ next_str = "-"
+ self.schedule_table.setItem(row, 3, QTableWidgetItem(next_str))
+
+ # 上次执行
+ if task.last_run:
+ last_str = task.last_run.strftime("%m-%d %H:%M")
+ else:
+ last_str = "-"
+ self.schedule_table.setItem(row, 4, QTableWidgetItem(last_str))
+
+ # 执行次数
+ self.schedule_table.setItem(row, 5, QTableWidgetItem(str(task.run_count)))
+
+ # 状态
+ if task.enabled:
+ status_text = "启用"
+ status_color = QColor("#1e8e3e")
+ else:
+ status_text = "禁用"
+ status_color = QColor("#9aa0a6")
+ status_item = QTableWidgetItem(status_text)
+ status_item.setForeground(status_color)
+ self.schedule_table.setItem(row, 6, status_item)
+
+ def _update_schedule_execution_record(self, task: QueuedTask, duration: float, summary: str):
+ """更新调度执行记录(如果此任务来自调度)"""
+ schedule_id = self._task_schedule_mapping.get(task.id)
+ if not schedule_id:
+ return
+
+ # 从映射中移除(一次性)
+ del self._task_schedule_mapping[task.id]
+
+ # 获取调度任务
+ scheduled_task = self.schedule_store.get_task(schedule_id)
+ if not scheduled_task:
+ return
+
+ # 更新执行记录(包含完整日志)
+ status = "success" if task.status == TaskStatus.SUCCESS else "failed"
+ scheduled_task.update_execution_record(
+ task_id=task.id,
+ status=status,
+ exit_code=task.exit_code or 0,
+ duration=duration,
+ summary=summary or self._extract_result_summary(task),
+ output=task.output or "",
+ error=task.error or "",
+ )
+
+ # 更新调度任务状态
+ scheduled_task.last_status = "成功" if status == "success" else "失败"
+
+ # 保存
+ self.schedule_store.update_task(scheduled_task)
+ self.log_message.emit(f"[调度器] 任务 {scheduled_task.name} 执行完成: {scheduled_task.last_status}")
+
+ def _view_schedule_log(self, task_id: str):
+ """查看调度任务日志"""
+ task = self.schedule_store.get_task(task_id)
+ if not task:
+ QMessageBox.warning(self, "提示", "未找到调度任务")
+ return
+
+ if not task.execution_history:
+ QMessageBox.information(self, "提示", "该调度任务尚无执行记录")
+ return
+
+ # 传递 task_queue 以便获取执行中任务的实时日志
+ dialog = ScheduleLogDialog(task, self.task_history, self.task_queue, self)
+ dialog.exec()
+
+ def _on_schedule_double_click(self, index):
+ """双击调度任务查看日志"""
+ row = index.row()
+ tasks = self.schedule_store.get_all_tasks()
+ if row < len(tasks):
+ self._view_schedule_log(tasks[row].id)
diff --git a/etl_billiards/gui/widgets/task_panel.py b/etl_billiards/gui/widgets/task_panel.py
new file mode 100644
index 0000000..1880b57
--- /dev/null
+++ b/etl_billiards/gui/widgets/task_panel.py
@@ -0,0 +1,1061 @@
+# -*- coding: utf-8 -*-
+"""任务配置面板"""
+
+from datetime import datetime, timedelta
+
+from PySide6.QtWidgets import (
+ QWidget, QVBoxLayout, QHBoxLayout, QGridLayout,
+ QGroupBox, QLabel, QLineEdit, QComboBox, QCheckBox,
+ QPushButton, QPlainTextEdit, QListWidget, QListWidgetItem,
+ QSplitter, QFrame, QFileDialog, QMessageBox, QScrollArea,
+ QSpinBox, QTabWidget, QDateTimeEdit
+)
+from PySide6.QtCore import Qt, Signal, QDateTime
+from PySide6.QtGui import QFont
+
+from ..models.task_model import TaskItem, TaskConfig, TaskCategory, TASK_CATEGORIES, get_task_category
+from ..utils.cli_builder import CLIBuilder
+from ..utils.app_settings import app_settings
+from ..workers.task_worker import TaskWorker
+
+
+# ODS 自动更新任务(从 API 抓取)
+AUTO_UPDATE_TASKS = [
+ "ODS_PAYMENT",
+ "ODS_MEMBER",
+ "ODS_MEMBER_CARD",
+ "ODS_MEMBER_BALANCE",
+ "ODS_SETTLEMENT_RECORDS",
+ "ODS_TABLE_USE",
+ "ODS_ASSISTANT_ACCOUNT",
+ "ODS_ASSISTANT_LEDGER",
+ "ODS_ASSISTANT_ABOLISH",
+ "ODS_REFUND",
+ "ODS_PLATFORM_COUPON",
+ "ODS_RECHARGE_SETTLE",
+ "ODS_SETTLEMENT_TICKET",
+]
+
+# 数据校验相关任务
+INTEGRITY_CHECK_TASKS = [
+ "DATA_INTEGRITY_CHECK",
+]
+
+# 所有可用任务
+ALL_TASKS = [
+ # ODS 任务
+ ("ODS_PAYMENT", "支付流水", "抓取支付记录到 ODS"),
+ ("ODS_MEMBER", "会员档案", "抓取会员信息到 ODS"),
+ ("ODS_MEMBER_CARD", "会员储值卡", "抓取会员卡信息到 ODS"),
+ ("ODS_MEMBER_BALANCE", "会员余额变动", "抓取会员余额变动到 ODS"),
+ ("ODS_SETTLEMENT_RECORDS", "结账记录", "抓取结账记录到 ODS"),
+ ("ODS_TABLE_USE", "台费计费流水", "抓取台费使用记录到 ODS"),
+ ("ODS_ASSISTANT_ACCOUNT", "助教账号", "抓取助教信息到 ODS"),
+ ("ODS_ASSISTANT_LEDGER", "助教流水", "抓取助教服务流水到 ODS"),
+ ("ODS_ASSISTANT_ABOLISH", "助教作废", "抓取助教作废记录到 ODS"),
+ ("ODS_REFUND", "退款流水", "抓取退款记录到 ODS"),
+ ("ODS_PLATFORM_COUPON", "平台券核销", "抓取券核销记录到 ODS"),
+ ("ODS_RECHARGE_SETTLE", "充值结算", "抓取充值结算记录到 ODS"),
+ ("ODS_GROUP_PACKAGE", "团购套餐", "抓取团购套餐定义到 ODS"),
+ ("ODS_GROUP_BUY_REDEMPTION", "团购核销", "抓取团购核销记录到 ODS"),
+ ("ODS_INVENTORY_STOCK", "库存汇总", "抓取库存汇总到 ODS"),
+ ("ODS_INVENTORY_CHANGE", "库存变化", "抓取库存变动记录到 ODS"),
+ ("ODS_TABLES", "台桌维表", "抓取台桌信息到 ODS"),
+ ("ODS_GOODS_CATEGORY", "商品分类", "抓取商品分类到 ODS"),
+ ("ODS_STORE_GOODS", "门店商品", "抓取门店商品档案到 ODS"),
+ ("ODS_STORE_GOODS_SALES", "商品销售流水", "抓取商品销售流水到 ODS"),
+ ("ODS_TABLE_FEE_DISCOUNT", "台费折扣", "抓取台费折扣记录到 ODS"),
+ ("ODS_TENANT_GOODS", "租户商品", "抓取租户商品档案到 ODS"),
+ ("ODS_SETTLEMENT_TICKET", "结账小票", "抓取结账小票详情到 ODS"),
+ # DWD/DWS 任务
+ ("DWD_LOAD_FROM_ODS", "ODS→DWD 装载", "从 ODS 增量装载到 DWD"),
+ ("DWD_QUALITY_CHECK", "DWD 质量检查", "执行 DWD 数据质量检查"),
+ ("DWS_BUILD_ORDER_SUMMARY", "构建订单汇总", "重算 DWS 订单汇总表"),
+ # Schema 初始化
+ ("INIT_ODS_SCHEMA", "初始化 ODS Schema", "创建/重建 ODS 表结构"),
+ ("INIT_DWD_SCHEMA", "初始化 DWD Schema", "创建/重建 DWD 表结构"),
+ ("INIT_DWS_SCHEMA", "初始化 DWS Schema", "创建/重建 DWS 表结构"),
+ # 其他任务
+ ("MANUAL_INGEST", "手工数据灌入", "从本地 JSON 回放入库"),
+ ("CHECK_CUTOFF", "检查 Cutoff", "查看各表数据截止时间"),
+ ("DATA_INTEGRITY_CHECK", "数据完整性检查", "检查 ODS/DWD 数据完整性"),
+]
+
+
+class TaskPanel(QWidget):
+ """任务配置面板"""
+
+ # 信号
+ task_started = Signal(str) # 任务开始信号
+ task_finished = Signal(bool, str) # 任务完成信号 (success, message)
+ log_message = Signal(str) # 日志消息信号
+ add_to_queue = Signal(object) # 添加到队列信号 (TaskConfig)
+ create_schedule = Signal(str, list, dict) # 创建调度任务信号 (name, task_codes, task_config)
+
+ def __init__(self, parent=None):
+ super().__init__(parent)
+ self.cli_builder = CLIBuilder()
+ self.worker = None
+ self._init_ui()
+ self._connect_signals()
+ self.refresh_tasks()
+ self._load_settings() # 启动时加载保存的设置
+
+ def _init_ui(self):
+ """初始化界面"""
+ layout = QVBoxLayout(self)
+ layout.setContentsMargins(16, 16, 16, 16)
+ layout.setSpacing(16)
+
+ # 标题
+ title = QLabel("任务配置")
+ title.setProperty("heading", True)
+ layout.addWidget(title)
+
+ # 创建分割器
+ splitter = QSplitter(Qt.Horizontal)
+ layout.addWidget(splitter, 1)
+
+ # 左侧:任务选择
+ left_widget = self._create_task_selection()
+ splitter.addWidget(left_widget)
+
+ # 右侧:参数配置
+ right_widget = self._create_config_area()
+ splitter.addWidget(right_widget)
+
+ # 设置分割比例
+ splitter.setSizes([400, 600])
+
+ # 底部:CLI 预览和执行按钮
+ bottom_widget = self._create_bottom_area()
+ layout.addWidget(bottom_widget)
+
+ def _create_task_selection(self) -> QWidget:
+ """创建任务选择区域"""
+ widget = QWidget()
+ layout = QVBoxLayout(widget)
+ layout.setContentsMargins(0, 0, 8, 0)
+
+ # 任务分类过滤
+ filter_layout = QHBoxLayout()
+ filter_layout.addWidget(QLabel("分类:"))
+ self.category_combo = QComboBox()
+ self.category_combo.addItem("全部", None)
+ self.category_combo.addItem("ODS 数据抓取", TaskCategory.ODS)
+ self.category_combo.addItem("DWD 装载", TaskCategory.DWD)
+ self.category_combo.addItem("DWS 汇总", TaskCategory.DWS)
+ self.category_combo.addItem("Schema 初始化", TaskCategory.SCHEMA)
+ self.category_combo.addItem("质量检查", TaskCategory.QUALITY)
+ self.category_combo.addItem("其他", TaskCategory.OTHER)
+ filter_layout.addWidget(self.category_combo, 1)
+ layout.addLayout(filter_layout)
+
+ # 快捷操作按钮
+ btn_layout = QHBoxLayout()
+ self.select_all_btn = QPushButton("全选")
+ self.select_all_btn.setProperty("secondary", True)
+ self.deselect_all_btn = QPushButton("全不选")
+ self.deselect_all_btn.setProperty("secondary", True)
+ btn_layout.addWidget(self.select_all_btn)
+ btn_layout.addWidget(self.deselect_all_btn)
+ layout.addLayout(btn_layout)
+
+ # 任务列表
+ self.task_list = QListWidget()
+ self.task_list.setSelectionMode(QListWidget.MultiSelection)
+ layout.addWidget(self.task_list, 1)
+
+ # 已选任务数
+ self.selected_count_label = QLabel("已选: 0 个任务")
+ self.selected_count_label.setProperty("subheading", True)
+ layout.addWidget(self.selected_count_label)
+
+ return widget
+
+ def _create_config_area(self) -> QWidget:
+ """创建参数配置区域"""
+ # 使用选项卡区分快捷操作和高级配置
+ tab_widget = QTabWidget()
+
+ # 快捷操作选项卡
+ quick_tab = self._create_quick_actions_tab()
+ tab_widget.addTab(quick_tab, "快捷操作")
+
+ # 高级配置选项卡
+ advanced_tab = self._create_advanced_config_tab()
+ tab_widget.addTab(advanced_tab, "高级配置")
+
+ return tab_widget
+
+ def _create_quick_actions_tab(self) -> QWidget:
+ """创建快捷操作选项卡"""
+ scroll_area = QScrollArea()
+ scroll_area.setWidgetResizable(True)
+ scroll_area.setFrameShape(QFrame.NoFrame)
+
+ widget = QWidget()
+ layout = QVBoxLayout(widget)
+ layout.setContentsMargins(8, 8, 8, 8)
+ layout.setSpacing(16)
+
+ # ====== 自动更新 ======
+ auto_update_group = QGroupBox("自动更新(API → ODS)")
+ auto_update_layout = QVBoxLayout(auto_update_group)
+
+ # 说明
+ desc_label = QLabel("从 API 抓取数据并更新 ODS 层,适用于日常增量更新")
+ desc_label.setProperty("subheading", True)
+ desc_label.setWordWrap(True)
+ auto_update_layout.addWidget(desc_label)
+
+ # 时间范围
+ time_layout = QHBoxLayout()
+ time_layout.addWidget(QLabel("时间范围:"))
+
+ self.auto_update_hours = QSpinBox()
+ self.auto_update_hours.setRange(1, 720) # 1小时 - 30天
+ self.auto_update_hours.setValue(24)
+ self.auto_update_hours.setSuffix(" 小时前")
+ time_layout.addWidget(self.auto_update_hours)
+
+ time_layout.addWidget(QLabel("到 当前"))
+ time_layout.addStretch()
+ auto_update_layout.addLayout(time_layout)
+
+ # 冗余窗口
+ overlap_layout = QHBoxLayout()
+ overlap_layout.addWidget(QLabel("冗余窗口:"))
+ self.overlap_seconds = QSpinBox()
+ self.overlap_seconds.setRange(0, 7200)
+ self.overlap_seconds.setValue(3600)
+ self.overlap_seconds.setSuffix(" 秒")
+ self.overlap_seconds.setToolTip("向前多抓取的时间,避免边界数据丢失")
+ overlap_layout.addWidget(self.overlap_seconds)
+ overlap_layout.addStretch()
+ auto_update_layout.addLayout(overlap_layout)
+
+ # 任务选择
+ task_header_layout = QHBoxLayout()
+ task_label = QLabel("包含任务:")
+ task_header_layout.addWidget(task_label)
+ task_header_layout.addStretch()
+
+ self.auto_update_select_all_btn = QPushButton("全选")
+ self.auto_update_select_all_btn.setProperty("secondary", True)
+ self.auto_update_select_all_btn.setFixedWidth(60)
+ task_header_layout.addWidget(self.auto_update_select_all_btn)
+
+ self.auto_update_deselect_all_btn = QPushButton("全不选")
+ self.auto_update_deselect_all_btn.setProperty("secondary", True)
+ self.auto_update_deselect_all_btn.setFixedWidth(60)
+ task_header_layout.addWidget(self.auto_update_deselect_all_btn)
+
+ auto_update_layout.addLayout(task_header_layout)
+
+ self.auto_update_tasks_list = QListWidget()
+ self.auto_update_tasks_list.setSelectionMode(QListWidget.MultiSelection)
+ self.auto_update_tasks_list.setMaximumHeight(150)
+ for task_code in AUTO_UPDATE_TASKS:
+ item = QListWidgetItem(task_code)
+ item.setSelected(True) # 默认全选
+ self.auto_update_tasks_list.addItem(item)
+ auto_update_layout.addWidget(self.auto_update_tasks_list)
+
+ # 包含 DWD 装载
+ self.include_dwd_check = QCheckBox("完成后执行 DWD 装载 (ODS → DWD)")
+ self.include_dwd_check.setChecked(True)
+ auto_update_layout.addWidget(self.include_dwd_check)
+
+ # 自动校验
+ self.auto_verify_check = QCheckBox("完成后执行数据校验")
+ self.auto_verify_check.setToolTip("ETL 导入完成后,自动执行数据完整性校验")
+ self.auto_verify_check.setChecked(False)
+ auto_update_layout.addWidget(self.auto_verify_check)
+
+ # 操作按钮
+ auto_btn_layout = QHBoxLayout()
+ auto_btn_layout.addStretch()
+
+ self.auto_update_run_btn = QPushButton("立即执行一次")
+ self.auto_update_run_btn.setToolTip("添加到任务队列并立即执行")
+ auto_btn_layout.addWidget(self.auto_update_run_btn)
+
+ self.auto_update_schedule_btn = QPushButton("创建调度任务")
+ self.auto_update_schedule_btn.setToolTip("添加到定时调度中,可设置执行周期")
+ auto_btn_layout.addWidget(self.auto_update_schedule_btn)
+
+ auto_update_layout.addLayout(auto_btn_layout)
+
+ layout.addWidget(auto_update_group)
+
+ # ====== 数据校验 ======
+ integrity_group = QGroupBox("数据校验(API vs ODS)")
+ integrity_layout = QVBoxLayout(integrity_group)
+
+ # 说明
+ int_desc = QLabel("对比 API 数据与 ODS 数据,检查是否有缺失或不一致")
+ int_desc.setProperty("subheading", True)
+ int_desc.setWordWrap(True)
+ integrity_layout.addWidget(int_desc)
+
+ # 校验模式
+ mode_layout = QHBoxLayout()
+ mode_layout.addWidget(QLabel("校验模式:"))
+ self.integrity_mode_combo = QComboBox()
+ self.integrity_mode_combo.addItem("历史全量校验", "history")
+ self.integrity_mode_combo.addItem("最近增量校验", "recent")
+ mode_layout.addWidget(self.integrity_mode_combo, 1)
+ integrity_layout.addLayout(mode_layout)
+
+ # 时间范围 - 历史模式
+ self.history_range_widget = QWidget()
+ history_layout = QGridLayout(self.history_range_widget)
+ history_layout.setContentsMargins(0, 0, 0, 0)
+
+ history_layout.addWidget(QLabel("开始日期:"), 0, 0)
+ self.integrity_start_date = QDateTimeEdit()
+ self.integrity_start_date.setDisplayFormat("yyyy-MM-dd")
+ self.integrity_start_date.setCalendarPopup(True)
+ self.integrity_start_date.setDateTime(QDateTime.currentDateTime().addMonths(-6))
+ history_layout.addWidget(self.integrity_start_date, 0, 1)
+
+ history_layout.addWidget(QLabel("结束日期:"), 1, 0)
+ self.integrity_end_date = QDateTimeEdit()
+ self.integrity_end_date.setDisplayFormat("yyyy-MM-dd")
+ self.integrity_end_date.setCalendarPopup(True)
+ self.integrity_end_date.setDateTime(QDateTime.currentDateTime())
+ history_layout.addWidget(self.integrity_end_date, 1, 1)
+
+ integrity_layout.addWidget(self.history_range_widget)
+
+ # 时间范围 - 最近模式
+ self.recent_range_widget = QWidget()
+ recent_layout = QHBoxLayout(self.recent_range_widget)
+ recent_layout.setContentsMargins(0, 0, 0, 0)
+ recent_layout.addWidget(QLabel("回溯时间:"))
+ self.integrity_hours = QSpinBox()
+ self.integrity_hours.setRange(1, 168) # 1小时 - 7天
+ self.integrity_hours.setValue(24)
+ self.integrity_hours.setSuffix(" 小时")
+ recent_layout.addWidget(self.integrity_hours)
+ recent_layout.addStretch()
+ self.recent_range_widget.setVisible(False)
+ integrity_layout.addWidget(self.recent_range_widget)
+
+ # 校验选项
+ self.include_dimensions_check = QCheckBox("包含维度表校验")
+ integrity_layout.addWidget(self.include_dimensions_check)
+
+ # 自动补全选项
+ self.auto_backfill_check = QCheckBox("校验后自动补全丢失数据")
+ self.auto_backfill_check.setToolTip("如果发现丢失数据,自动从 API 重新获取并补全到 ODS")
+ integrity_layout.addWidget(self.auto_backfill_check)
+
+ # 指定 ODS 任务
+ ods_task_layout = QHBoxLayout()
+ ods_task_layout.addWidget(QLabel("指定任务 (可选):"))
+ self.integrity_ods_tasks = QLineEdit()
+ self.integrity_ods_tasks.setPlaceholderText("例: ODS_PAYMENT,ODS_MEMBER (留空=全部)")
+ ods_task_layout.addWidget(self.integrity_ods_tasks, 1)
+ integrity_layout.addLayout(ods_task_layout)
+
+ # 操作按钮
+ int_btn_layout = QHBoxLayout()
+ int_btn_layout.addStretch()
+
+ self.integrity_run_btn = QPushButton("立即执行一次")
+ self.integrity_run_btn.setToolTip("添加到任务队列并立即执行")
+ int_btn_layout.addWidget(self.integrity_run_btn)
+
+ self.integrity_schedule_btn = QPushButton("创建调度任务")
+ self.integrity_schedule_btn.setToolTip("添加到定时调度中,可设置执行周期")
+ int_btn_layout.addWidget(self.integrity_schedule_btn)
+
+ integrity_layout.addLayout(int_btn_layout)
+
+ layout.addWidget(integrity_group)
+
+ # 弹性空间
+ layout.addStretch()
+
+ scroll_area.setWidget(widget)
+ return scroll_area
+
+ def _create_advanced_config_tab(self) -> QWidget:
+ """创建高级配置选项卡"""
+ scroll_area = QScrollArea()
+ scroll_area.setWidgetResizable(True)
+ scroll_area.setFrameShape(QFrame.NoFrame)
+
+ widget = QWidget()
+ layout = QVBoxLayout(widget)
+ layout.setContentsMargins(8, 8, 8, 8)
+
+ # Pipeline 流程配置
+ pipeline_group = QGroupBox("流水线配置")
+ pipeline_layout = QGridLayout(pipeline_group)
+
+ pipeline_layout.addWidget(QLabel("运行模式:"), 0, 0)
+ self.pipeline_flow_combo = QComboBox()
+ self.pipeline_flow_combo.addItem("FULL - 在线抓取 + 入库", "FULL")
+ self.pipeline_flow_combo.addItem("FETCH_ONLY - 仅在线抓取落盘", "FETCH_ONLY")
+ self.pipeline_flow_combo.addItem("INGEST_ONLY - 仅本地 JSON 入库", "INGEST_ONLY")
+ pipeline_layout.addWidget(self.pipeline_flow_combo, 0, 1)
+
+ self.dry_run_check = QCheckBox("Dry-run 模式(不提交数据库)")
+ pipeline_layout.addWidget(self.dry_run_check, 1, 0, 1, 2)
+
+ layout.addWidget(pipeline_group)
+
+ # 时间窗口配置
+ window_group = QGroupBox("时间窗口(可选)")
+ window_layout = QGridLayout(window_group)
+
+ window_layout.addWidget(QLabel("开始时间:"), 0, 0)
+ self.window_start_edit = QLineEdit()
+ self.window_start_edit.setPlaceholderText("例: 2025-07-01 00:00:00")
+ window_layout.addWidget(self.window_start_edit, 0, 1)
+
+ window_layout.addWidget(QLabel("结束时间:"), 1, 0)
+ self.window_end_edit = QLineEdit()
+ self.window_end_edit.setPlaceholderText("例: 2025-08-01 00:00:00")
+ window_layout.addWidget(self.window_end_edit, 1, 1)
+
+ # 窗口切分选项
+ window_layout.addWidget(QLabel("切分模式:"), 2, 0)
+ self.window_split_combo = QComboBox()
+ self.window_split_combo.addItem("不切分", "none")
+ self.window_split_combo.addItem("按月切分", "month")
+ self.window_split_combo.setToolTip("长时间窗口按月切分执行,避免单次请求过大")
+ window_layout.addWidget(self.window_split_combo, 2, 1)
+
+ window_layout.addWidget(QLabel("补偿小时:"), 3, 0)
+ self.window_compensation_spin = QSpinBox()
+ self.window_compensation_spin.setRange(0, 168) # 最多7天
+ self.window_compensation_spin.setValue(0)
+ self.window_compensation_spin.setSuffix(" 小时")
+ self.window_compensation_spin.setToolTip("窗口前后扩展的小时数,用于捕获边界数据")
+ window_layout.addWidget(self.window_compensation_spin, 3, 1)
+
+ layout.addWidget(window_group)
+
+ # 数据源配置
+ source_group = QGroupBox("数据源配置(INGEST_ONLY 模式)")
+ source_layout = QGridLayout(source_group)
+
+ source_layout.addWidget(QLabel("JSON 目录:"), 0, 0)
+ self.ingest_source_edit = QLineEdit()
+ self.ingest_source_edit.setPlaceholderText("本地 JSON 文件目录")
+ source_layout.addWidget(self.ingest_source_edit, 0, 1)
+
+ self.browse_btn = QPushButton("浏览...")
+ self.browse_btn.setProperty("secondary", True)
+ source_layout.addWidget(self.browse_btn, 0, 2)
+
+ layout.addWidget(source_group)
+
+ # 覆盖配置(高级)
+ override_group = QGroupBox("覆盖配置(可选)")
+ override_layout = QGridLayout(override_group)
+
+ override_layout.addWidget(QLabel("门店 ID:"), 0, 0)
+ self.store_id_edit = QLineEdit()
+ self.store_id_edit.setPlaceholderText("使用 .env 中的配置")
+ override_layout.addWidget(self.store_id_edit, 0, 1)
+
+ override_layout.addWidget(QLabel("数据库 DSN:"), 1, 0)
+ self.pg_dsn_edit = QLineEdit()
+ self.pg_dsn_edit.setPlaceholderText("使用 .env 中的配置")
+ override_layout.addWidget(self.pg_dsn_edit, 1, 1)
+
+ override_layout.addWidget(QLabel("API Token:"), 2, 0)
+ self.api_token_edit = QLineEdit()
+ self.api_token_edit.setPlaceholderText("使用 .env 中的配置")
+ self.api_token_edit.setEchoMode(QLineEdit.Password)
+ override_layout.addWidget(self.api_token_edit, 2, 1)
+
+ layout.addWidget(override_group)
+
+ # 弹性空间
+ layout.addStretch()
+
+ scroll_area.setWidget(widget)
+ return scroll_area
+
+ def _create_bottom_area(self) -> QWidget:
+ """创建底部区域"""
+ widget = QWidget()
+ layout = QVBoxLayout(widget)
+ layout.setContentsMargins(0, 0, 0, 0)
+
+ # CLI 预览
+ preview_group = QGroupBox("命令行预览")
+ preview_layout = QVBoxLayout(preview_group)
+
+ self.cli_preview = QPlainTextEdit()
+ self.cli_preview.setReadOnly(True)
+ self.cli_preview.setMaximumHeight(80)
+ self.cli_preview.setFont(QFont("Consolas", 10))
+ preview_layout.addWidget(self.cli_preview)
+
+ layout.addWidget(preview_group)
+
+ # 执行按钮
+ btn_layout = QHBoxLayout()
+ btn_layout.addStretch()
+
+ self.add_to_queue_btn = QPushButton("添加到队列")
+ self.add_to_queue_btn.setProperty("secondary", True)
+ btn_layout.addWidget(self.add_to_queue_btn)
+
+ self.run_btn = QPushButton("立即执行")
+ self.run_btn.setFixedWidth(120)
+ btn_layout.addWidget(self.run_btn)
+
+ self.stop_btn = QPushButton("停止")
+ self.stop_btn.setProperty("danger", True)
+ self.stop_btn.setEnabled(False)
+ self.stop_btn.setFixedWidth(80)
+ btn_layout.addWidget(self.stop_btn)
+
+ layout.addLayout(btn_layout)
+
+ return widget
+
+ def _connect_signals(self):
+ """连接信号"""
+ # 分类过滤
+ self.category_combo.currentIndexChanged.connect(self._filter_tasks)
+
+ # 任务选择
+ self.task_list.itemSelectionChanged.connect(self._on_selection_changed)
+ self.select_all_btn.clicked.connect(self._select_all)
+ self.deselect_all_btn.clicked.connect(self._deselect_all)
+
+ # 配置变化
+ self.pipeline_flow_combo.currentIndexChanged.connect(self._update_preview)
+ self.dry_run_check.stateChanged.connect(self._update_preview)
+ self.window_start_edit.textChanged.connect(self._update_preview)
+ self.window_end_edit.textChanged.connect(self._update_preview)
+ self.ingest_source_edit.textChanged.connect(self._update_preview)
+ self.store_id_edit.textChanged.connect(self._update_preview)
+ self.pg_dsn_edit.textChanged.connect(self._update_preview)
+ self.api_token_edit.textChanged.connect(self._update_preview)
+
+ # 浏览目录
+ self.browse_btn.clicked.connect(self._browse_source_dir)
+
+ # 执行按钮
+ self.run_btn.clicked.connect(self._run_task)
+ self.stop_btn.clicked.connect(self._stop_task)
+ self.add_to_queue_btn.clicked.connect(self._add_task_to_queue)
+
+ # 快捷操作 - 自动更新
+ self.auto_update_run_btn.clicked.connect(self._run_auto_update_now)
+ self.auto_update_schedule_btn.clicked.connect(self._create_auto_update_schedule)
+ self.auto_update_select_all_btn.clicked.connect(self._auto_update_select_all)
+ self.auto_update_deselect_all_btn.clicked.connect(self._auto_update_deselect_all)
+
+ # 快捷操作 - 数据校验
+ self.integrity_run_btn.clicked.connect(self._run_integrity_check_now)
+ self.integrity_schedule_btn.clicked.connect(self._create_integrity_schedule)
+ self.integrity_mode_combo.currentIndexChanged.connect(self._on_integrity_mode_changed)
+
+ # 保存设置的信号连接
+ self.auto_update_hours.valueChanged.connect(self._save_auto_update_settings)
+ self.overlap_seconds.valueChanged.connect(self._save_auto_update_settings)
+ self.include_dwd_check.stateChanged.connect(self._save_auto_update_settings)
+ self.auto_verify_check.stateChanged.connect(self._save_auto_update_settings)
+ self.integrity_mode_combo.currentIndexChanged.connect(self._save_integrity_settings)
+ self.integrity_start_date.dateTimeChanged.connect(self._save_integrity_settings)
+ self.integrity_end_date.dateTimeChanged.connect(self._save_integrity_settings)
+ self.integrity_hours.valueChanged.connect(self._save_integrity_settings)
+ self.include_dimensions_check.stateChanged.connect(self._save_integrity_settings)
+ self.auto_backfill_check.stateChanged.connect(self._save_integrity_settings)
+ self.integrity_ods_tasks.textChanged.connect(self._save_integrity_settings)
+ self.pipeline_flow_combo.currentIndexChanged.connect(self._save_advanced_settings)
+ self.dry_run_check.stateChanged.connect(self._save_advanced_settings)
+ self.window_split_combo.currentIndexChanged.connect(self._save_advanced_settings)
+ self.window_compensation_spin.valueChanged.connect(self._save_advanced_settings)
+
+ def refresh_tasks(self):
+ """刷新任务列表"""
+ self.task_list.clear()
+
+ current_category = self.category_combo.currentData()
+
+ for code, name, desc in ALL_TASKS:
+ category = get_task_category(code)
+
+ # 应用分类过滤
+ if current_category is not None and category != current_category:
+ continue
+
+ item = QListWidgetItem(f"{name} ({code})")
+ item.setData(Qt.UserRole, code)
+ item.setToolTip(desc)
+ self.task_list.addItem(item)
+
+ self._on_selection_changed()
+
+ def _filter_tasks(self):
+ """过滤任务列表"""
+ self.refresh_tasks()
+
+ def _on_selection_changed(self):
+ """选择变化时"""
+ selected = self.task_list.selectedItems()
+ self.selected_count_label.setText(f"已选: {len(selected)} 个任务")
+ self._update_preview()
+
+ def _select_all(self):
+ """全选"""
+ self.task_list.selectAll()
+
+ def _deselect_all(self):
+ """全不选"""
+ self.task_list.clearSelection()
+
+ def _browse_source_dir(self):
+ """浏览数据源目录"""
+ dir_path = QFileDialog.getExistingDirectory(
+ self, "选择 JSON 数据目录"
+ )
+ if dir_path:
+ self.ingest_source_edit.setText(dir_path)
+
+ def _get_config(self) -> TaskConfig:
+ """获取当前配置"""
+ # 获取选中的任务
+ selected_tasks = []
+ for item in self.task_list.selectedItems():
+ task_code = item.data(Qt.UserRole)
+ if task_code:
+ selected_tasks.append(task_code)
+
+ # 构建环境变量(窗口切分参数)
+ env_vars = {}
+ split_unit = self.window_split_combo.currentData() or "none"
+ compensation = self.window_compensation_spin.value()
+ if split_unit and split_unit != "none":
+ env_vars["WINDOW_SPLIT_UNIT"] = split_unit
+ if compensation > 0:
+ env_vars["WINDOW_COMPENSATION_HOURS"] = str(compensation)
+
+ # 构建配置
+ config = TaskConfig(
+ tasks=selected_tasks,
+ pipeline_flow=self.pipeline_flow_combo.currentData(),
+ dry_run=self.dry_run_check.isChecked(),
+ window_start=self.window_start_edit.text().strip() or None,
+ window_end=self.window_end_edit.text().strip() or None,
+ window_split=split_unit,
+ window_compensation=compensation,
+ ingest_source=self.ingest_source_edit.text().strip() or None,
+ store_id=int(self.store_id_edit.text()) if self.store_id_edit.text().strip().isdigit() else None,
+ pg_dsn=self.pg_dsn_edit.text().strip() or None,
+ api_token=self.api_token_edit.text().strip() or None,
+ env_vars=env_vars,
+ )
+
+ return config
+
+ def _update_preview(self):
+ """更新命令行预览"""
+ config = self._get_config()
+ cmd_str = self.cli_builder.build_command_string(config)
+ self.cli_preview.setPlainText(cmd_str)
+
+ def _run_task(self):
+ """执行任务"""
+ config = self._get_config()
+
+ if not config.tasks:
+ QMessageBox.warning(self, "提示", "请至少选择一个任务")
+ return
+
+ # 创建工作线程
+ cmd = self.cli_builder.build_command(config)
+ self.worker = TaskWorker(cmd)
+
+ # 连接信号
+ self.worker.output_received.connect(self._on_output)
+ self.worker.task_finished.connect(self._on_finished)
+ self.worker.error_occurred.connect(self._on_error)
+
+ # 更新 UI 状态
+ self.run_btn.setEnabled(False)
+ self.stop_btn.setEnabled(True)
+
+ # 发送开始信号
+ task_info = ",".join(config.tasks[:3])
+ if len(config.tasks) > 3:
+ task_info += f" 等{len(config.tasks)}个任务"
+ self.task_started.emit(task_info)
+
+ # 启动
+ self.worker.start()
+
+ def _stop_task(self):
+ """停止任务"""
+ if self.worker and self.worker.isRunning():
+ self.worker.stop()
+ self.log_message.emit("[GUI] 正在停止任务...")
+
+ def _on_output(self, line: str):
+ """收到输出"""
+ self.log_message.emit(line)
+
+ def _on_finished(self, exit_code: int, summary: str):
+ """任务完成"""
+ self.run_btn.setEnabled(True)
+ self.stop_btn.setEnabled(False)
+
+ success = exit_code == 0
+ message = summary if summary else ("任务执行成功" if success else f"任务执行失败 (exit={exit_code})")
+ self.task_finished.emit(success, message)
+
+ if success:
+ self.log_message.emit(f"[GUI] 任务完成: {message}")
+ else:
+ self.log_message.emit(f"[GUI] 任务失败: {message}")
+
+ def _on_error(self, error: str):
+ """发生错误"""
+ self.log_message.emit(f"[GUI] 错误: {error}")
+ QMessageBox.critical(self, "执行错误", error)
+
+ def is_running(self) -> bool:
+ """是否正在执行任务"""
+ return self.worker is not None and self.worker.isRunning()
+
+ def _add_task_to_queue(self):
+ """将任务列表中选中的任务添加到队列"""
+ config = self._get_config()
+
+ if not config.tasks:
+ QMessageBox.warning(self, "提示", "请至少选择一个任务")
+ return
+
+ # 发送信号添加到队列
+ self.add_to_queue.emit(config)
+
+ task_info = ",".join(config.tasks[:3])
+ if len(config.tasks) > 3:
+ task_info += f" 等{len(config.tasks)}个"
+
+ self.log_message.emit(f"[GUI] 已添加到任务队列: {task_info}")
+ QMessageBox.information(self, "提示", f"已添加到任务队列\n\n任务: {task_info}\n\n请切换到「任务管理」查看和执行")
+
+ def _on_integrity_mode_changed(self, index: int):
+ """校验模式变化"""
+ mode = self.integrity_mode_combo.currentData()
+ self.history_range_widget.setVisible(mode == "history")
+ self.recent_range_widget.setVisible(mode == "recent")
+
+ def _auto_update_select_all(self):
+ """自动更新任务列表全选"""
+ self.auto_update_tasks_list.selectAll()
+ self._save_auto_update_settings()
+
+ def _auto_update_deselect_all(self):
+ """自动更新任务列表全不选"""
+ self.auto_update_tasks_list.clearSelection()
+ self._save_auto_update_settings()
+
+ def _get_auto_update_tasks(self) -> list:
+ """获取自动更新选中的任务"""
+ selected_tasks = []
+ for i in range(self.auto_update_tasks_list.count()):
+ item = self.auto_update_tasks_list.item(i)
+ if item.isSelected():
+ selected_tasks.append(item.text())
+
+ if self.include_dwd_check.isChecked():
+ selected_tasks.append("DWD_LOAD_FROM_ODS")
+
+ return selected_tasks
+
+ def _get_auto_update_config(self) -> dict:
+ """获取自动更新配置"""
+ return {
+ "pipeline_flow": "FULL",
+ "lookback_hours": self.auto_update_hours.value(),
+ "overlap_seconds": self.overlap_seconds.value(),
+ }
+
+ def _run_auto_update_now(self):
+ """立即执行自动更新(添加到队列)"""
+ selected_tasks = self._get_auto_update_tasks()
+
+ if not selected_tasks:
+ QMessageBox.warning(self, "提示", "请至少选择一个任务")
+ return
+
+ hours = self.auto_update_hours.value()
+ overlap = self.overlap_seconds.value()
+ include_dwd = self.include_dwd_check.isChecked()
+ auto_verify = self.auto_verify_check.isChecked()
+
+ now = datetime.now()
+ start_time = now - timedelta(hours=hours, seconds=overlap)
+
+ # 构建完整任务列表
+ all_tasks = selected_tasks.copy()
+
+ # 添加 DWD 装载
+ if include_dwd and "DWD_LOAD_FROM_ODS" not in all_tasks:
+ all_tasks.append("DWD_LOAD_FROM_ODS")
+
+ # 添加数据校验
+ if auto_verify and "DATA_INTEGRITY_CHECK" not in all_tasks:
+ all_tasks.append("DATA_INTEGRITY_CHECK")
+
+ # 构建环境变量(用于校验任务)
+ env_vars = {}
+ if auto_verify:
+ env_vars["INTEGRITY_MODE"] = "window"
+ env_vars["INTEGRITY_AUTO_BACKFILL"] = "1" # 自动补全丢失数据
+
+ config = TaskConfig(
+ tasks=all_tasks,
+ pipeline_flow="FULL",
+ window_start=start_time.strftime("%Y-%m-%d %H:%M:%S"),
+ window_end=now.strftime("%Y-%m-%d %H:%M:%S"),
+ env_vars=env_vars,
+ )
+
+ # 更新预览
+ cmd_str = self.cli_builder.build_command_string(config)
+ self.cli_preview.setPlainText(cmd_str)
+
+ # 构建任务描述
+ desc_parts = [f"自动更新 ({hours}h)"]
+ if include_dwd:
+ desc_parts.append("+ DWD")
+ if auto_verify:
+ desc_parts.append("+ 校验")
+ task_desc = " ".join(desc_parts)
+
+ # 发送信号添加到队列
+ self.add_to_queue.emit(config)
+ self.log_message.emit(f"[GUI] 已添加到任务队列: {task_desc}")
+ QMessageBox.information(self, "提示", f"已添加到任务队列\n\n任务: {task_desc}\n包含: {len(all_tasks)} 个任务\n\n请切换到「任务管理」查看和执行")
+
+ def _create_auto_update_schedule(self):
+ """创建自动更新的调度任务"""
+ selected_tasks = self._get_auto_update_tasks()
+
+ if not selected_tasks:
+ QMessageBox.warning(self, "提示", "请至少选择一个任务")
+ return
+
+ hours = self.auto_update_hours.value()
+ task_config = self._get_auto_update_config()
+
+ # 发送信号创建调度任务
+ self.create_schedule.emit(
+ f"自动更新 ({hours}h)",
+ selected_tasks,
+ task_config
+ )
+ self.log_message.emit(f"[GUI] 创建调度任务: 自动更新 ({hours}h)")
+
+ def _get_integrity_config(self) -> dict:
+ """获取数据校验配置"""
+ mode = self.integrity_mode_combo.currentData()
+
+ config = {
+ "pipeline_flow": "INGEST_ONLY",
+ "integrity_mode": mode,
+ "integrity_include_dimensions": self.include_dimensions_check.isChecked(),
+ "integrity_auto_backfill": self.auto_backfill_check.isChecked(),
+ }
+
+ if mode == "history":
+ config["integrity_history_start"] = self.integrity_start_date.dateTime().toString("yyyy-MM-dd")
+ config["integrity_history_end"] = self.integrity_end_date.dateTime().toString("yyyy-MM-dd")
+ else:
+ config["lookback_hours"] = self.integrity_hours.value()
+
+ ods_tasks = self.integrity_ods_tasks.text().strip()
+ if ods_tasks:
+ config["integrity_ods_task_codes"] = ods_tasks
+
+ return config
+
+ def _run_integrity_check_now(self):
+ """立即执行数据校验(添加到队列)"""
+ mode = self.integrity_mode_combo.currentData()
+ int_config = self._get_integrity_config()
+
+ # 通过环境变量传递 integrity 配置(CLI 不支持这些参数)
+ env_vars = {
+ "INTEGRITY_MODE": int_config.get("integrity_mode", "history"),
+ "INTEGRITY_INCLUDE_DIMENSIONS": "1" if int_config.get("integrity_include_dimensions") else "0",
+ "INTEGRITY_AUTO_BACKFILL": "1" if int_config.get("integrity_auto_backfill") else "0",
+ }
+
+ if mode == "history":
+ env_vars["INTEGRITY_HISTORY_START"] = int_config.get("integrity_history_start")
+ env_vars["INTEGRITY_HISTORY_END"] = int_config.get("integrity_history_end")
+ desc = f"数据校验 ({int_config.get('integrity_history_start')} ~ {int_config.get('integrity_history_end')})"
+ else:
+ hours = int_config.get("lookback_hours", 24)
+ now = datetime.now()
+ start_time = now - timedelta(hours=hours)
+ env_vars["INTEGRITY_HISTORY_START"] = start_time.strftime("%Y-%m-%d")
+ env_vars["INTEGRITY_HISTORY_END"] = now.strftime("%Y-%m-%d")
+ desc = f"数据校验 (最近 {hours}h)"
+
+ if int_config.get("integrity_ods_task_codes"):
+ env_vars["INTEGRITY_ODS_TASK_CODES"] = int_config.get("integrity_ods_task_codes")
+
+ if int_config.get("integrity_auto_backfill"):
+ desc += " + 自动补全"
+
+ config = TaskConfig(
+ tasks=["DATA_INTEGRITY_CHECK"],
+ pipeline_flow="FULL", # 使用 FULL 因为需要 DB 连接
+ env_vars=env_vars,
+ )
+
+ # 更新预览
+ cmd_str = self.cli_builder.build_command_string(config)
+ self.cli_preview.setPlainText(cmd_str + f"\n\n# 环境变量:\n" + "\n".join(f"# {k}={v}" for k, v in env_vars.items()))
+
+ # 发送信号添加到队列
+ self.add_to_queue.emit(config)
+ self.log_message.emit(f"[GUI] 已添加到任务队列: {desc}")
+ QMessageBox.information(self, "提示", f"已添加到任务队列\n\n任务: {desc}\n\n请切换到「任务管理」查看和执行")
+
+ def _create_integrity_schedule(self):
+ """创建数据校验的调度任务"""
+ mode = self.integrity_mode_combo.currentData()
+ task_config = self._get_integrity_config()
+
+ if mode == "history":
+ desc = f"数据校验 ({task_config.get('integrity_history_start')} ~ {task_config.get('integrity_history_end')})"
+ else:
+ hours = task_config.get("lookback_hours", 24)
+ desc = f"数据校验 (最近 {hours}h)"
+
+ # 发送信号创建调度任务
+ self.create_schedule.emit(
+ desc,
+ ["DATA_INTEGRITY_CHECK"],
+ task_config
+ )
+ self.log_message.emit(f"[GUI] 创建调度任务: {desc}")
+
+ # ==================== 设置持久化 ====================
+
+ def _load_settings(self):
+ """从持久化存储加载设置"""
+ try:
+ # 加载自动更新设置
+ self.auto_update_hours.setValue(app_settings.auto_update_hours)
+ self.overlap_seconds.setValue(app_settings.auto_update_overlap_seconds)
+ self.include_dwd_check.setChecked(app_settings.auto_update_include_dwd)
+ self.auto_verify_check.setChecked(app_settings.auto_update_auto_verify)
+
+ # 恢复自动更新任务选择
+ saved_tasks = app_settings.auto_update_selected_tasks
+ if saved_tasks:
+ for i in range(self.auto_update_tasks_list.count()):
+ item = self.auto_update_tasks_list.item(i)
+ item.setSelected(item.text() in saved_tasks)
+
+ # 加载数据校验设置
+ mode = app_settings.integrity_mode
+ mode_index = 0 if mode == "history" else 1
+ self.integrity_mode_combo.setCurrentIndex(mode_index)
+
+ # 历史日期
+ if app_settings.integrity_history_start:
+ try:
+ start_date = QDateTime.fromString(app_settings.integrity_history_start, "yyyy-MM-dd")
+ if start_date.isValid():
+ self.integrity_start_date.setDateTime(start_date)
+ except Exception:
+ pass
+
+ if app_settings.integrity_history_end:
+ try:
+ end_date = QDateTime.fromString(app_settings.integrity_history_end, "yyyy-MM-dd")
+ if end_date.isValid():
+ self.integrity_end_date.setDateTime(end_date)
+ except Exception:
+ pass
+
+ self.integrity_hours.setValue(app_settings.integrity_lookback_hours)
+ self.include_dimensions_check.setChecked(app_settings.integrity_include_dimensions)
+ self.auto_backfill_check.setChecked(app_settings.integrity_auto_backfill)
+ self.integrity_ods_tasks.setText(app_settings.integrity_ods_tasks)
+
+ # 加载高级设置
+ pipeline_flow = app_settings.advanced_pipeline_flow
+ flow_map = {"FULL": 0, "FETCH_ONLY": 1, "INGEST_ONLY": 2}
+ self.pipeline_flow_combo.setCurrentIndex(flow_map.get(pipeline_flow, 0))
+ self.dry_run_check.setChecked(app_settings.advanced_dry_run)
+ self.window_start_edit.setText(app_settings.advanced_window_start)
+ self.window_end_edit.setText(app_settings.advanced_window_end)
+ self.ingest_source_edit.setText(app_settings.advanced_ingest_source)
+
+ # 加载窗口切分设置
+ split_map = {"none": 0, "month": 1}
+ self.window_split_combo.setCurrentIndex(split_map.get(app_settings.advanced_window_split, 0))
+ self.window_compensation_spin.setValue(app_settings.advanced_window_compensation)
+
+ # 更新 UI 状态
+ self._on_integrity_mode_changed(mode_index)
+
+ except Exception as e:
+ # 加载失败时不影响程序运行
+ print(f"加载设置失败: {e}")
+
+ def _save_auto_update_settings(self):
+ """保存自动更新设置"""
+ try:
+ app_settings.auto_update_hours = self.auto_update_hours.value()
+ app_settings.auto_update_overlap_seconds = self.overlap_seconds.value()
+ app_settings.auto_update_include_dwd = self.include_dwd_check.isChecked()
+ app_settings.auto_update_auto_verify = self.auto_verify_check.isChecked()
+
+ # 保存选中的任务
+ selected_tasks = []
+ for i in range(self.auto_update_tasks_list.count()):
+ item = self.auto_update_tasks_list.item(i)
+ if item.isSelected():
+ selected_tasks.append(item.text())
+ app_settings.auto_update_selected_tasks = selected_tasks
+ except Exception as e:
+ print(f"保存自动更新设置失败: {e}")
+
+ def _save_integrity_settings(self):
+ """保存数据校验设置"""
+ try:
+ mode = self.integrity_mode_combo.currentData()
+ app_settings.integrity_mode = mode or "history"
+ app_settings.integrity_history_start = self.integrity_start_date.dateTime().toString("yyyy-MM-dd")
+ app_settings.integrity_history_end = self.integrity_end_date.dateTime().toString("yyyy-MM-dd")
+ app_settings.integrity_lookback_hours = self.integrity_hours.value()
+ app_settings.integrity_include_dimensions = self.include_dimensions_check.isChecked()
+ app_settings.integrity_auto_backfill = self.auto_backfill_check.isChecked()
+ app_settings.integrity_ods_tasks = self.integrity_ods_tasks.text().strip()
+ except Exception as e:
+ print(f"保存数据校验设置失败: {e}")
+
+ def _save_advanced_settings(self):
+ """保存高级设置"""
+ try:
+ app_settings.advanced_pipeline_flow = self.pipeline_flow_combo.currentData() or "FULL"
+ app_settings.advanced_dry_run = self.dry_run_check.isChecked()
+ app_settings.advanced_window_start = self.window_start_edit.text().strip()
+ app_settings.advanced_window_end = self.window_end_edit.text().strip()
+ app_settings.advanced_ingest_source = self.ingest_source_edit.text().strip()
+ app_settings.advanced_window_split = self.window_split_combo.currentData() or "none"
+ app_settings.advanced_window_compensation = self.window_compensation_spin.value()
+ except Exception as e:
+ print(f"保存高级设置失败: {e}")
diff --git a/etl_billiards/gui/workers/__init__.py b/etl_billiards/gui/workers/__init__.py
new file mode 100644
index 0000000..f321e9f
--- /dev/null
+++ b/etl_billiards/gui/workers/__init__.py
@@ -0,0 +1,7 @@
+# -*- coding: utf-8 -*-
+"""后台工作线程模块"""
+
+from .task_worker import TaskWorker
+from .db_worker import DBWorker
+
+__all__ = ["TaskWorker", "DBWorker"]
diff --git a/etl_billiards/gui/workers/db_worker.py b/etl_billiards/gui/workers/db_worker.py
new file mode 100644
index 0000000..8d6476a
--- /dev/null
+++ b/etl_billiards/gui/workers/db_worker.py
@@ -0,0 +1,192 @@
+# -*- coding: utf-8 -*-
+"""数据库查询工作线程"""
+
+import sys
+from pathlib import Path
+from typing import List, Dict, Any, Optional, Tuple
+
+from PySide6.QtCore import QThread, Signal
+
+# 添加项目路径
+PROJECT_ROOT = Path(__file__).resolve().parents[2]
+if str(PROJECT_ROOT) not in sys.path:
+ sys.path.insert(0, str(PROJECT_ROOT))
+
+
+class DBWorker(QThread):
+ """数据库查询工作线程"""
+
+ # 信号
+ query_finished = Signal(list, list) # 查询完成 (columns, rows)
+ query_error = Signal(str) # 查询错误
+ connection_status = Signal(bool, str) # 连接状态 (connected, message)
+ tables_loaded = Signal(dict) # 表列表加载完成 {schema: [(table, rows, updated_at), ...]}
+
+ def __init__(self, parent=None):
+ super().__init__(parent)
+ self.conn = None
+ self._task = None
+ self._task_args = None
+
+ def connect_db(self, dsn: str):
+ """连接数据库"""
+ self._task = "connect"
+ self._task_args = (dsn,)
+ self.start()
+
+ def disconnect_db(self):
+ """断开数据库连接"""
+ self._task = "disconnect"
+ self._task_args = None
+ self.start()
+
+ def execute_query(self, sql: str, params: Optional[tuple] = None):
+ """执行查询"""
+ self._task = "query"
+ self._task_args = (sql, params)
+ self.start()
+
+ def load_tables(self, schemas: Optional[List[str]] = None):
+ """加载表列表"""
+ self._task = "load_tables"
+ self._task_args = (schemas,)
+ self.start()
+
+ def run(self):
+ """执行任务"""
+ if self._task == "connect":
+ self._do_connect(*self._task_args)
+ elif self._task == "disconnect":
+ self._do_disconnect()
+ elif self._task == "query":
+ self._do_query(*self._task_args)
+ elif self._task == "load_tables":
+ self._do_load_tables(*self._task_args)
+
+ def _do_connect(self, dsn: str):
+ """执行连接"""
+ try:
+ import psycopg2
+ from psycopg2.extras import RealDictCursor
+
+ self.conn = psycopg2.connect(dsn, connect_timeout=10)
+ self.conn.set_session(autocommit=True)
+
+ # 测试连接
+ with self.conn.cursor() as cur:
+ cur.execute("SELECT version()")
+ version = cur.fetchone()[0]
+
+ self.connection_status.emit(True, f"已连接: {version[:50]}...")
+ except ImportError:
+ self.connection_status.emit(False, "缺少 psycopg2 模块,请安装: pip install psycopg2-binary")
+ except Exception as e:
+ self.conn = None
+ self.connection_status.emit(False, f"连接失败: {e}")
+
+ def _do_disconnect(self):
+ """执行断开连接"""
+ if self.conn:
+ try:
+ self.conn.close()
+ except Exception:
+ pass
+ self.conn = None
+ self.connection_status.emit(False, "已断开连接")
+
+ def _do_query(self, sql: str, params: Optional[tuple]):
+ """执行查询"""
+ if not self.conn:
+ self.query_error.emit("未连接到数据库")
+ return
+
+ try:
+ from psycopg2.extras import RealDictCursor
+
+ with self.conn.cursor(cursor_factory=RealDictCursor) as cur:
+ cur.execute(sql, params)
+
+ # 检查是否有结果
+ if cur.description:
+ columns = [desc[0] for desc in cur.description]
+ rows = [dict(row) for row in cur.fetchall()]
+ self.query_finished.emit(columns, rows)
+ else:
+ self.query_finished.emit([], [])
+ except Exception as e:
+ self.query_error.emit(f"查询失败: {e}")
+
+ def _do_load_tables(self, schemas: Optional[List[str]]):
+ """加载表列表"""
+ if not self.conn:
+ self.query_error.emit("未连接到数据库")
+ return
+
+ try:
+ if schemas is None:
+ schemas = ["billiards_ods", "billiards_dwd", "billiards_dws", "etl_admin"]
+
+ result = {}
+
+ for schema in schemas:
+ tables = []
+
+ # 获取表列表
+ sql = """
+ SELECT
+ t.table_name,
+ COALESCE(s.n_live_tup, 0) as row_count
+ FROM information_schema.tables t
+ LEFT JOIN pg_stat_user_tables s
+ ON t.table_name = s.relname
+ AND t.table_schema = s.schemaname
+ WHERE t.table_schema = %s
+ AND t.table_type = 'BASE TABLE'
+ ORDER BY t.table_name
+ """
+
+ with self.conn.cursor() as cur:
+ cur.execute(sql, (schema,))
+ for row in cur.fetchall():
+ table_name = row[0]
+ row_count = row[1] or 0
+
+ # 尝试获取最新更新时间
+ updated_at = None
+ try:
+ # 尝试 fetched_at 字段
+ cur.execute(f'SELECT MAX(fetched_at) FROM "{schema}"."{table_name}"')
+ result_row = cur.fetchone()
+ if result_row and result_row[0]:
+ updated_at = str(result_row[0])[:19]
+ except Exception:
+ pass
+
+ if not updated_at:
+ try:
+ # 尝试 updated_at 字段
+ cur.execute(f'SELECT MAX(updated_at) FROM "{schema}"."{table_name}"')
+ result_row = cur.fetchone()
+ if result_row and result_row[0]:
+ updated_at = str(result_row[0])[:19]
+ except Exception:
+ pass
+
+ tables.append((table_name, row_count, updated_at or "-"))
+
+ result[schema] = tables
+
+ self.tables_loaded.emit(result)
+ except Exception as e:
+ self.query_error.emit(f"加载表列表失败: {e}")
+
+ def is_connected(self) -> bool:
+ """检查是否已连接"""
+ if not self.conn:
+ return False
+ try:
+ with self.conn.cursor() as cur:
+ cur.execute("SELECT 1")
+ return True
+ except Exception:
+ return False
diff --git a/etl_billiards/gui/workers/task_worker.py b/etl_billiards/gui/workers/task_worker.py
index 63a44bc..1432e06 100644
--- a/etl_billiards/gui/workers/task_worker.py
+++ b/etl_billiards/gui/workers/task_worker.py
@@ -144,24 +144,166 @@ class TaskWorker(QThread):
if not self._output_lines:
return "无输出"
- # 查找关键信息
+ return self._parse_detailed_summary()
+
+ def _parse_detailed_summary(self) -> str:
+ """解析详细的执行摘要"""
+ import re
+ import json
+
summary_parts = []
- for line in self._output_lines[-20:]: # 只看最后 20 行
- line_lower = line.lower()
- if "success" in line_lower or "完成" in line or "成功" in line:
- summary_parts.append(line)
- elif "error" in line_lower or "失败" in line or "错误" in line:
- summary_parts.append(line)
- elif "inserted" in line_lower or "updated" in line_lower:
- summary_parts.append(line)
- elif "fetched" in line_lower or "抓取" in line:
- summary_parts.append(line)
+ # 统计各类信息
+ ods_stats = [] # ODS 抓取统计
+ dwd_stats = [] # DWD 装载统计
+ integrity_stats = {} # 数据校验统计
+ errors = [] # 错误信息
+ task_results = [] # 任务结果
+
+ for line in self._output_lines:
+ # 1. 解析 ODS 抓取完成信息
+ # 格式: "xxx: 抓取完成,文件=xxx,记录数=123"
+ match = re.search(r'(\w+): 抓取完成.*记录数[=:]\s*(\d+)', line)
+ if match:
+ task_name = match.group(1)
+ record_count = int(match.group(2))
+ if record_count > 0:
+ ods_stats.append(f"{task_name}: {record_count}条")
+ continue
+
+ # 2. 解析 DWD 装载完成信息
+ # 格式: "DWD 装载完成:xxx,用时 1.02s"
+ match = re.search(r'DWD 装载完成[::]\s*(\S+).*用时\s*([\d.]+)s', line)
+ if match:
+ table_name = match.group(1).replace('billiards_dwd.', '')
+ continue
+
+ # 3. 解析任务完成统计 (JSON格式)
+ # 格式: "xxx: 完成,统计={'tables': [...]}"
+ if "完成,统计=" in line or "完成,统计=" in line:
+ try:
+ match = re.search(r"统计=(\{.+\})", line)
+ if match:
+ stats_str = match.group(1).replace("'", '"')
+ stats = json.loads(stats_str)
+
+ # 解析 DWD 装载统计
+ if 'tables' in stats:
+ total_processed = 0
+ total_inserted = 0
+ tables_with_data = []
+
+ for tbl in stats['tables']:
+ table_name = tbl.get('table', '').replace('billiards_dwd.', '')
+ processed = tbl.get('processed', 0)
+ inserted = tbl.get('inserted', 0)
+
+ if processed > 0:
+ total_processed += processed
+ tables_with_data.append(f"{table_name}({processed})")
+ elif inserted > 0:
+ total_inserted += inserted
+ tables_with_data.append(f"{table_name}(+{inserted})")
+
+ if total_processed > 0 or total_inserted > 0:
+ dwd_stats.append(f"处理维度: {total_processed}条, 新增事实: {total_inserted}条")
+ if len(tables_with_data) <= 5:
+ dwd_stats.append(f"涉及表: {', '.join(tables_with_data)}")
+ else:
+ dwd_stats.append(f"涉及 {len(tables_with_data)} 张表")
+ except Exception:
+ pass
+ continue
+
+ # 4. 解析数据校验结果
+ # 格式: "CHECK_DONE task=xxx missing=1 records=136 errors=0"
+ match = re.search(r'CHECK_DONE task=(\w+) missing=(\d+) records=(\d+)', line)
+ if match:
+ task_name = match.group(1)
+ missing = int(match.group(2))
+ records = int(match.group(3))
+ if missing > 0:
+ if 'missing_tasks' not in integrity_stats:
+ integrity_stats['missing_tasks'] = []
+ integrity_stats['missing_tasks'].append(f"{task_name}: 缺失{missing}/{records}")
+ integrity_stats['total_records'] = integrity_stats.get('total_records', 0) + records
+ integrity_stats['total_missing'] = integrity_stats.get('total_missing', 0) + missing
+ continue
+
+ # 5. 解析数据校验最终结果
+ # 格式: "结果统计: {'missing': 463, 'errors': 0, 'backfilled': 0}"
+ if "结果统计:" in line or "结果统计:" in line:
+ try:
+ match = re.search(r"\{.+\}", line)
+ if match:
+ stats_str = match.group(0).replace("'", '"')
+ stats = json.loads(stats_str)
+ integrity_stats['final_missing'] = stats.get('missing', 0)
+ integrity_stats['final_errors'] = stats.get('errors', 0)
+ integrity_stats['backfilled'] = stats.get('backfilled', 0)
+ except Exception:
+ pass
+ continue
+
+ # 6. 解析错误信息
+ if "[ERROR]" in line or "错误" in line.lower() or "error" in line.lower():
+ if "Traceback" not in line and "File " not in line:
+ errors.append(line.strip()[:100])
+
+ # 7. 解析任务完成信息
+ if "任务执行成功" in line or "ETL运行完成" in line:
+ task_results.append("✓ " + line.split("]")[-1].strip() if "]" in line else line.strip())
+ elif "任务执行失败" in line:
+ task_results.append("✗ " + line.split("]")[-1].strip() if "]" in line else line.strip())
+
+ # 构建摘要
+ if ods_stats:
+ summary_parts.append("【ODS 抓取】" + ", ".join(ods_stats[:5]))
+ if len(ods_stats) > 5:
+ summary_parts[-1] += f" 等{len(ods_stats)}项"
+
+ if dwd_stats:
+ summary_parts.append("【DWD 装载】" + "; ".join(dwd_stats))
+
+ if integrity_stats:
+ total_missing = integrity_stats.get('final_missing', integrity_stats.get('total_missing', 0))
+ total_records = integrity_stats.get('total_records', 0)
+ backfilled = integrity_stats.get('backfilled', 0)
+
+ int_summary = f"【数据校验】检查 {total_records} 条记录"
+ if total_missing > 0:
+ int_summary += f", 发现 {total_missing} 条缺失"
+ if backfilled > 0:
+ int_summary += f", 已补全 {backfilled} 条"
+ else:
+ int_summary += ", 数据完整"
+ summary_parts.append(int_summary)
+
+ # 显示缺失详情
+ if integrity_stats.get('missing_tasks'):
+ missing_detail = integrity_stats['missing_tasks'][:3]
+ summary_parts.append(" 缺失: " + "; ".join(missing_detail))
+ if len(integrity_stats['missing_tasks']) > 3:
+ summary_parts[-1] += f" 等{len(integrity_stats['missing_tasks'])}项"
+
+ if errors:
+ summary_parts.append("【错误】" + "; ".join(errors[:3]))
+
+ if task_results:
+ summary_parts.append("【结果】" + " | ".join(task_results))
if summary_parts:
- return "\n".join(summary_parts[-5:]) # 最多返回 5 行
+ return "\n".join(summary_parts)
+
+ # 如果没有解析到任何信息,返回最后几行关键信息
+ key_lines = []
+ for line in self._output_lines[-10:]:
+ if "完成" in line or "成功" in line or "失败" in line:
+ key_lines.append(line.strip()[:80])
+
+ if key_lines:
+ return "\n".join(key_lines[-3:])
- # 如果没有找到关键信息,返回最后一行
return self._output_lines[-1] if self._output_lines else "执行完成"
@property
diff --git a/etl_billiards/orchestration/task_registry.py b/etl_billiards/orchestration/task_registry.py
index 251127e..c30c3cc 100644
--- a/etl_billiards/orchestration/task_registry.py
+++ b/etl_billiards/orchestration/task_registry.py
@@ -27,6 +27,7 @@ from tasks.ods_json_archive_task import OdsJsonArchiveTask
from tasks.check_cutoff_task import CheckCutoffTask
from tasks.init_dws_schema_task import InitDwsSchemaTask
from tasks.dws_build_order_summary_task import DwsBuildOrderSummaryTask
+from tasks.data_integrity_task import DataIntegrityTask
class TaskRegistry:
"""任务注册和工厂"""
@@ -78,6 +79,7 @@ default_registry.register("DWD_LOAD_FROM_ODS", DwdLoadTask)
default_registry.register("DWD_QUALITY_CHECK", DwdQualityTask)
default_registry.register("ODS_JSON_ARCHIVE", OdsJsonArchiveTask)
default_registry.register("CHECK_CUTOFF", CheckCutoffTask)
+default_registry.register("DATA_INTEGRITY_CHECK", DataIntegrityTask)
default_registry.register("INIT_DWS_SCHEMA", InitDwsSchemaTask)
default_registry.register("DWS_BUILD_ORDER_SUMMARY", DwsBuildOrderSummaryTask)
for code, task_cls in ODS_TASK_CLASSES.items():
diff --git a/etl_billiards/pytest.ini b/etl_billiards/pytest.ini
new file mode 100644
index 0000000..a635c5c
--- /dev/null
+++ b/etl_billiards/pytest.ini
@@ -0,0 +1,2 @@
+[pytest]
+pythonpath = .
diff --git a/etl_billiards/quality/integrity_checker.py b/etl_billiards/quality/integrity_checker.py
new file mode 100644
index 0000000..bd859bf
--- /dev/null
+++ b/etl_billiards/quality/integrity_checker.py
@@ -0,0 +1,390 @@
+# -*- coding: utf-8 -*-
+"""Integrity checks across API -> ODS -> DWD."""
+from __future__ import annotations
+
+from dataclasses import dataclass
+from datetime import date, datetime, time, timedelta
+from pathlib import Path
+from typing import Any, Dict, Iterable, List, Tuple
+from zoneinfo import ZoneInfo
+
+import json
+
+from config.settings import AppConfig
+from database.connection import DatabaseConnection
+from tasks.dwd_load_task import DwdLoadTask
+from scripts.check_ods_gaps import run_gap_check
+
+AMOUNT_KEYWORDS = ("amount", "money", "fee", "balance")
+
+
+@dataclass(frozen=True)
+class IntegrityWindow:
+ start: datetime
+ end: datetime
+ label: str
+ granularity: str
+
+
+def _ensure_tz(dt: datetime, tz: ZoneInfo) -> datetime:
+ if dt.tzinfo is None:
+ return dt.replace(tzinfo=tz)
+ return dt.astimezone(tz)
+
+
+def _month_start(day: date) -> date:
+ return date(day.year, day.month, 1)
+
+
+def _next_month(day: date) -> date:
+ if day.month == 12:
+ return date(day.year + 1, 1, 1)
+ return date(day.year, day.month + 1, 1)
+
+
+def _date_to_start(dt: date, tz: ZoneInfo) -> datetime:
+ return datetime.combine(dt, time.min).replace(tzinfo=tz)
+
+
+def _date_to_end_exclusive(dt: date, tz: ZoneInfo) -> datetime:
+ return datetime.combine(dt, time.min).replace(tzinfo=tz) + timedelta(days=1)
+
+
+def build_history_windows(start_dt: datetime, end_dt: datetime, tz: ZoneInfo) -> List[IntegrityWindow]:
+ """Build weekly windows for current month, monthly windows for earlier months."""
+ start_dt = _ensure_tz(start_dt, tz)
+ end_dt = _ensure_tz(end_dt, tz)
+ if end_dt <= start_dt:
+ return []
+
+ start_date = start_dt.date()
+ end_date = end_dt.date()
+ current_month_start = _month_start(end_date)
+
+ windows: List[IntegrityWindow] = []
+ cur = start_date
+ while cur <= end_date:
+ month_start = _month_start(cur)
+ month_end_exclusive = _next_month(cur)
+ range_start = max(cur, month_start)
+ range_end = min(end_date, month_end_exclusive - timedelta(days=1))
+
+ if month_start == current_month_start:
+ week_start = range_start
+ while week_start <= range_end:
+ week_end = min(week_start + timedelta(days=6), range_end)
+ w_start_dt = _date_to_start(week_start, tz)
+ w_end_dt = _date_to_end_exclusive(week_end, tz)
+ if w_start_dt < end_dt and w_end_dt > start_dt:
+ windows.append(
+ IntegrityWindow(
+ start=max(w_start_dt, start_dt),
+ end=min(w_end_dt, end_dt),
+ label=f"week_{week_start.isoformat()}",
+ granularity="week",
+ )
+ )
+ week_start = week_end + timedelta(days=1)
+ else:
+ m_start_dt = _date_to_start(range_start, tz)
+ m_end_dt = _date_to_end_exclusive(range_end, tz)
+ if m_start_dt < end_dt and m_end_dt > start_dt:
+ windows.append(
+ IntegrityWindow(
+ start=max(m_start_dt, start_dt),
+ end=min(m_end_dt, end_dt),
+ label=f"month_{month_start.isoformat()}",
+ granularity="month",
+ )
+ )
+ cur = month_end_exclusive
+
+ return windows
+
+
+def _split_table(name: str, default_schema: str) -> Tuple[str, str]:
+ if "." in name:
+ schema, table = name.split(".", 1)
+ return schema, table
+ return default_schema, name
+
+
+def _pick_time_column(dwd_cols: Iterable[str], ods_cols: Iterable[str]) -> str | None:
+ lower_cols = {c.lower() for c in dwd_cols} & {c.lower() for c in ods_cols}
+ for candidate in DwdLoadTask.FACT_ORDER_CANDIDATES:
+ if candidate.lower() in lower_cols:
+ return candidate.lower()
+ return None
+
+
+def _fetch_columns(cur, schema: str, table: str) -> Tuple[List[str], Dict[str, str]]:
+ cur.execute(
+ """
+ SELECT column_name, data_type
+ FROM information_schema.columns
+ WHERE table_schema = %s AND table_name = %s
+ ORDER BY ordinal_position
+ """,
+ (schema, table),
+ )
+ cols = []
+ types: Dict[str, str] = {}
+ for name, data_type in cur.fetchall():
+ cols.append(name)
+ types[name.lower()] = (data_type or "").lower()
+ return cols, types
+
+
+def _amount_columns(cols: List[str], types: Dict[str, str]) -> List[str]:
+ numeric_types = {"numeric", "double precision", "integer", "bigint", "smallint", "real", "decimal"}
+ out = []
+ for col in cols:
+ lc = col.lower()
+ if types.get(lc) not in numeric_types:
+ continue
+ if any(key in lc for key in AMOUNT_KEYWORDS):
+ out.append(lc)
+ return out
+
+
+def _count_table(cur, schema: str, table: str, time_col: str | None, window: IntegrityWindow | None) -> int:
+ where = ""
+ params: List[Any] = []
+ if time_col and window:
+ where = f'WHERE "{time_col}" >= %s AND "{time_col}" < %s'
+ params = [window.start, window.end]
+ sql = f'SELECT COUNT(1) FROM "{schema}"."{table}" {where}'
+ cur.execute(sql, params)
+ row = cur.fetchone()
+ return int(row[0] if row else 0)
+
+
+def _sum_column(cur, schema: str, table: str, col: str, time_col: str | None, window: IntegrityWindow | None) -> float:
+ where = ""
+ params: List[Any] = []
+ if time_col and window:
+ where = f'WHERE "{time_col}" >= %s AND "{time_col}" < %s'
+ params = [window.start, window.end]
+ sql = f'SELECT COALESCE(SUM("{col}"), 0) FROM "{schema}"."{table}" {where}'
+ cur.execute(sql, params)
+ row = cur.fetchone()
+ return float(row[0] if row else 0)
+
+
+def run_dwd_vs_ods_check(
+ *,
+ cfg: AppConfig,
+ window: IntegrityWindow | None,
+ include_dimensions: bool,
+) -> Dict[str, Any]:
+ dsn = cfg["db"]["dsn"]
+ session = cfg["db"].get("session")
+ db_conn = DatabaseConnection(dsn=dsn, session=session)
+ try:
+ with db_conn.conn.cursor() as cur:
+ results: List[Dict[str, Any]] = []
+ table_map = DwdLoadTask.TABLE_MAP
+ for dwd_table, ods_table in table_map.items():
+ if not include_dimensions and ".dim_" in dwd_table:
+ continue
+ schema_dwd, name_dwd = _split_table(dwd_table, "billiards_dwd")
+ schema_ods, name_ods = _split_table(ods_table, "billiards_ods")
+ try:
+ dwd_cols, dwd_types = _fetch_columns(cur, schema_dwd, name_dwd)
+ ods_cols, ods_types = _fetch_columns(cur, schema_ods, name_ods)
+ time_col = _pick_time_column(dwd_cols, ods_cols)
+ count_dwd = _count_table(cur, schema_dwd, name_dwd, time_col, window)
+ count_ods = _count_table(cur, schema_ods, name_ods, time_col, window)
+
+ dwd_amount_cols = _amount_columns(dwd_cols, dwd_types)
+ ods_amount_cols = _amount_columns(ods_cols, ods_types)
+ common_amount_cols = sorted(set(dwd_amount_cols) & set(ods_amount_cols))
+ amounts: List[Dict[str, Any]] = []
+ for col in common_amount_cols:
+ dwd_sum = _sum_column(cur, schema_dwd, name_dwd, col, time_col, window)
+ ods_sum = _sum_column(cur, schema_ods, name_ods, col, time_col, window)
+ amounts.append(
+ {
+ "column": col,
+ "dwd_sum": dwd_sum,
+ "ods_sum": ods_sum,
+ "diff": dwd_sum - ods_sum,
+ }
+ )
+
+ results.append(
+ {
+ "dwd_table": dwd_table,
+ "ods_table": ods_table,
+ "windowed": bool(time_col and window),
+ "window_col": time_col,
+ "count": {"dwd": count_dwd, "ods": count_ods, "diff": count_dwd - count_ods},
+ "amounts": amounts,
+ }
+ )
+ except Exception as exc: # noqa: BLE001
+ results.append(
+ {
+ "dwd_table": dwd_table,
+ "ods_table": ods_table,
+ "windowed": bool(window),
+ "window_col": None,
+ "count": {"dwd": None, "ods": None, "diff": None},
+ "amounts": [],
+ "error": f"{type(exc).__name__}: {exc}",
+ }
+ )
+
+ total_count_diff = sum(
+ int(item.get("count", {}).get("diff") or 0)
+ for item in results
+ if isinstance(item.get("count", {}).get("diff"), (int, float))
+ )
+ return {
+ "tables": results,
+ "total_count_diff": total_count_diff,
+ }
+ finally:
+ db_conn.close()
+
+
+def _default_report_path(prefix: str) -> Path:
+ root = Path(__file__).resolve().parents[1]
+ stamp = datetime.now().strftime("%Y%m%d_%H%M%S")
+ return root / "reports" / f"{prefix}_{stamp}.json"
+
+
+def run_integrity_window(
+ *,
+ cfg: AppConfig,
+ window: IntegrityWindow,
+ include_dimensions: bool,
+ task_codes: str,
+ logger,
+ write_report: bool,
+ report_path: Path | None = None,
+ window_split_unit: str | None = None,
+ window_compensation_hours: int | None = None,
+) -> Dict[str, Any]:
+ total_seconds = max(0, int((window.end - window.start).total_seconds()))
+ if total_seconds >= 86400:
+ window_days = max(1, total_seconds // 86400)
+ window_hours = 0
+ else:
+ window_days = 0
+ window_hours = max(1, total_seconds // 3600 or 1)
+
+ ods_payload = run_gap_check(
+ cfg=cfg,
+ start=window.start,
+ end=window.end,
+ window_days=window_days,
+ window_hours=window_hours,
+ page_size=int(cfg.get("api.page_size") or 200),
+ chunk_size=500,
+ sample_limit=50,
+ sleep_per_window=0,
+ sleep_per_page=0,
+ task_codes=task_codes,
+ from_cutoff=False,
+ cutoff_overlap_hours=24,
+ allow_small_window=True,
+ logger=logger,
+ window_split_unit=window_split_unit,
+ window_compensation_hours=window_compensation_hours,
+ )
+
+ dwd_payload = run_dwd_vs_ods_check(
+ cfg=cfg,
+ window=window,
+ include_dimensions=include_dimensions,
+ )
+
+ report = {
+ "mode": "window",
+ "window": {
+ "start": window.start.isoformat(),
+ "end": window.end.isoformat(),
+ "label": window.label,
+ "granularity": window.granularity,
+ },
+ "api_to_ods": ods_payload,
+ "ods_to_dwd": dwd_payload,
+ "generated_at": datetime.now(ZoneInfo(cfg.get("app.timezone", "Asia/Taipei"))).isoformat(),
+ }
+
+ if write_report:
+ path = report_path or _default_report_path("data_integrity_window")
+ path.parent.mkdir(parents=True, exist_ok=True)
+ path.write_text(json.dumps(report, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
+ report["report_path"] = str(path)
+
+ return report
+
+
+def run_integrity_history(
+ *,
+ cfg: AppConfig,
+ start_dt: datetime,
+ end_dt: datetime,
+ include_dimensions: bool,
+ task_codes: str,
+ logger,
+ write_report: bool,
+ report_path: Path | None = None,
+) -> Dict[str, Any]:
+ tz = ZoneInfo(cfg.get("app.timezone", "Asia/Taipei"))
+ windows = build_history_windows(start_dt, end_dt, tz)
+ results: List[Dict[str, Any]] = []
+ total_missing = 0
+ total_errors = 0
+
+ for window in windows:
+ logger.info("校验窗口 起始=%s 结束=%s", window.start, window.end)
+ payload = run_integrity_window(
+ cfg=cfg,
+ window=window,
+ include_dimensions=include_dimensions,
+ task_codes=task_codes,
+ logger=logger,
+ write_report=False,
+ )
+ results.append(payload)
+ total_missing += int(payload.get("api_to_ods", {}).get("total_missing") or 0)
+ total_errors += int(payload.get("api_to_ods", {}).get("total_errors") or 0)
+
+ report = {
+ "mode": "history",
+ "start": _ensure_tz(start_dt, tz).isoformat(),
+ "end": _ensure_tz(end_dt, tz).isoformat(),
+ "windows": results,
+ "total_missing": total_missing,
+ "total_errors": total_errors,
+ "generated_at": datetime.now(tz).isoformat(),
+ }
+
+ if write_report:
+ path = report_path or _default_report_path("data_integrity_history")
+ path.parent.mkdir(parents=True, exist_ok=True)
+ path.write_text(json.dumps(report, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
+ report["report_path"] = str(path)
+
+ return report
+
+
+def compute_last_etl_end(cfg: AppConfig) -> datetime | None:
+ dsn = cfg["db"]["dsn"]
+ session = cfg["db"].get("session")
+ db_conn = DatabaseConnection(dsn=dsn, session=session)
+ try:
+ rows = db_conn.query(
+ "SELECT MAX(window_end) AS mx FROM etl_admin.etl_run WHERE store_id = %s",
+ (cfg.get("app.store_id"),),
+ )
+ mx = rows[0]["mx"] if rows else None
+ if isinstance(mx, datetime):
+ tz = ZoneInfo(cfg.get("app.timezone", "Asia/Taipei"))
+ return _ensure_tz(mx, tz)
+ finally:
+ db_conn.close()
+ return None
diff --git a/etl_billiards/reports/data_integrity_history_20260119_045009.json b/etl_billiards/reports/data_integrity_history_20260119_045009.json
new file mode 100644
index 0000000..2256e1e
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_history_20260119_045009.json
@@ -0,0 +1,19596 @@
+{
+ "mode": "history",
+ "start": "2025-07-19T00:00:00+08:00",
+ "end": "2026-01-19T00:00:00+08:00",
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-07-19T00:00:00+08:00",
+ "end": "2025-08-01T00:00:00+08:00",
+ "label": "month_2025-07-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-07-19T00:00:00+08:00",
+ "end": "2025-08-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 13,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1772,
+ "records_with_pk": 1772,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 351,
+ "records_with_pk": 351,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11944,
+ "records_with_pk": 11944,
+ "missing": 440,
+ "missing_samples": [
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ },
+ {
+ "id": 3056884233275077
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2465,
+ "records_with_pk": 2465,
+ "missing": 81,
+ "missing_samples": [
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ },
+ {
+ "id": 3054273873972613
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 44,
+ "records_with_pk": 44,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 2489,
+ "records_with_pk": 2489,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 1841,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 10,
+ "skipped_missing_pk": 1841,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1594,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T04:29:02.969408+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1246,
+ "diff": -1246
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 465,
+ "ods": 465,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 747,
+ "ods": 747,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 8,
+ "ods": 8,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 14,
+ "ods": 14,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1246,
+ "ods": 1246,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 18607.65,
+ "ods_sum": 18607.65,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 68759.8,
+ "ods_sum": 68759.8,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 133842.45,
+ "ods_sum": 133842.45,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 10234.83,
+ "ods_sum": 10234.83,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 46883.63,
+ "ods_sum": 46883.63,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1575,
+ "ods": 1575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 14.25,
+ "ods_sum": 14.25,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 31186.8,
+ "ods_sum": 31186.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 29160.8,
+ "ods_sum": 29160.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 351,
+ "ods": 351,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1261.59,
+ "ods_sum": 1261.59,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 113232.99,
+ "ods_sum": 113232.99,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1007,
+ "ods": 1007,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 72348.0,
+ "ods_sum": 72348.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1833,
+ "ods": 1833,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 178060.0,
+ "ods_sum": 178060.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 465696
+ },
+ "generated_at": "2026-01-19T04:29:10.599938+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-08-01T00:00:00+08:00",
+ "end": "2025-09-01T00:00:00+08:00",
+ "label": "month_2025-08-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-08-01T00:00:00+08:00",
+ "end": "2025-09-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4602,
+ "records_with_pk": 4602,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 24,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 859,
+ "records_with_pk": 859,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11944,
+ "records_with_pk": 11944,
+ "missing": 440,
+ "missing_samples": [
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ },
+ {
+ "id": 3056884233275077
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2465,
+ "records_with_pk": 2465,
+ "missing": 81,
+ "missing_samples": [
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ },
+ {
+ "id": 3054273873972613
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 94,
+ "records_with_pk": 94,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5196,
+ "records_with_pk": 5196,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 26,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4763,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 24,
+ "skipped_missing_pk": 4763,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1594,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T04:32:03.295726+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3587,
+ "diff": -3587
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 18,
+ "ods": 18,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 51,
+ "ods": 51,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3587,
+ "ods": 3587,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 54919.33,
+ "ods_sum": 54919.33,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 186359.95,
+ "ods_sum": 186359.95,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 383097.96,
+ "ods_sum": 383097.96,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 44840.88,
+ "ods_sum": 44840.88,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 145513.13,
+ "ods_sum": 145513.13,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4305,
+ "ods": 4305,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 47.45,
+ "ods_sum": 47.45,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 87523.4,
+ "ods_sum": 87523.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 83759.0,
+ "ods_sum": 83759.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 859,
+ "ods": 859,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1874.75,
+ "ods_sum": 1874.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 268501.57,
+ "ods_sum": 268501.57,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2850,
+ "ods": 2850,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 189960.0,
+ "ods_sum": 189960.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4763,
+ "ods": 4763,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 381598.0,
+ "ods_sum": 381598.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 463355
+ },
+ "generated_at": "2026-01-19T04:32:10.696434+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-09-01T00:00:00+08:00",
+ "end": "2025-10-01T00:00:00+08:00",
+ "label": "month_2025-09-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-09-01T00:00:00+08:00",
+ "end": "2025-10-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3720,
+ "records_with_pk": 3720,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 19,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 654,
+ "records_with_pk": 654,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11944,
+ "records_with_pk": 11944,
+ "missing": 440,
+ "missing_samples": [
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ },
+ {
+ "id": 3056884233275077
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2465,
+ "records_with_pk": 2465,
+ "missing": 81,
+ "missing_samples": [
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ },
+ {
+ "id": 3054273873972613
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 54,
+ "records_with_pk": 54,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 4816,
+ "records_with_pk": 4816,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 25,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 3810,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 20,
+ "skipped_missing_pk": 3810,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1594,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T04:34:51.620870+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1264,
+ "diff": -1264
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 11,
+ "ods": 11,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1264,
+ "ods": 1264,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 11020.51,
+ "ods_sum": 11020.51,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 73893.75,
+ "ods_sum": 73893.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 137203.92,
+ "ods_sum": 137203.92,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 15685.02,
+ "ods_sum": 15685.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 52340.33,
+ "ods_sum": 52340.33,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1449,
+ "ods": 1449,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1.41,
+ "ods_sum": 1.41,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 24706.9,
+ "ods_sum": 24706.9,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 23874.4,
+ "ods_sum": 23874.4,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 240,
+ "ods": 654,
+ "diff": -414
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 391.51,
+ "ods_sum": 781.44,
+ "diff": -389.93000000000006
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 69566.69,
+ "ods_sum": 192541.75,
+ "diff": -122975.06
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1173,
+ "ods": 1173,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 75824.0,
+ "ods_sum": 75824.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 73843.08,
+ "ods_sum": 73843.08,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 184722.0,
+ "ods_sum": 184722.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1544,
+ "ods": 1544,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 108880.0,
+ "ods_sum": 108880.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -1011.0,
+ "ods_sum": -1011.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 465264
+ },
+ "generated_at": "2026-01-19T04:34:59.669448+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-10-01T00:00:00+08:00",
+ "end": "2025-11-01T00:00:00+08:00",
+ "label": "month_2025-10-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-10-01T00:00:00+08:00",
+ "end": "2025-11-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1609,
+ "records_with_pk": 1609,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 283,
+ "records_with_pk": 283,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 7,
+ "records_with_pk": 7,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11944,
+ "records_with_pk": 11944,
+ "missing": 440,
+ "missing_samples": [
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ },
+ {
+ "id": 3056884233275077
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2465,
+ "records_with_pk": 2465,
+ "missing": 81,
+ "missing_samples": [
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ },
+ {
+ "id": 3054273873972613
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 23,
+ "records_with_pk": 23,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 2158,
+ "records_with_pk": 2158,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 11,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 1638,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 1638,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1594,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T04:37:23.852552+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2824,
+ "diff": -2824
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 21,
+ "ods": 21,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2824,
+ "ods": 2824,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 40394.85,
+ "ods_sum": 40394.85,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 310789.49,
+ "ods_sum": 310789.49,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33315.15,
+ "ods_sum": 33315.15,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 116393.37,
+ "ods_sum": 116393.37,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3475,
+ "ods": 3475,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1319.49,
+ "ods_sum": 1319.49,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 66216.8,
+ "ods_sum": 66216.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 64234.0,
+ "ods_sum": 64234.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 573,
+ "ods": 573,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 2143.56,
+ "ods_sum": 2143.56,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 172536.78,
+ "ods_sum": 172536.78,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2490,
+ "ods": 2490,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160988.0,
+ "ods_sum": 160988.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2489,
+ "ods": 2489,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160076.0,
+ "ods_sum": 160076.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3616,
+ "ods": 3616,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 286088.0,
+ "ods_sum": 286088.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -47020.0,
+ "ods_sum": -47020.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 464118
+ },
+ "generated_at": "2026-01-19T04:37:31.841246+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-11-01T00:00:00+08:00",
+ "end": "2025-12-01T00:00:00+08:00",
+ "label": "month_2025-11-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-11-01T00:00:00+08:00",
+ "end": "2025-12-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3874,
+ "records_with_pk": 3874,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 20,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 884,
+ "records_with_pk": 884,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 12,
+ "records_with_pk": 12,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11944,
+ "records_with_pk": 11944,
+ "missing": 440,
+ "missing_samples": [
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ },
+ {
+ "id": 3056884233275077
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2465,
+ "records_with_pk": 2465,
+ "missing": 81,
+ "missing_samples": [
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ },
+ {
+ "id": 3054273873972613
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 80,
+ "records_with_pk": 80,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5516,
+ "records_with_pk": 5516,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 28,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 3999,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 20,
+ "skipped_missing_pk": 3999,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1594,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T04:40:12.032887+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3336,
+ "diff": -3336
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 12,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 40,
+ "ods": 40,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 80,
+ "ods": 80,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3336,
+ "ods": 3336,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71642.8,
+ "ods_sum": 71642.8,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 394705.62,
+ "ods_sum": 394705.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33307.25,
+ "ods_sum": 33307.25,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 156623.79,
+ "ods_sum": 156623.79,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4134,
+ "ods": 4134,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1544.05,
+ "ods_sum": 1544.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 98139.8,
+ "ods_sum": 98139.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 87610.8,
+ "ods_sum": 87610.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 884,
+ "ods": 884,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1437.75,
+ "ods_sum": 1437.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 281102.62,
+ "ods_sum": 281102.62,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2838,
+ "ods": 2838,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 172860.0,
+ "ods_sum": 172860.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2843,
+ "ods": 2843,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 173800.0,
+ "ods_sum": 173800.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3999,
+ "ods": 3999,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 457185.0,
+ "ods_sum": 457185.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 17,
+ "ods": 17,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -16567.0,
+ "ods_sum": -16567.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 463606
+ },
+ "generated_at": "2026-01-19T04:40:19.507626+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-12-01T00:00:00+08:00",
+ "end": "2026-01-01T00:00:00+08:00",
+ "label": "month_2025-12-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-12-01T00:00:00+08:00",
+ "end": "2026-01-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4011,
+ "records_with_pk": 4011,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 21,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 975,
+ "records_with_pk": 975,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 35,
+ "records_with_pk": 35,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11944,
+ "records_with_pk": 11944,
+ "missing": 440,
+ "missing_samples": [
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ },
+ {
+ "id": 3056884233275077
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2465,
+ "records_with_pk": 2465,
+ "missing": 81,
+ "missing_samples": [
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ },
+ {
+ "id": 3054273873972613
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 70,
+ "records_with_pk": 70,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5464,
+ "records_with_pk": 5464,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 28,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4118,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 21,
+ "skipped_missing_pk": 4118,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1594,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T04:43:02.464682+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3479,
+ "diff": -3479
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 12,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3479,
+ "ods": 3479,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71445.57,
+ "ods_sum": 71445.57,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 432220.76,
+ "ods_sum": 432220.76,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 34544.63,
+ "ods_sum": 34544.63,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 189974.44,
+ "ods_sum": 189974.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2625,
+ "ods": 2625,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 190.1,
+ "ods_sum": 190.1,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 65814.4,
+ "ods_sum": 65814.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 63275.9,
+ "ods_sum": 63275.9,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 975,
+ "ods": 975,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 3190.05,
+ "ods_sum": 3190.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 322183.69,
+ "ods_sum": 322183.69,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2816,
+ "ods": 2816,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 179652.0,
+ "ods_sum": 179652.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2827,
+ "ods": 2827,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 180232.0,
+ "ods_sum": 180232.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4118,
+ "ods": 4118,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 472999.0,
+ "ods_sum": 472999.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -4314.0,
+ "ods_sum": -4314.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 463463
+ },
+ "generated_at": "2026-01-19T04:43:09.833622+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-01T00:00:00+08:00",
+ "end": "2026-01-08T00:00:00+08:00",
+ "label": "week_2026-01-01",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "start": "2026-01-01T00:00:00+08:00",
+ "end": "2026-01-08T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 800,
+ "records_with_pk": 800,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 157,
+ "records_with_pk": 157,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2,
+ "records_with_pk": 2,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11944,
+ "records_with_pk": 11944,
+ "missing": 440,
+ "missing_samples": [
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ },
+ {
+ "id": 3056884233275077
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2465,
+ "records_with_pk": 2465,
+ "missing": 81,
+ "missing_samples": [
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ },
+ {
+ "id": 3054273873972613
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17,
+ "records_with_pk": 17,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 867,
+ "records_with_pk": 867,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 823,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 823,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1594,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T04:45:21.982028+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 699,
+ "diff": -699
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 699,
+ "ods": 699,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 8896.03,
+ "ods_sum": 8896.03,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 74693.62,
+ "ods_sum": 74693.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6587.39,
+ "ods_sum": 6587.39,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30138.48,
+ "ods_sum": 30138.48,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 157,
+ "ods": 157,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 46522.68,
+ "ods_sum": 46522.68,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 569,
+ "ods": 569,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37392.0,
+ "ods_sum": 37392.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 566,
+ "ods": 566,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37228.0,
+ "ods_sum": 37228.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 823,
+ "ods": 823,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 78730.0,
+ "ods_sum": 78730.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -7.0,
+ "ods_sum": -7.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466243
+ },
+ "generated_at": "2026-01-19T04:45:29.561000+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-08T00:00:00+08:00",
+ "end": "2026-01-15T00:00:00+08:00",
+ "label": "week_2026-01-08",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "start": "2026-01-08T00:00:00+08:00",
+ "end": "2026-01-15T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 767,
+ "records_with_pk": 767,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 188,
+ "records_with_pk": 188,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 22,
+ "records_with_pk": 22,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11944,
+ "records_with_pk": 11944,
+ "missing": 440,
+ "missing_samples": [
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ },
+ {
+ "id": 3056884233275077
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2465,
+ "records_with_pk": 2465,
+ "missing": 81,
+ "missing_samples": [
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ },
+ {
+ "id": 3054273873972613
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 15,
+ "records_with_pk": 15,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1198,
+ "records_with_pk": 1198,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 790,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 790,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1594,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T04:47:42.751654+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 672,
+ "diff": -672
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 672,
+ "ods": 672,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 16159.12,
+ "ods_sum": 16159.12,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 82416.19,
+ "ods_sum": 82416.19,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6098.02,
+ "ods_sum": 6098.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30731.98,
+ "ods_sum": 30731.98,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 188,
+ "ods": 188,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 190.72,
+ "ods_sum": 190.72,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 54584.19,
+ "ods_sum": 54584.19,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 572,
+ "ods": 572,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37214.0,
+ "ods_sum": 37214.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 575,
+ "ods": 575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37262.0,
+ "ods_sum": 37262.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 790,
+ "ods": 790,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 86381.0,
+ "ods_sum": 86381.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -39.0,
+ "ods_sum": -39.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466270
+ },
+ "generated_at": "2026-01-19T04:47:50.279193+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-15T00:00:00+08:00",
+ "end": "2026-01-19T00:00:00+08:00",
+ "label": "week_2026-01-15",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "start": "2026-01-15T00:00:00+08:00",
+ "end": "2026-01-19T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 4,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 531,
+ "records_with_pk": 531,
+ "missing": 403,
+ "missing_samples": [
+ {
+ "id": 3057020019230533
+ },
+ {
+ "id": 3057014990243589
+ },
+ {
+ "id": 3057013753005957
+ },
+ {
+ "id": 3057008518383429
+ },
+ {
+ "id": 3056995682600645
+ },
+ {
+ "id": 3056981741766533
+ },
+ {
+ "id": 3056979342640901
+ },
+ {
+ "id": 3056959684708101
+ },
+ {
+ "id": 3056956357510981
+ },
+ {
+ "id": 3056954936903557
+ },
+ {
+ "id": 3056953857476357
+ },
+ {
+ "id": 3056943938029253
+ },
+ {
+ "id": 3056938804184901
+ },
+ {
+ "id": 3056932651288325
+ },
+ {
+ "id": 3056931799222149
+ },
+ {
+ "id": 3056919515154117
+ },
+ {
+ "id": 3056914445453125
+ },
+ {
+ "id": 3056914261952325
+ },
+ {
+ "id": 3056910879508229
+ },
+ {
+ "id": 3056905331394245
+ },
+ {
+ "id": 3056902065473349
+ },
+ {
+ "id": 3056890892535685
+ },
+ {
+ "id": 3056890473858757
+ },
+ {
+ "id": 3056889854609285
+ },
+ {
+ "id": 3056888080123781
+ },
+ {
+ "id": 3056886248654661
+ },
+ {
+ "id": 3056884862027525
+ },
+ {
+ "id": 3056884219201413
+ },
+ {
+ "id": 3056883773802309
+ },
+ {
+ "id": 3056879992358597
+ },
+ {
+ "id": 3056877421627205
+ },
+ {
+ "id": 3056864070403973
+ },
+ {
+ "id": 3056854982575813
+ },
+ {
+ "id": 3056853929461637
+ },
+ {
+ "id": 3056853418247877
+ },
+ {
+ "id": 3056852563330885
+ },
+ {
+ "id": 3056850133452613
+ },
+ {
+ "id": 3056843048617797
+ },
+ {
+ "id": 3056837029676741
+ },
+ {
+ "id": 3056836306863877
+ },
+ {
+ "id": 3056826097174341
+ },
+ {
+ "id": 3056816570730181
+ },
+ {
+ "id": 3056811187324741
+ },
+ {
+ "id": 3056809281292165
+ },
+ {
+ "id": 3056808117716869
+ },
+ {
+ "id": 3056805507417925
+ },
+ {
+ "id": 3056796391950021
+ },
+ {
+ "id": 3056794821478149
+ },
+ {
+ "id": 3056794153469701
+ },
+ {
+ "id": 3056779331307270
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 114,
+ "records_with_pk": 114,
+ "missing": 74,
+ "missing_samples": [
+ {
+ "id": 3056982208005957
+ },
+ {
+ "id": 3056953997674373
+ },
+ {
+ "id": 3056953997002629
+ },
+ {
+ "id": 3056919597958981
+ },
+ {
+ "id": 3056911095482245
+ },
+ {
+ "id": 3056880172549957
+ },
+ {
+ "id": 3056880171992901
+ },
+ {
+ "id": 3056794939098949
+ },
+ {
+ "id": 3056794938640197
+ },
+ {
+ "id": 3056714097248069
+ },
+ {
+ "id": 3056525609060101
+ },
+ {
+ "id": 3055890048599813
+ },
+ {
+ "id": 3055890048124677
+ },
+ {
+ "id": 3055885302908613
+ },
+ {
+ "id": 3055854199539397
+ },
+ {
+ "id": 3055854199097029
+ },
+ {
+ "id": 3055763988301573
+ },
+ {
+ "id": 3055757794346693
+ },
+ {
+ "id": 3055757793871557
+ },
+ {
+ "id": 3055757793412805
+ },
+ {
+ "id": 3055757792888517
+ },
+ {
+ "id": 3055681672464197
+ },
+ {
+ "id": 3055639814948613
+ },
+ {
+ "id": 3055634623186757
+ },
+ {
+ "id": 3055634622744389
+ },
+ {
+ "id": 3055629233555269
+ },
+ {
+ "id": 3055598631093957
+ },
+ {
+ "id": 3055593876768518
+ },
+ {
+ "id": 3055540092061445
+ },
+ {
+ "id": 3055474913773253
+ },
+ {
+ "id": 3055298714142469
+ },
+ {
+ "id": 3055298713454341
+ },
+ {
+ "id": 3055298712979205
+ },
+ {
+ "id": 3055258938002821
+ },
+ {
+ "id": 3055258937462149
+ },
+ {
+ "id": 3055258936774021
+ },
+ {
+ "id": 3055177883585605
+ },
+ {
+ "id": 3055165426519365
+ },
+ {
+ "id": 3054532499983685
+ },
+ {
+ "id": 3054532499492165
+ },
+ {
+ "id": 3054369730432325
+ },
+ {
+ "id": 3054369729891653
+ },
+ {
+ "id": 3054369204112773
+ },
+ {
+ "id": 3054282272590917
+ },
+ {
+ "id": 3054276255534405
+ },
+ {
+ "id": 3054276255059269
+ },
+ {
+ "id": 3054270640983109
+ },
+ {
+ "id": 3054270333111621
+ },
+ {
+ "id": 3054270332259653
+ },
+ {
+ "id": 3054257700490309
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 5,
+ "records_with_pk": 5,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3055854198654661
+ },
+ {
+ "id": 3054102024031429
+ },
+ {
+ "id": 3054102024834245
+ },
+ {
+ "id": 3054102025833669
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11944,
+ "records_with_pk": 11944,
+ "missing": 440,
+ "missing_samples": [
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ },
+ {
+ "id": 3056884233275077
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2465,
+ "records_with_pk": 2465,
+ "missing": 81,
+ "missing_samples": [
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ },
+ {
+ "id": 3054273873972613
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 13,
+ "records_with_pk": 13,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3055852804769541
+ },
+ {
+ "id": 3055757040240453
+ },
+ {
+ "id": 3055567463532421
+ },
+ {
+ "id": 3055177162837381
+ },
+ {
+ "id": 3054210385137029
+ },
+ {
+ "id": 3054195772001605
+ },
+ {
+ "id": 3053966621347013
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 688,
+ "records_with_pk": 688,
+ "missing": 496,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3057033942206213
+ },
+ {
+ "sitegoodsstockid": 3057020049737477
+ },
+ {
+ "sitegoodsstockid": 3057014058862405
+ },
+ {
+ "sitegoodsstockid": 3057009674340165
+ },
+ {
+ "sitegoodsstockid": 3057005598492421
+ },
+ {
+ "sitegoodsstockid": 3057004882659141
+ },
+ {
+ "sitegoodsstockid": 3056997868406661
+ },
+ {
+ "sitegoodsstockid": 3056979367380805
+ },
+ {
+ "sitegoodsstockid": 3056967704184645
+ },
+ {
+ "sitegoodsstockid": 3056961133971333
+ },
+ {
+ "sitegoodsstockid": 3056949671331589
+ },
+ {
+ "sitegoodsstockid": 3056911529903941
+ },
+ {
+ "sitegoodsstockid": 3056911312242565
+ },
+ {
+ "sitegoodsstockid": 3056910612252485
+ },
+ {
+ "sitegoodsstockid": 3056910612776773
+ },
+ {
+ "sitegoodsstockid": 3056910613432133
+ },
+ {
+ "sitegoodsstockid": 3056890725517061
+ },
+ {
+ "sitegoodsstockid": 3056888105731845
+ },
+ {
+ "sitegoodsstockid": 3056888105895685
+ },
+ {
+ "sitegoodsstockid": 3056887950313349
+ },
+ {
+ "sitegoodsstockid": 3056884951287685
+ },
+ {
+ "sitegoodsstockid": 3056881394812805
+ },
+ {
+ "sitegoodsstockid": 3056868923803461
+ },
+ {
+ "sitegoodsstockid": 3056867086780165
+ },
+ {
+ "sitegoodsstockid": 3056867087369989
+ },
+ {
+ "sitegoodsstockid": 3056867086010117
+ },
+ {
+ "sitegoodsstockid": 3056866232600261
+ },
+ {
+ "sitegoodsstockid": 3056850159027973
+ },
+ {
+ "sitegoodsstockid": 3056847869511429
+ },
+ {
+ "sitegoodsstockid": 3056847870068485
+ },
+ {
+ "sitegoodsstockid": 3056837533452037
+ },
+ {
+ "sitegoodsstockid": 3056837532845829
+ },
+ {
+ "sitegoodsstockid": 3056811220617093
+ },
+ {
+ "sitegoodsstockid": 3056811220453253
+ },
+ {
+ "sitegoodsstockid": 3056808611137349
+ },
+ {
+ "sitegoodsstockid": 3056805312218885
+ },
+ {
+ "sitegoodsstockid": 3056805313136389
+ },
+ {
+ "sitegoodsstockid": 3056805312694021
+ },
+ {
+ "sitegoodsstockid": 3056804676077445
+ },
+ {
+ "sitegoodsstockid": 3056804675569541
+ },
+ {
+ "sitegoodsstockid": 3056797925508869
+ },
+ {
+ "sitegoodsstockid": 3056797925984005
+ },
+ {
+ "sitegoodsstockid": 3056797925017349
+ },
+ {
+ "sitegoodsstockid": 3056796414658245
+ },
+ {
+ "sitegoodsstockid": 3056796414822085
+ },
+ {
+ "sitegoodsstockid": 3056794178750341
+ },
+ {
+ "sitegoodsstockid": 3056794002392837
+ },
+ {
+ "sitegoodsstockid": 3056776751368005
+ },
+ {
+ "sitegoodsstockid": 3056753449502597
+ },
+ {
+ "sitegoodsstockid": 3056753449994117
+ }
+ ],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 554,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 554,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 2578,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T04:50:01.850743+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 120,
+ "diff": -120
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 120,
+ "ods": 120,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 3910.16,
+ "ods_sum": 3910.16,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 4855.76,
+ "ods_sum": 4855.76,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 17482.25,
+ "ods_sum": 17482.25,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 1857.77,
+ "ods_sum": 1857.77,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 9785.64,
+ "ods_sum": 9785.64,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 40,
+ "ods": 40,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 14270.54,
+ "ods_sum": 14270.54,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 87,
+ "ods": 87,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 4940.0,
+ "ods_sum": 4940.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 4855.76,
+ "ods_sum": 4855.76,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 80,
+ "ods": 80,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 4584.0,
+ "ods_sum": 4584.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 136,
+ "ods": 136,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 32589.0,
+ "ods_sum": 32589.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466822
+ },
+ "generated_at": "2026-01-19T04:50:09.580038+08:00"
+ }
+ ],
+ "total_missing": 15330,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T04:50:09.580069+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_history_20260119_060453.json b/etl_billiards/reports/data_integrity_history_20260119_060453.json
new file mode 100644
index 0000000..5d0d878
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_history_20260119_060453.json
@@ -0,0 +1,45066 @@
+{
+ "mode": "history",
+ "start": "2024-07-19T00:00:00+08:00",
+ "end": "2026-01-20T00:00:00+08:00",
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2024-07-19T00:00:00+08:00",
+ "end": "2024-08-01T00:00:00+08:00",
+ "label": "month_2024-07-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2024-07-19T00:00:00+08:00",
+ "end": "2024-08-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 13,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T05:16:03.413933+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T05:16:10.340880+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2024-08-01T00:00:00+08:00",
+ "end": "2024-09-01T00:00:00+08:00",
+ "label": "month_2024-08-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2024-08-01T00:00:00+08:00",
+ "end": "2024-09-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T05:18:18.859264+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T05:18:25.963176+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2024-09-01T00:00:00+08:00",
+ "end": "2024-10-01T00:00:00+08:00",
+ "label": "month_2024-09-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2024-09-01T00:00:00+08:00",
+ "end": "2024-10-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T05:20:35.610517+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T05:20:43.003907+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2024-10-01T00:00:00+08:00",
+ "end": "2024-11-01T00:00:00+08:00",
+ "label": "month_2024-10-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2024-10-01T00:00:00+08:00",
+ "end": "2024-11-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T05:22:53.103666+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T05:22:59.984747+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2024-11-01T00:00:00+08:00",
+ "end": "2024-12-01T00:00:00+08:00",
+ "label": "month_2024-11-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2024-11-01T00:00:00+08:00",
+ "end": "2024-12-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T05:25:11.189695+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T05:25:18.239968+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2024-12-01T00:00:00+08:00",
+ "end": "2025-01-01T00:00:00+08:00",
+ "label": "month_2024-12-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2024-12-01T00:00:00+08:00",
+ "end": "2025-01-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T05:27:27.161324+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T05:27:34.687853+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-01-01T00:00:00+08:00",
+ "end": "2025-02-01T00:00:00+08:00",
+ "label": "month_2025-01-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-01-01T00:00:00+08:00",
+ "end": "2025-02-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T05:29:46.816466+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T05:29:53.812921+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-02-01T00:00:00+08:00",
+ "end": "2025-03-01T00:00:00+08:00",
+ "label": "month_2025-02-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-02-01T00:00:00+08:00",
+ "end": "2025-03-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 28,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T05:32:06.622181+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T05:32:13.586062+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-03-01T00:00:00+08:00",
+ "end": "2025-04-01T00:00:00+08:00",
+ "label": "month_2025-03-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-03-01T00:00:00+08:00",
+ "end": "2025-04-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T05:34:23.320570+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T05:34:30.520324+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-04-01T00:00:00+08:00",
+ "end": "2025-05-01T00:00:00+08:00",
+ "label": "month_2025-04-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-04-01T00:00:00+08:00",
+ "end": "2025-05-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T05:36:41.568189+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T05:36:48.946053+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-05-01T00:00:00+08:00",
+ "end": "2025-06-01T00:00:00+08:00",
+ "label": "month_2025-05-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-05-01T00:00:00+08:00",
+ "end": "2025-06-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T05:38:56.912079+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T05:39:04.047468+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-06-01T00:00:00+08:00",
+ "end": "2025-07-01T00:00:00+08:00",
+ "label": "month_2025-06-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-06-01T00:00:00+08:00",
+ "end": "2025-07-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T05:41:13.649791+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T05:41:20.915372+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-07-01T00:00:00+08:00",
+ "end": "2025-08-01T00:00:00+08:00",
+ "label": "month_2025-07-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-07-01T00:00:00+08:00",
+ "end": "2025-08-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1776,
+ "records_with_pk": 1776,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 351,
+ "records_with_pk": 351,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 44,
+ "records_with_pk": 44,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 2551,
+ "records_with_pk": 2551,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 1845,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 10,
+ "skipped_missing_pk": 1845,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T05:43:45.422258+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1246,
+ "diff": -1246
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 23,
+ "ods": 23,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 466,
+ "ods": 466,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 751,
+ "ods": 751,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 149,
+ "ods": 149,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 14,
+ "ods": 14,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1246,
+ "ods": 1246,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 18607.65,
+ "ods_sum": 18607.65,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 68759.8,
+ "ods_sum": 68759.8,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 133842.45,
+ "ods_sum": 133842.45,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 10234.83,
+ "ods_sum": 10234.83,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 46883.63,
+ "ods_sum": 46883.63,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1575,
+ "ods": 1575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 14.25,
+ "ods_sum": 14.25,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 31186.8,
+ "ods_sum": 31186.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 29160.8,
+ "ods_sum": 29160.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 351,
+ "ods": 351,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1261.59,
+ "ods_sum": 1261.59,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 113232.99,
+ "ods_sum": 113232.99,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1007,
+ "ods": 1007,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 72348.0,
+ "ods_sum": 72348.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1833,
+ "ods": 1833,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 178060.0,
+ "ods_sum": 178060.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 465696
+ },
+ "generated_at": "2026-01-19T05:43:52.416481+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-08-01T00:00:00+08:00",
+ "end": "2025-09-01T00:00:00+08:00",
+ "label": "month_2025-08-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-08-01T00:00:00+08:00",
+ "end": "2025-09-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4602,
+ "records_with_pk": 4602,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 24,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 859,
+ "records_with_pk": 859,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 94,
+ "records_with_pk": 94,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5196,
+ "records_with_pk": 5196,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 26,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4763,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 24,
+ "skipped_missing_pk": 4763,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T05:46:36.578682+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3587,
+ "diff": -3587
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 18,
+ "ods": 18,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 51,
+ "ods": 51,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3587,
+ "ods": 3587,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 54919.33,
+ "ods_sum": 54919.33,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 186359.95,
+ "ods_sum": 186359.95,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 383097.96,
+ "ods_sum": 383097.96,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 44840.88,
+ "ods_sum": 44840.88,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 145513.13,
+ "ods_sum": 145513.13,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4305,
+ "ods": 4305,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 47.45,
+ "ods_sum": 47.45,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 87523.4,
+ "ods_sum": 87523.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 83759.0,
+ "ods_sum": 83759.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 859,
+ "ods": 859,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1874.75,
+ "ods_sum": 1874.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 268501.57,
+ "ods_sum": 268501.57,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2850,
+ "ods": 2850,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 189960.0,
+ "ods_sum": 189960.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4763,
+ "ods": 4763,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 381598.0,
+ "ods_sum": 381598.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 463355
+ },
+ "generated_at": "2026-01-19T05:46:43.457148+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-09-01T00:00:00+08:00",
+ "end": "2025-10-01T00:00:00+08:00",
+ "label": "month_2025-09-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-09-01T00:00:00+08:00",
+ "end": "2025-10-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3720,
+ "records_with_pk": 3720,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 19,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 654,
+ "records_with_pk": 654,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 54,
+ "records_with_pk": 54,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 4816,
+ "records_with_pk": 4816,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 25,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 3810,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 20,
+ "skipped_missing_pk": 3810,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T05:49:26.890701+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1264,
+ "diff": -1264
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 11,
+ "ods": 11,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1264,
+ "ods": 1264,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 11020.51,
+ "ods_sum": 11020.51,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 73893.75,
+ "ods_sum": 73893.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 137203.92,
+ "ods_sum": 137203.92,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 15685.02,
+ "ods_sum": 15685.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 52340.33,
+ "ods_sum": 52340.33,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1449,
+ "ods": 1449,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1.41,
+ "ods_sum": 1.41,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 24706.9,
+ "ods_sum": 24706.9,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 23874.4,
+ "ods_sum": 23874.4,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 240,
+ "ods": 654,
+ "diff": -414
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 391.51,
+ "ods_sum": 781.44,
+ "diff": -389.93000000000006
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 69566.69,
+ "ods_sum": 192541.75,
+ "diff": -122975.06
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1173,
+ "ods": 1173,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 75824.0,
+ "ods_sum": 75824.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 73843.08,
+ "ods_sum": 73843.08,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 184722.0,
+ "ods_sum": 184722.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1544,
+ "ods": 1544,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 108880.0,
+ "ods_sum": 108880.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -1011.0,
+ "ods_sum": -1011.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 465264
+ },
+ "generated_at": "2026-01-19T05:49:33.556140+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-10-01T00:00:00+08:00",
+ "end": "2025-11-01T00:00:00+08:00",
+ "label": "month_2025-10-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-10-01T00:00:00+08:00",
+ "end": "2025-11-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1609,
+ "records_with_pk": 1609,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 283,
+ "records_with_pk": 283,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 7,
+ "records_with_pk": 7,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 23,
+ "records_with_pk": 23,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 2158,
+ "records_with_pk": 2158,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 11,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 1638,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 1638,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T05:51:57.549176+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2824,
+ "diff": -2824
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 21,
+ "ods": 21,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2824,
+ "ods": 2824,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 40394.85,
+ "ods_sum": 40394.85,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 310789.49,
+ "ods_sum": 310789.49,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33315.15,
+ "ods_sum": 33315.15,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 116393.37,
+ "ods_sum": 116393.37,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3475,
+ "ods": 3475,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1319.49,
+ "ods_sum": 1319.49,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 66216.8,
+ "ods_sum": 66216.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 64234.0,
+ "ods_sum": 64234.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 573,
+ "ods": 573,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 2143.56,
+ "ods_sum": 2143.56,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 172536.78,
+ "ods_sum": 172536.78,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2490,
+ "ods": 2490,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160988.0,
+ "ods_sum": 160988.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2489,
+ "ods": 2489,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160076.0,
+ "ods_sum": 160076.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3616,
+ "ods": 3616,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 286088.0,
+ "ods_sum": 286088.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -47020.0,
+ "ods_sum": -47020.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 464118
+ },
+ "generated_at": "2026-01-19T05:52:04.976535+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-11-01T00:00:00+08:00",
+ "end": "2025-12-01T00:00:00+08:00",
+ "label": "month_2025-11-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-11-01T00:00:00+08:00",
+ "end": "2025-12-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3874,
+ "records_with_pk": 3874,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 20,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 884,
+ "records_with_pk": 884,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 12,
+ "records_with_pk": 12,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 80,
+ "records_with_pk": 80,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5516,
+ "records_with_pk": 5516,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 28,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 3999,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 20,
+ "skipped_missing_pk": 3999,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T05:54:46.471379+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3336,
+ "diff": -3336
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 12,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 40,
+ "ods": 40,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 80,
+ "ods": 80,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3336,
+ "ods": 3336,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71642.8,
+ "ods_sum": 71642.8,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 394705.62,
+ "ods_sum": 394705.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33307.25,
+ "ods_sum": 33307.25,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 156623.79,
+ "ods_sum": 156623.79,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4134,
+ "ods": 4134,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1544.05,
+ "ods_sum": 1544.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 98139.8,
+ "ods_sum": 98139.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 87610.8,
+ "ods_sum": 87610.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 884,
+ "ods": 884,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1437.75,
+ "ods_sum": 1437.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 281102.62,
+ "ods_sum": 281102.62,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2838,
+ "ods": 2838,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 172860.0,
+ "ods_sum": 172860.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2843,
+ "ods": 2843,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 173800.0,
+ "ods_sum": 173800.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3999,
+ "ods": 3999,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 457185.0,
+ "ods_sum": 457185.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 17,
+ "ods": 17,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -16567.0,
+ "ods_sum": -16567.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 463606
+ },
+ "generated_at": "2026-01-19T05:54:53.951338+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-12-01T00:00:00+08:00",
+ "end": "2026-01-01T00:00:00+08:00",
+ "label": "month_2025-12-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-12-01T00:00:00+08:00",
+ "end": "2026-01-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4011,
+ "records_with_pk": 4011,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 21,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 975,
+ "records_with_pk": 975,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 35,
+ "records_with_pk": 35,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 70,
+ "records_with_pk": 70,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5464,
+ "records_with_pk": 5464,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 28,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4118,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 21,
+ "skipped_missing_pk": 4118,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T05:57:40.216434+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3479,
+ "diff": -3479
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 12,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3479,
+ "ods": 3479,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71445.57,
+ "ods_sum": 71445.57,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 432220.76,
+ "ods_sum": 432220.76,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 34544.63,
+ "ods_sum": 34544.63,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 189974.44,
+ "ods_sum": 189974.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2625,
+ "ods": 2625,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 190.1,
+ "ods_sum": 190.1,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 65814.4,
+ "ods_sum": 65814.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 63275.9,
+ "ods_sum": 63275.9,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 975,
+ "ods": 975,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 3190.05,
+ "ods_sum": 3190.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 322183.69,
+ "ods_sum": 322183.69,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2816,
+ "ods": 2816,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 179652.0,
+ "ods_sum": 179652.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2827,
+ "ods": 2827,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 180232.0,
+ "ods_sum": 180232.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4118,
+ "ods": 4118,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 472999.0,
+ "ods_sum": 472999.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -4314.0,
+ "ods_sum": -4314.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 463463
+ },
+ "generated_at": "2026-01-19T05:57:46.966076+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-01T00:00:00+08:00",
+ "end": "2026-01-08T00:00:00+08:00",
+ "label": "week_2026-01-01",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "start": "2026-01-01T00:00:00+08:00",
+ "end": "2026-01-08T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 800,
+ "records_with_pk": 800,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 157,
+ "records_with_pk": 157,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2,
+ "records_with_pk": 2,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17,
+ "records_with_pk": 17,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 867,
+ "records_with_pk": 867,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 823,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 823,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T05:59:57.867109+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 699,
+ "diff": -699
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 699,
+ "ods": 699,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 8896.03,
+ "ods_sum": 8896.03,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 74693.62,
+ "ods_sum": 74693.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6587.39,
+ "ods_sum": 6587.39,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30138.48,
+ "ods_sum": 30138.48,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 157,
+ "ods": 157,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 46522.68,
+ "ods_sum": 46522.68,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 569,
+ "ods": 569,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37392.0,
+ "ods_sum": 37392.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 566,
+ "ods": 566,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37228.0,
+ "ods_sum": 37228.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 823,
+ "ods": 823,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 78730.0,
+ "ods_sum": 78730.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -7.0,
+ "ods_sum": -7.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466243
+ },
+ "generated_at": "2026-01-19T06:00:05.211141+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-08T00:00:00+08:00",
+ "end": "2026-01-15T00:00:00+08:00",
+ "label": "week_2026-01-08",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "start": "2026-01-08T00:00:00+08:00",
+ "end": "2026-01-15T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 767,
+ "records_with_pk": 767,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 188,
+ "records_with_pk": 188,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 22,
+ "records_with_pk": 22,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 15,
+ "records_with_pk": 15,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1198,
+ "records_with_pk": 1198,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 790,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 790,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T06:02:22.012058+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 672,
+ "diff": -672
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 672,
+ "ods": 672,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 16159.12,
+ "ods_sum": 16159.12,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 82416.19,
+ "ods_sum": 82416.19,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6098.02,
+ "ods_sum": 6098.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30731.98,
+ "ods_sum": 30731.98,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 188,
+ "ods": 188,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 190.72,
+ "ods_sum": 190.72,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 54584.19,
+ "ods_sum": 54584.19,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 572,
+ "ods": 572,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37214.0,
+ "ods_sum": 37214.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 575,
+ "ods": 575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37262.0,
+ "ods_sum": 37262.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 790,
+ "ods": 790,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 86381.0,
+ "ods_sum": 86381.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -39.0,
+ "ods_sum": -39.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466270
+ },
+ "generated_at": "2026-01-19T06:02:29.217420+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-15T00:00:00+08:00",
+ "end": "2026-01-20T00:00:00+08:00",
+ "label": "week_2026-01-15",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "start": "2026-01-15T00:00:00+08:00",
+ "end": "2026-01-20T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 5,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 552,
+ "records_with_pk": 552,
+ "missing": 424,
+ "missing_samples": [
+ {
+ "id": 3057290422912837
+ },
+ {
+ "id": 3057269702969221
+ },
+ {
+ "id": 3057249723926405
+ },
+ {
+ "id": 3057219761817285
+ },
+ {
+ "id": 3057214065969029
+ },
+ {
+ "id": 3057209908758213
+ },
+ {
+ "id": 3057206570534725
+ },
+ {
+ "id": 3057196624627525
+ },
+ {
+ "id": 3057177203099397
+ },
+ {
+ "id": 3057166977042245
+ },
+ {
+ "id": 3057156407166661
+ },
+ {
+ "id": 3057134753875781
+ },
+ {
+ "id": 3057078852978373
+ },
+ {
+ "id": 3057073780868805
+ },
+ {
+ "id": 3057069481494341
+ },
+ {
+ "id": 3057068241651525
+ },
+ {
+ "id": 3057055047960453
+ },
+ {
+ "id": 3057052431304581
+ },
+ {
+ "id": 3057048509925061
+ },
+ {
+ "id": 3057046131721989
+ },
+ {
+ "id": 3057043840960261
+ },
+ {
+ "id": 3057020019230533
+ },
+ {
+ "id": 3057014990243589
+ },
+ {
+ "id": 3057013753005957
+ },
+ {
+ "id": 3057008518383429
+ },
+ {
+ "id": 3056995682600645
+ },
+ {
+ "id": 3056981741766533
+ },
+ {
+ "id": 3056979342640901
+ },
+ {
+ "id": 3056959684708101
+ },
+ {
+ "id": 3056956357510981
+ },
+ {
+ "id": 3056954936903557
+ },
+ {
+ "id": 3056953857476357
+ },
+ {
+ "id": 3056943938029253
+ },
+ {
+ "id": 3056938804184901
+ },
+ {
+ "id": 3056932651288325
+ },
+ {
+ "id": 3056931799222149
+ },
+ {
+ "id": 3056919515154117
+ },
+ {
+ "id": 3056914445453125
+ },
+ {
+ "id": 3056914261952325
+ },
+ {
+ "id": 3056910879508229
+ },
+ {
+ "id": 3056905331394245
+ },
+ {
+ "id": 3056902065473349
+ },
+ {
+ "id": 3056890892535685
+ },
+ {
+ "id": 3056890473858757
+ },
+ {
+ "id": 3056889854609285
+ },
+ {
+ "id": 3056888080123781
+ },
+ {
+ "id": 3056886248654661
+ },
+ {
+ "id": 3056884862027525
+ },
+ {
+ "id": 3056884219201413
+ },
+ {
+ "id": 3056883773802309
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 119,
+ "records_with_pk": 119,
+ "missing": 79,
+ "missing_samples": [
+ {
+ "id": 3057214127572805
+ },
+ {
+ "id": 3057214127146821
+ },
+ {
+ "id": 3057210214008517
+ },
+ {
+ "id": 3057167231715077
+ },
+ {
+ "id": 3057068424185541
+ },
+ {
+ "id": 3056982208005957
+ },
+ {
+ "id": 3056953997674373
+ },
+ {
+ "id": 3056953997002629
+ },
+ {
+ "id": 3056919597958981
+ },
+ {
+ "id": 3056911095482245
+ },
+ {
+ "id": 3056880172549957
+ },
+ {
+ "id": 3056880171992901
+ },
+ {
+ "id": 3056794939098949
+ },
+ {
+ "id": 3056794938640197
+ },
+ {
+ "id": 3056714097248069
+ },
+ {
+ "id": 3056525609060101
+ },
+ {
+ "id": 3055890048599813
+ },
+ {
+ "id": 3055890048124677
+ },
+ {
+ "id": 3055885302908613
+ },
+ {
+ "id": 3055854199539397
+ },
+ {
+ "id": 3055854199097029
+ },
+ {
+ "id": 3055763988301573
+ },
+ {
+ "id": 3055757794346693
+ },
+ {
+ "id": 3055757793871557
+ },
+ {
+ "id": 3055757793412805
+ },
+ {
+ "id": 3055757792888517
+ },
+ {
+ "id": 3055681672464197
+ },
+ {
+ "id": 3055639814948613
+ },
+ {
+ "id": 3055634623186757
+ },
+ {
+ "id": 3055634622744389
+ },
+ {
+ "id": 3055629233555269
+ },
+ {
+ "id": 3055598631093957
+ },
+ {
+ "id": 3055593876768518
+ },
+ {
+ "id": 3055540092061445
+ },
+ {
+ "id": 3055474913773253
+ },
+ {
+ "id": 3055298714142469
+ },
+ {
+ "id": 3055298713454341
+ },
+ {
+ "id": 3055298712979205
+ },
+ {
+ "id": 3055258938002821
+ },
+ {
+ "id": 3055258937462149
+ },
+ {
+ "id": 3055258936774021
+ },
+ {
+ "id": 3055177883585605
+ },
+ {
+ "id": 3055165426519365
+ },
+ {
+ "id": 3054532499983685
+ },
+ {
+ "id": 3054532499492165
+ },
+ {
+ "id": 3054369730432325
+ },
+ {
+ "id": 3054369729891653
+ },
+ {
+ "id": 3054369204112773
+ },
+ {
+ "id": 3054282272590917
+ },
+ {
+ "id": 3054276255534405
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 5,
+ "records_with_pk": 5,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3055854198654661
+ },
+ {
+ "id": 3054102024031429
+ },
+ {
+ "id": 3054102024834245
+ },
+ {
+ "id": 3054102025833669
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 15,
+ "records_with_pk": 15,
+ "missing": 9,
+ "missing_samples": [
+ {
+ "id": 3057333865711429
+ },
+ {
+ "id": 3057069833078469
+ },
+ {
+ "id": 3055852804769541
+ },
+ {
+ "id": 3055757040240453
+ },
+ {
+ "id": 3055567463532421
+ },
+ {
+ "id": 3055177162837381
+ },
+ {
+ "id": 3054210385137029
+ },
+ {
+ "id": 3054195772001605
+ },
+ {
+ "id": 3053966621347013
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 718,
+ "records_with_pk": 718,
+ "missing": 526,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3057376085329669
+ },
+ {
+ "sitegoodsstockid": 3057370028885765
+ },
+ {
+ "sitegoodsstockid": 3057367488546629
+ },
+ {
+ "sitegoodsstockid": 3057334818457349
+ },
+ {
+ "sitegoodsstockid": 3057283158640389
+ },
+ {
+ "sitegoodsstockid": 3057283159115525
+ },
+ {
+ "sitegoodsstockid": 3057249985480517
+ },
+ {
+ "sitegoodsstockid": 3057238611035909
+ },
+ {
+ "sitegoodsstockid": 3057214401595269
+ },
+ {
+ "sitegoodsstockid": 3057193758230341
+ },
+ {
+ "sitegoodsstockid": 3057193758721861
+ },
+ {
+ "sitegoodsstockid": 3057193757755205
+ },
+ {
+ "sitegoodsstockid": 3057191498975045
+ },
+ {
+ "sitegoodsstockid": 3057191498467141
+ },
+ {
+ "sitegoodsstockid": 3057177227003717
+ },
+ {
+ "sitegoodsstockid": 3057167387543237
+ },
+ {
+ "sitegoodsstockid": 3057125713381253
+ },
+ {
+ "sitegoodsstockid": 3057105202415493
+ },
+ {
+ "sitegoodsstockid": 3057095130416837
+ },
+ {
+ "sitegoodsstockid": 3057092912613125
+ },
+ {
+ "sitegoodsstockid": 3057092912137989
+ },
+ {
+ "sitegoodsstockid": 3057085770663685
+ },
+ {
+ "sitegoodsstockid": 3057084025046917
+ },
+ {
+ "sitegoodsstockid": 3057084025505669
+ },
+ {
+ "sitegoodsstockid": 3057073805133701
+ },
+ {
+ "sitegoodsstockid": 3057073804969861
+ },
+ {
+ "sitegoodsstockid": 3057070111688389
+ },
+ {
+ "sitegoodsstockid": 3057070112229061
+ },
+ {
+ "sitegoodsstockid": 3057066868950725
+ },
+ {
+ "sitegoodsstockid": 3057065029289733
+ },
+ {
+ "sitegoodsstockid": 3057033942206213
+ },
+ {
+ "sitegoodsstockid": 3057020049737477
+ },
+ {
+ "sitegoodsstockid": 3057014058862405
+ },
+ {
+ "sitegoodsstockid": 3057009674340165
+ },
+ {
+ "sitegoodsstockid": 3057005598492421
+ },
+ {
+ "sitegoodsstockid": 3057004882659141
+ },
+ {
+ "sitegoodsstockid": 3056997868406661
+ },
+ {
+ "sitegoodsstockid": 3056979367380805
+ },
+ {
+ "sitegoodsstockid": 3056967704184645
+ },
+ {
+ "sitegoodsstockid": 3056961133971333
+ },
+ {
+ "sitegoodsstockid": 3056949671331589
+ },
+ {
+ "sitegoodsstockid": 3056911529903941
+ },
+ {
+ "sitegoodsstockid": 3056911312242565
+ },
+ {
+ "sitegoodsstockid": 3056910612252485
+ },
+ {
+ "sitegoodsstockid": 3056910612776773
+ },
+ {
+ "sitegoodsstockid": 3056910613432133
+ },
+ {
+ "sitegoodsstockid": 3056890725517061
+ },
+ {
+ "sitegoodsstockid": 3056888105731845
+ },
+ {
+ "sitegoodsstockid": 3056888105895685
+ },
+ {
+ "sitegoodsstockid": 3056887950313349
+ }
+ ],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 577,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 577,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 2638,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T06:04:45.914825+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 120,
+ "diff": -120
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 120,
+ "ods": 120,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 3910.16,
+ "ods_sum": 3910.16,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 4855.76,
+ "ods_sum": 4855.76,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 17482.25,
+ "ods_sum": 17482.25,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 1857.77,
+ "ods_sum": 1857.77,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 9785.64,
+ "ods_sum": 9785.64,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 40,
+ "ods": 40,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 14270.54,
+ "ods_sum": 14270.54,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 87,
+ "ods": 87,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 4940.0,
+ "ods_sum": 4940.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 4855.76,
+ "ods_sum": 4855.76,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 80,
+ "ods": 80,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 4584.0,
+ "ods_sum": 4584.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 136,
+ "ods": 136,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 32589.0,
+ "ods_sum": 32589.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466822
+ },
+ "generated_at": "2026-01-19T06:04:53.436363+08:00"
+ }
+ ],
+ "total_missing": 34558,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T06:04:53.436384+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_history_20260119_070903.json b/etl_billiards/reports/data_integrity_history_20260119_070903.json
new file mode 100644
index 0000000..8220dc8
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_history_20260119_070903.json
@@ -0,0 +1,45060 @@
+{
+ "mode": "history",
+ "start": "2024-07-19T00:00:00+08:00",
+ "end": "2026-01-19T00:00:00+08:00",
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2024-07-19T00:00:00+08:00",
+ "end": "2024-08-01T00:00:00+08:00",
+ "label": "month_2024-07-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2024-07-19T00:00:00+08:00",
+ "end": "2024-08-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 13,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T06:20:16.187738+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T06:20:22.688674+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2024-08-01T00:00:00+08:00",
+ "end": "2024-09-01T00:00:00+08:00",
+ "label": "month_2024-08-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2024-08-01T00:00:00+08:00",
+ "end": "2024-09-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T06:22:37.815124+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T06:22:43.923006+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2024-09-01T00:00:00+08:00",
+ "end": "2024-10-01T00:00:00+08:00",
+ "label": "month_2024-09-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2024-09-01T00:00:00+08:00",
+ "end": "2024-10-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T06:24:56.215004+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T06:25:02.592886+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2024-10-01T00:00:00+08:00",
+ "end": "2024-11-01T00:00:00+08:00",
+ "label": "month_2024-10-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2024-10-01T00:00:00+08:00",
+ "end": "2024-11-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1672,
+ "records_with_pk": 1672,
+ "missing": 54,
+ "missing_samples": [
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ },
+ {
+ "id": 3054138081529221
+ },
+ {
+ "id": 3054115905686917
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1596,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T06:27:13.308390+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T06:27:19.824089+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2024-11-01T00:00:00+08:00",
+ "end": "2024-12-01T00:00:00+08:00",
+ "label": "month_2024-11-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2024-11-01T00:00:00+08:00",
+ "end": "2024-12-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 372,
+ "missing_samples": [
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ },
+ {
+ "id": 3056864356124421
+ },
+ {
+ "id": 3056855001057029
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11945,
+ "records_with_pk": 11945,
+ "missing": 441,
+ "missing_samples": [
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ },
+ {
+ "id": 3056884949387141
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 82,
+ "missing_samples": [
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ },
+ {
+ "id": 3054276249718085
+ },
+ {
+ "id": 3054276249505093
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 56,
+ "missing_samples": [
+ {
+ "id": 3057420702877509
+ },
+ {
+ "id": 3057420702828357
+ },
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1598,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T06:29:34.593009+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T06:29:40.636427+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2024-12-01T00:00:00+08:00",
+ "end": "2025-01-01T00:00:00+08:00",
+ "label": "month_2024-12-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2024-12-01T00:00:00+08:00",
+ "end": "2025-01-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 374,
+ "missing_samples": [
+ {
+ "id": 3057420699731781
+ },
+ {
+ "id": 3057420699715397
+ },
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 442,
+ "missing_samples": [
+ {
+ "id": 3057420694800197
+ },
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 84,
+ "missing_samples": [
+ {
+ "id": 3057420695603013
+ },
+ {
+ "id": 3057420695390021
+ },
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 56,
+ "missing_samples": [
+ {
+ "id": 3057420702877509
+ },
+ {
+ "id": 3057420702828357
+ },
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1603,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T06:31:53.827843+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T06:32:00.367254+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-01-01T00:00:00+08:00",
+ "end": "2025-02-01T00:00:00+08:00",
+ "label": "month_2025-01-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-01-01T00:00:00+08:00",
+ "end": "2025-02-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 374,
+ "missing_samples": [
+ {
+ "id": 3057420699731781
+ },
+ {
+ "id": 3057420699715397
+ },
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 442,
+ "missing_samples": [
+ {
+ "id": 3057420694800197
+ },
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 84,
+ "missing_samples": [
+ {
+ "id": 3057420695603013
+ },
+ {
+ "id": 3057420695390021
+ },
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 56,
+ "missing_samples": [
+ {
+ "id": 3057420702877509
+ },
+ {
+ "id": 3057420702828357
+ },
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1603,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T06:34:13.749930+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T06:34:20.005181+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-02-01T00:00:00+08:00",
+ "end": "2025-03-01T00:00:00+08:00",
+ "label": "month_2025-02-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-02-01T00:00:00+08:00",
+ "end": "2025-03-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 28,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 374,
+ "missing_samples": [
+ {
+ "id": 3057420699731781
+ },
+ {
+ "id": 3057420699715397
+ },
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 442,
+ "missing_samples": [
+ {
+ "id": 3057420694800197
+ },
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 84,
+ "missing_samples": [
+ {
+ "id": 3057420695603013
+ },
+ {
+ "id": 3057420695390021
+ },
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 56,
+ "missing_samples": [
+ {
+ "id": 3057420702877509
+ },
+ {
+ "id": 3057420702828357
+ },
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1603,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T06:36:31.765924+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T06:36:38.138899+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-03-01T00:00:00+08:00",
+ "end": "2025-04-01T00:00:00+08:00",
+ "label": "month_2025-03-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-03-01T00:00:00+08:00",
+ "end": "2025-04-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 374,
+ "missing_samples": [
+ {
+ "id": 3057420699731781
+ },
+ {
+ "id": 3057420699715397
+ },
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 442,
+ "missing_samples": [
+ {
+ "id": 3057420694800197
+ },
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 84,
+ "missing_samples": [
+ {
+ "id": 3057420695603013
+ },
+ {
+ "id": 3057420695390021
+ },
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 56,
+ "missing_samples": [
+ {
+ "id": 3057420702877509
+ },
+ {
+ "id": 3057420702828357
+ },
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1603,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T06:38:48.030981+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T06:38:54.341440+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-04-01T00:00:00+08:00",
+ "end": "2025-05-01T00:00:00+08:00",
+ "label": "month_2025-04-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-04-01T00:00:00+08:00",
+ "end": "2025-05-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 374,
+ "missing_samples": [
+ {
+ "id": 3057420699731781
+ },
+ {
+ "id": 3057420699715397
+ },
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 442,
+ "missing_samples": [
+ {
+ "id": 3057420694800197
+ },
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 84,
+ "missing_samples": [
+ {
+ "id": 3057420695603013
+ },
+ {
+ "id": 3057420695390021
+ },
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 56,
+ "missing_samples": [
+ {
+ "id": 3057420702877509
+ },
+ {
+ "id": 3057420702828357
+ },
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1603,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T06:41:05.184192+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T06:41:11.517615+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-05-01T00:00:00+08:00",
+ "end": "2025-06-01T00:00:00+08:00",
+ "label": "month_2025-05-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-05-01T00:00:00+08:00",
+ "end": "2025-06-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 374,
+ "missing_samples": [
+ {
+ "id": 3057420699731781
+ },
+ {
+ "id": 3057420699715397
+ },
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 442,
+ "missing_samples": [
+ {
+ "id": 3057420694800197
+ },
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 84,
+ "missing_samples": [
+ {
+ "id": 3057420695603013
+ },
+ {
+ "id": 3057420695390021
+ },
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 56,
+ "missing_samples": [
+ {
+ "id": 3057420702877509
+ },
+ {
+ "id": 3057420702828357
+ },
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1603,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T06:43:21.997877+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T06:43:28.282372+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-06-01T00:00:00+08:00",
+ "end": "2025-07-01T00:00:00+08:00",
+ "label": "month_2025-06-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-06-01T00:00:00+08:00",
+ "end": "2025-07-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 374,
+ "missing_samples": [
+ {
+ "id": 3057420699731781
+ },
+ {
+ "id": 3057420699715397
+ },
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 442,
+ "missing_samples": [
+ {
+ "id": 3057420694800197
+ },
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 84,
+ "missing_samples": [
+ {
+ "id": 3057420695603013
+ },
+ {
+ "id": 3057420695390021
+ },
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 56,
+ "missing_samples": [
+ {
+ "id": 3057420702877509
+ },
+ {
+ "id": 3057420702828357
+ },
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1603,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T06:45:39.004065+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466942
+ },
+ "generated_at": "2026-01-19T06:45:45.722301+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-07-01T00:00:00+08:00",
+ "end": "2025-08-01T00:00:00+08:00",
+ "label": "month_2025-07-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-07-01T00:00:00+08:00",
+ "end": "2025-08-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1776,
+ "records_with_pk": 1776,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 374,
+ "missing_samples": [
+ {
+ "id": 3057420699731781
+ },
+ {
+ "id": 3057420699715397
+ },
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 351,
+ "records_with_pk": 351,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 442,
+ "missing_samples": [
+ {
+ "id": 3057420694800197
+ },
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 84,
+ "missing_samples": [
+ {
+ "id": 3057420695603013
+ },
+ {
+ "id": 3057420695390021
+ },
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 44,
+ "records_with_pk": 44,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 2551,
+ "records_with_pk": 2551,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 56,
+ "missing_samples": [
+ {
+ "id": 3057420702877509
+ },
+ {
+ "id": 3057420702828357
+ },
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 1845,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 10,
+ "skipped_missing_pk": 1845,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1603,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T06:48:11.526513+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1246,
+ "diff": -1246
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 23,
+ "ods": 23,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 466,
+ "ods": 466,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 751,
+ "ods": 751,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 149,
+ "ods": 149,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 14,
+ "ods": 14,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1246,
+ "ods": 1246,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 18607.65,
+ "ods_sum": 18607.65,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 68759.8,
+ "ods_sum": 68759.8,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 133842.45,
+ "ods_sum": 133842.45,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 10234.83,
+ "ods_sum": 10234.83,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 46883.63,
+ "ods_sum": 46883.63,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1575,
+ "ods": 1575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 14.25,
+ "ods_sum": 14.25,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 31186.8,
+ "ods_sum": 31186.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 29160.8,
+ "ods_sum": 29160.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 351,
+ "ods": 351,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1261.59,
+ "ods_sum": 1261.59,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 113232.99,
+ "ods_sum": 113232.99,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1007,
+ "ods": 1007,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 72348.0,
+ "ods_sum": 72348.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1833,
+ "ods": 1833,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 178060.0,
+ "ods_sum": 178060.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 465696
+ },
+ "generated_at": "2026-01-19T06:48:18.040769+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-08-01T00:00:00+08:00",
+ "end": "2025-09-01T00:00:00+08:00",
+ "label": "month_2025-08-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-08-01T00:00:00+08:00",
+ "end": "2025-09-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4602,
+ "records_with_pk": 4602,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 24,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 374,
+ "missing_samples": [
+ {
+ "id": 3057420699731781
+ },
+ {
+ "id": 3057420699715397
+ },
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 859,
+ "records_with_pk": 859,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 442,
+ "missing_samples": [
+ {
+ "id": 3057420694800197
+ },
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 84,
+ "missing_samples": [
+ {
+ "id": 3057420695603013
+ },
+ {
+ "id": 3057420695390021
+ },
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 94,
+ "records_with_pk": 94,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5196,
+ "records_with_pk": 5196,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 26,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 56,
+ "missing_samples": [
+ {
+ "id": 3057420702877509
+ },
+ {
+ "id": 3057420702828357
+ },
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4763,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 24,
+ "skipped_missing_pk": 4763,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1603,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T06:51:02.036133+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3587,
+ "diff": -3587
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 18,
+ "ods": 18,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 51,
+ "ods": 51,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3587,
+ "ods": 3587,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 54919.33,
+ "ods_sum": 54919.33,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 186359.95,
+ "ods_sum": 186359.95,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 383097.96,
+ "ods_sum": 383097.96,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 44840.88,
+ "ods_sum": 44840.88,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 145513.13,
+ "ods_sum": 145513.13,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4305,
+ "ods": 4305,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 47.45,
+ "ods_sum": 47.45,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 87523.4,
+ "ods_sum": 87523.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 83759.0,
+ "ods_sum": 83759.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 859,
+ "ods": 859,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1874.75,
+ "ods_sum": 1874.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 268501.57,
+ "ods_sum": 268501.57,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2850,
+ "ods": 2850,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 189960.0,
+ "ods_sum": 189960.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4763,
+ "ods": 4763,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 381598.0,
+ "ods_sum": 381598.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 463355
+ },
+ "generated_at": "2026-01-19T06:51:08.367639+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-09-01T00:00:00+08:00",
+ "end": "2025-10-01T00:00:00+08:00",
+ "label": "month_2025-09-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-09-01T00:00:00+08:00",
+ "end": "2025-10-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3720,
+ "records_with_pk": 3720,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 19,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 374,
+ "missing_samples": [
+ {
+ "id": 3057420699731781
+ },
+ {
+ "id": 3057420699715397
+ },
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 654,
+ "records_with_pk": 654,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 442,
+ "missing_samples": [
+ {
+ "id": 3057420694800197
+ },
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 84,
+ "missing_samples": [
+ {
+ "id": 3057420695603013
+ },
+ {
+ "id": 3057420695390021
+ },
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 54,
+ "records_with_pk": 54,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 4816,
+ "records_with_pk": 4816,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 25,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 56,
+ "missing_samples": [
+ {
+ "id": 3057420702877509
+ },
+ {
+ "id": 3057420702828357
+ },
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 3810,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 20,
+ "skipped_missing_pk": 3810,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1603,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T06:53:43.429411+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1264,
+ "diff": -1264
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 11,
+ "ods": 11,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1264,
+ "ods": 1264,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 11020.51,
+ "ods_sum": 11020.51,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 73893.75,
+ "ods_sum": 73893.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 137203.92,
+ "ods_sum": 137203.92,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 15685.02,
+ "ods_sum": 15685.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 52340.33,
+ "ods_sum": 52340.33,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1449,
+ "ods": 1449,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1.41,
+ "ods_sum": 1.41,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 24706.9,
+ "ods_sum": 24706.9,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 23874.4,
+ "ods_sum": 23874.4,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 240,
+ "ods": 654,
+ "diff": -414
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 391.51,
+ "ods_sum": 781.44,
+ "diff": -389.93000000000006
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 69566.69,
+ "ods_sum": 192541.75,
+ "diff": -122975.06
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1173,
+ "ods": 1173,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 75824.0,
+ "ods_sum": 75824.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 73843.08,
+ "ods_sum": 73843.08,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 184722.0,
+ "ods_sum": 184722.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1544,
+ "ods": 1544,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 108880.0,
+ "ods_sum": 108880.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -1011.0,
+ "ods_sum": -1011.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 465264
+ },
+ "generated_at": "2026-01-19T06:53:50.113258+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-10-01T00:00:00+08:00",
+ "end": "2025-11-01T00:00:00+08:00",
+ "label": "month_2025-10-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-10-01T00:00:00+08:00",
+ "end": "2025-11-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1609,
+ "records_with_pk": 1609,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 374,
+ "missing_samples": [
+ {
+ "id": 3057420699731781
+ },
+ {
+ "id": 3057420699715397
+ },
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 283,
+ "records_with_pk": 283,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 7,
+ "records_with_pk": 7,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 442,
+ "missing_samples": [
+ {
+ "id": 3057420694800197
+ },
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 84,
+ "missing_samples": [
+ {
+ "id": 3057420695603013
+ },
+ {
+ "id": 3057420695390021
+ },
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 23,
+ "records_with_pk": 23,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 2158,
+ "records_with_pk": 2158,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 11,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 56,
+ "missing_samples": [
+ {
+ "id": 3057420702877509
+ },
+ {
+ "id": 3057420702828357
+ },
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 1638,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 1638,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1603,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T06:56:13.928307+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2824,
+ "diff": -2824
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 21,
+ "ods": 21,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2824,
+ "ods": 2824,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 40394.85,
+ "ods_sum": 40394.85,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 310789.49,
+ "ods_sum": 310789.49,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33315.15,
+ "ods_sum": 33315.15,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 116393.37,
+ "ods_sum": 116393.37,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3475,
+ "ods": 3475,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1319.49,
+ "ods_sum": 1319.49,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 66216.8,
+ "ods_sum": 66216.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 64234.0,
+ "ods_sum": 64234.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 573,
+ "ods": 573,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 2143.56,
+ "ods_sum": 2143.56,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 172536.78,
+ "ods_sum": 172536.78,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2490,
+ "ods": 2490,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160988.0,
+ "ods_sum": 160988.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2489,
+ "ods": 2489,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160076.0,
+ "ods_sum": 160076.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3616,
+ "ods": 3616,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 286088.0,
+ "ods_sum": 286088.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -47020.0,
+ "ods_sum": -47020.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 464118
+ },
+ "generated_at": "2026-01-19T06:56:20.356765+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-11-01T00:00:00+08:00",
+ "end": "2025-12-01T00:00:00+08:00",
+ "label": "month_2025-11-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-11-01T00:00:00+08:00",
+ "end": "2025-12-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3874,
+ "records_with_pk": 3874,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 20,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 374,
+ "missing_samples": [
+ {
+ "id": 3057420699731781
+ },
+ {
+ "id": 3057420699715397
+ },
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 884,
+ "records_with_pk": 884,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 12,
+ "records_with_pk": 12,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 442,
+ "missing_samples": [
+ {
+ "id": 3057420694800197
+ },
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 84,
+ "missing_samples": [
+ {
+ "id": 3057420695603013
+ },
+ {
+ "id": 3057420695390021
+ },
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 80,
+ "records_with_pk": 80,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5516,
+ "records_with_pk": 5516,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 28,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 56,
+ "missing_samples": [
+ {
+ "id": 3057420702877509
+ },
+ {
+ "id": 3057420702828357
+ },
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 3999,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 20,
+ "skipped_missing_pk": 3999,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1603,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T06:59:03.053434+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3336,
+ "diff": -3336
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 12,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 40,
+ "ods": 40,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 80,
+ "ods": 80,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3336,
+ "ods": 3336,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71642.8,
+ "ods_sum": 71642.8,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 394705.62,
+ "ods_sum": 394705.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33307.25,
+ "ods_sum": 33307.25,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 156623.79,
+ "ods_sum": 156623.79,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4134,
+ "ods": 4134,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1544.05,
+ "ods_sum": 1544.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 98139.8,
+ "ods_sum": 98139.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 87610.8,
+ "ods_sum": 87610.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 884,
+ "ods": 884,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1437.75,
+ "ods_sum": 1437.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 281102.62,
+ "ods_sum": 281102.62,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2838,
+ "ods": 2838,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 172860.0,
+ "ods_sum": 172860.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2843,
+ "ods": 2843,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 173800.0,
+ "ods_sum": 173800.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3999,
+ "ods": 3999,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 457185.0,
+ "ods_sum": 457185.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 17,
+ "ods": 17,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -16567.0,
+ "ods_sum": -16567.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 463606
+ },
+ "generated_at": "2026-01-19T06:59:09.457245+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-12-01T00:00:00+08:00",
+ "end": "2026-01-01T00:00:00+08:00",
+ "label": "month_2025-12-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-12-01T00:00:00+08:00",
+ "end": "2026-01-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4011,
+ "records_with_pk": 4011,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 21,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 374,
+ "missing_samples": [
+ {
+ "id": 3057420699731781
+ },
+ {
+ "id": 3057420699715397
+ },
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 975,
+ "records_with_pk": 975,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 35,
+ "records_with_pk": 35,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 442,
+ "missing_samples": [
+ {
+ "id": 3057420694800197
+ },
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 84,
+ "missing_samples": [
+ {
+ "id": 3057420695603013
+ },
+ {
+ "id": 3057420695390021
+ },
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 70,
+ "records_with_pk": 70,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5464,
+ "records_with_pk": 5464,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 28,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 56,
+ "missing_samples": [
+ {
+ "id": 3057420702877509
+ },
+ {
+ "id": 3057420702828357
+ },
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4118,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 21,
+ "skipped_missing_pk": 4118,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1603,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T07:01:56.029438+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3479,
+ "diff": -3479
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 12,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3479,
+ "ods": 3479,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71445.57,
+ "ods_sum": 71445.57,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 432220.76,
+ "ods_sum": 432220.76,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 34544.63,
+ "ods_sum": 34544.63,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 189974.44,
+ "ods_sum": 189974.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2625,
+ "ods": 2625,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 190.1,
+ "ods_sum": 190.1,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 65814.4,
+ "ods_sum": 65814.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 63275.9,
+ "ods_sum": 63275.9,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 975,
+ "ods": 975,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 3190.05,
+ "ods_sum": 3190.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 322183.69,
+ "ods_sum": 322183.69,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2816,
+ "ods": 2816,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 179652.0,
+ "ods_sum": 179652.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2827,
+ "ods": 2827,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 180232.0,
+ "ods_sum": 180232.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4118,
+ "ods": 4118,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 472999.0,
+ "ods_sum": 472999.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -4314.0,
+ "ods_sum": -4314.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 463463
+ },
+ "generated_at": "2026-01-19T07:02:02.613868+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-01T00:00:00+08:00",
+ "end": "2026-01-08T00:00:00+08:00",
+ "label": "week_2026-01-01",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "start": "2026-01-01T00:00:00+08:00",
+ "end": "2026-01-08T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 800,
+ "records_with_pk": 800,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 374,
+ "missing_samples": [
+ {
+ "id": 3057420699731781
+ },
+ {
+ "id": 3057420699715397
+ },
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 157,
+ "records_with_pk": 157,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2,
+ "records_with_pk": 2,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 442,
+ "missing_samples": [
+ {
+ "id": 3057420694800197
+ },
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 84,
+ "missing_samples": [
+ {
+ "id": 3057420695603013
+ },
+ {
+ "id": 3057420695390021
+ },
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17,
+ "records_with_pk": 17,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 867,
+ "records_with_pk": 867,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 56,
+ "missing_samples": [
+ {
+ "id": 3057420702877509
+ },
+ {
+ "id": 3057420702828357
+ },
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 823,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 823,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1603,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T07:04:16.514521+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 699,
+ "diff": -699
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 699,
+ "ods": 699,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 8896.03,
+ "ods_sum": 8896.03,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 74693.62,
+ "ods_sum": 74693.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6587.39,
+ "ods_sum": 6587.39,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30138.48,
+ "ods_sum": 30138.48,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 157,
+ "ods": 157,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 46522.68,
+ "ods_sum": 46522.68,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 569,
+ "ods": 569,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37392.0,
+ "ods_sum": 37392.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 566,
+ "ods": 566,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37228.0,
+ "ods_sum": 37228.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 823,
+ "ods": 823,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 78730.0,
+ "ods_sum": 78730.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -7.0,
+ "ods_sum": -7.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466243
+ },
+ "generated_at": "2026-01-19T07:04:23.505955+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-08T00:00:00+08:00",
+ "end": "2026-01-15T00:00:00+08:00",
+ "label": "week_2026-01-08",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "start": "2026-01-08T00:00:00+08:00",
+ "end": "2026-01-15T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 767,
+ "records_with_pk": 767,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 374,
+ "missing_samples": [
+ {
+ "id": 3057420699731781
+ },
+ {
+ "id": 3057420699715397
+ },
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 188,
+ "records_with_pk": 188,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 22,
+ "records_with_pk": 22,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 442,
+ "missing_samples": [
+ {
+ "id": 3057420694800197
+ },
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 84,
+ "missing_samples": [
+ {
+ "id": 3057420695603013
+ },
+ {
+ "id": 3057420695390021
+ },
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 15,
+ "records_with_pk": 15,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1198,
+ "records_with_pk": 1198,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 56,
+ "missing_samples": [
+ {
+ "id": 3057420702877509
+ },
+ {
+ "id": 3057420702828357
+ },
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 790,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 790,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1603,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T07:06:38.684815+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 672,
+ "diff": -672
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 672,
+ "ods": 672,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 16159.12,
+ "ods_sum": 16159.12,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 82416.19,
+ "ods_sum": 82416.19,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6098.02,
+ "ods_sum": 6098.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30731.98,
+ "ods_sum": 30731.98,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 188,
+ "ods": 188,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 190.72,
+ "ods_sum": 190.72,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 54584.19,
+ "ods_sum": 54584.19,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 572,
+ "ods": 572,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37214.0,
+ "ods_sum": 37214.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 575,
+ "ods": 575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37262.0,
+ "ods_sum": 37262.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 790,
+ "ods": 790,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 86381.0,
+ "ods_sum": 86381.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -39.0,
+ "ods_sum": -39.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466270
+ },
+ "generated_at": "2026-01-19T07:06:45.078231+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-15T00:00:00+08:00",
+ "end": "2026-01-19T00:00:00+08:00",
+ "label": "week_2026-01-15",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "start": "2026-01-15T00:00:00+08:00",
+ "end": "2026-01-19T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 4,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3056644876634181
+ },
+ {
+ "id": 3053833422211141
+ },
+ {
+ "id": 3053834039789701
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 531,
+ "records_with_pk": 531,
+ "missing": 403,
+ "missing_samples": [
+ {
+ "id": 3057020019230533
+ },
+ {
+ "id": 3057014990243589
+ },
+ {
+ "id": 3057013753005957
+ },
+ {
+ "id": 3057008518383429
+ },
+ {
+ "id": 3056995682600645
+ },
+ {
+ "id": 3056981741766533
+ },
+ {
+ "id": 3056979342640901
+ },
+ {
+ "id": 3056959684708101
+ },
+ {
+ "id": 3056956357510981
+ },
+ {
+ "id": 3056954936903557
+ },
+ {
+ "id": 3056953857476357
+ },
+ {
+ "id": 3056943938029253
+ },
+ {
+ "id": 3056938804184901
+ },
+ {
+ "id": 3056932651288325
+ },
+ {
+ "id": 3056931799222149
+ },
+ {
+ "id": 3056919515154117
+ },
+ {
+ "id": 3056914445453125
+ },
+ {
+ "id": 3056914261952325
+ },
+ {
+ "id": 3056910879508229
+ },
+ {
+ "id": 3056905331394245
+ },
+ {
+ "id": 3056902065473349
+ },
+ {
+ "id": 3056890892535685
+ },
+ {
+ "id": 3056890473858757
+ },
+ {
+ "id": 3056889854609285
+ },
+ {
+ "id": 3056888080123781
+ },
+ {
+ "id": 3056886248654661
+ },
+ {
+ "id": 3056884862027525
+ },
+ {
+ "id": 3056884219201413
+ },
+ {
+ "id": 3056883773802309
+ },
+ {
+ "id": 3056879992358597
+ },
+ {
+ "id": 3056877421627205
+ },
+ {
+ "id": 3056864070403973
+ },
+ {
+ "id": 3056854982575813
+ },
+ {
+ "id": 3056853929461637
+ },
+ {
+ "id": 3056853418247877
+ },
+ {
+ "id": 3056852563330885
+ },
+ {
+ "id": 3056850133452613
+ },
+ {
+ "id": 3056843048617797
+ },
+ {
+ "id": 3056837029676741
+ },
+ {
+ "id": 3056836306863877
+ },
+ {
+ "id": 3056826097174341
+ },
+ {
+ "id": 3056816570730181
+ },
+ {
+ "id": 3056811187324741
+ },
+ {
+ "id": 3056809281292165
+ },
+ {
+ "id": 3056808117716869
+ },
+ {
+ "id": 3056805507417925
+ },
+ {
+ "id": 3056796391950021
+ },
+ {
+ "id": 3056794821478149
+ },
+ {
+ "id": 3056794153469701
+ },
+ {
+ "id": 3056779331307270
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 374,
+ "missing_samples": [
+ {
+ "id": 3057420699731781
+ },
+ {
+ "id": 3057420699715397
+ },
+ {
+ "id": 3057290455943045
+ },
+ {
+ "id": 3057270101657477
+ },
+ {
+ "id": 3057220482795333
+ },
+ {
+ "id": 3057214126622533
+ },
+ {
+ "id": 3057214126606149
+ },
+ {
+ "id": 3057210213598917
+ },
+ {
+ "id": 3057206587131781
+ },
+ {
+ "id": 3057196644271877
+ },
+ {
+ "id": 3057167231223557
+ },
+ {
+ "id": 3057156450273157
+ },
+ {
+ "id": 3057134773798789
+ },
+ {
+ "id": 3057078869640965
+ },
+ {
+ "id": 3057069562889925
+ },
+ {
+ "id": 3057069562906309
+ },
+ {
+ "id": 3057068423825093
+ },
+ {
+ "id": 3057055305549573
+ },
+ {
+ "id": 3057052574369477
+ },
+ {
+ "id": 3057048527652741
+ },
+ {
+ "id": 3057046180382533
+ },
+ {
+ "id": 3057043856557893
+ },
+ {
+ "id": 3057015007364933
+ },
+ {
+ "id": 3057013774141253
+ },
+ {
+ "id": 3057008534603589
+ },
+ {
+ "id": 3056995705063237
+ },
+ {
+ "id": 3056959701501702
+ },
+ {
+ "id": 3056956401584005
+ },
+ {
+ "id": 3056954953582277
+ },
+ {
+ "id": 3056953996527493
+ },
+ {
+ "id": 3056953996494725
+ },
+ {
+ "id": 3056943960491845
+ },
+ {
+ "id": 3056938839656133
+ },
+ {
+ "id": 3056932669343557
+ },
+ {
+ "id": 3056931819980485
+ },
+ {
+ "id": 3056919597270853
+ },
+ {
+ "id": 3056914461148869
+ },
+ {
+ "id": 3056914282186437
+ },
+ {
+ "id": 3056911094941573
+ },
+ {
+ "id": 3056905346926341
+ },
+ {
+ "id": 3056902089623301
+ },
+ {
+ "id": 3056891125925765
+ },
+ {
+ "id": 3056890529072965
+ },
+ {
+ "id": 3056889939511045
+ },
+ {
+ "id": 3056886265759493
+ },
+ {
+ "id": 3056884235601605
+ },
+ {
+ "id": 3056884026673029
+ },
+ {
+ "id": 3056880171370309
+ },
+ {
+ "id": 3056880171403077
+ },
+ {
+ "id": 3056877437257605
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 114,
+ "records_with_pk": 114,
+ "missing": 74,
+ "missing_samples": [
+ {
+ "id": 3056982208005957
+ },
+ {
+ "id": 3056953997674373
+ },
+ {
+ "id": 3056953997002629
+ },
+ {
+ "id": 3056919597958981
+ },
+ {
+ "id": 3056911095482245
+ },
+ {
+ "id": 3056880172549957
+ },
+ {
+ "id": 3056880171992901
+ },
+ {
+ "id": 3056794939098949
+ },
+ {
+ "id": 3056794938640197
+ },
+ {
+ "id": 3056714097248069
+ },
+ {
+ "id": 3056525609060101
+ },
+ {
+ "id": 3055890048599813
+ },
+ {
+ "id": 3055890048124677
+ },
+ {
+ "id": 3055885302908613
+ },
+ {
+ "id": 3055854199539397
+ },
+ {
+ "id": 3055854199097029
+ },
+ {
+ "id": 3055763988301573
+ },
+ {
+ "id": 3055757794346693
+ },
+ {
+ "id": 3055757793871557
+ },
+ {
+ "id": 3055757793412805
+ },
+ {
+ "id": 3055757792888517
+ },
+ {
+ "id": 3055681672464197
+ },
+ {
+ "id": 3055639814948613
+ },
+ {
+ "id": 3055634623186757
+ },
+ {
+ "id": 3055634622744389
+ },
+ {
+ "id": 3055629233555269
+ },
+ {
+ "id": 3055598631093957
+ },
+ {
+ "id": 3055593876768518
+ },
+ {
+ "id": 3055540092061445
+ },
+ {
+ "id": 3055474913773253
+ },
+ {
+ "id": 3055298714142469
+ },
+ {
+ "id": 3055298713454341
+ },
+ {
+ "id": 3055298712979205
+ },
+ {
+ "id": 3055258938002821
+ },
+ {
+ "id": 3055258937462149
+ },
+ {
+ "id": 3055258936774021
+ },
+ {
+ "id": 3055177883585605
+ },
+ {
+ "id": 3055165426519365
+ },
+ {
+ "id": 3054532499983685
+ },
+ {
+ "id": 3054532499492165
+ },
+ {
+ "id": 3054369730432325
+ },
+ {
+ "id": 3054369729891653
+ },
+ {
+ "id": 3054369204112773
+ },
+ {
+ "id": 3054282272590917
+ },
+ {
+ "id": 3054276255534405
+ },
+ {
+ "id": 3054276255059269
+ },
+ {
+ "id": 3054270640983109
+ },
+ {
+ "id": 3054270333111621
+ },
+ {
+ "id": 3054270332259653
+ },
+ {
+ "id": 3054257700490309
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 5,
+ "records_with_pk": 5,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3055854198654661
+ },
+ {
+ "id": 3054102024031429
+ },
+ {
+ "id": 3054102024834245
+ },
+ {
+ "id": 3054102025833669
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 442,
+ "missing_samples": [
+ {
+ "id": 3057420694800197
+ },
+ {
+ "id": 3057333867546437
+ },
+ {
+ "id": 3057290453387141
+ },
+ {
+ "id": 3057270099101573
+ },
+ {
+ "id": 3057249983973189
+ },
+ {
+ "id": 3057220480157509
+ },
+ {
+ "id": 3057214122526533
+ },
+ {
+ "id": 3057210211583685
+ },
+ {
+ "id": 3057206584838021
+ },
+ {
+ "id": 3057196642354949
+ },
+ {
+ "id": 3057177225267013
+ },
+ {
+ "id": 3057167228438277
+ },
+ {
+ "id": 3057156447733637
+ },
+ {
+ "id": 3057134771554181
+ },
+ {
+ "id": 3057078867642117
+ },
+ {
+ "id": 3057073803233157
+ },
+ {
+ "id": 3057069834880709
+ },
+ {
+ "id": 3057069558793925
+ },
+ {
+ "id": 3057068420794053
+ },
+ {
+ "id": 3057055303141125
+ },
+ {
+ "id": 3057052571993797
+ },
+ {
+ "id": 3057048525129605
+ },
+ {
+ "id": 3057046177646405
+ },
+ {
+ "id": 3057043854395205
+ },
+ {
+ "id": 3057020047984389
+ },
+ {
+ "id": 3057015004841797
+ },
+ {
+ "id": 3057013771847493
+ },
+ {
+ "id": 3057008531998533
+ },
+ {
+ "id": 3056995699345221
+ },
+ {
+ "id": 3056982205040453
+ },
+ {
+ "id": 3056979365758789
+ },
+ {
+ "id": 3056959699109637
+ },
+ {
+ "id": 3056956398634885
+ },
+ {
+ "id": 3056954950829765
+ },
+ {
+ "id": 3056953992595333
+ },
+ {
+ "id": 3056943958017861
+ },
+ {
+ "id": 3056938836772549
+ },
+ {
+ "id": 3056932666804038
+ },
+ {
+ "id": 3056931816556229
+ },
+ {
+ "id": 3056919593535301
+ },
+ {
+ "id": 3056914458920645
+ },
+ {
+ "id": 3056914279007941
+ },
+ {
+ "id": 3056911091976069
+ },
+ {
+ "id": 3056905343977221
+ },
+ {
+ "id": 3056902087231237
+ },
+ {
+ "id": 3056891123484549
+ },
+ {
+ "id": 3056890525697861
+ },
+ {
+ "id": 3056889936201477
+ },
+ {
+ "id": 3056888103896837
+ },
+ {
+ "id": 3056886263170821
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053789949006597
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 317,
+ "missing_samples": [
+ {
+ "id": 3057136826615493
+ },
+ {
+ "id": 3057082985907909
+ },
+ {
+ "id": 3057027593995973
+ },
+ {
+ "id": 3057019665631109
+ },
+ {
+ "id": 3057016039475077
+ },
+ {
+ "id": 3056989023389381
+ },
+ {
+ "id": 3056984840111813
+ },
+ {
+ "id": 3056956100855557
+ },
+ {
+ "id": 3056954554402693
+ },
+ {
+ "id": 3056949075396485
+ },
+ {
+ "id": 3056936359184261
+ },
+ {
+ "id": 3056908010424197
+ },
+ {
+ "id": 3056895507990277
+ },
+ {
+ "id": 3056882786387653
+ },
+ {
+ "id": 3056855323772677
+ },
+ {
+ "id": 3056855168075525
+ },
+ {
+ "id": 3056853824636741
+ },
+ {
+ "id": 3056845534496581
+ },
+ {
+ "id": 3056841521432389
+ },
+ {
+ "id": 3056824947361477
+ },
+ {
+ "id": 3056818300438277
+ },
+ {
+ "id": 3056812008179397
+ },
+ {
+ "id": 3056800490489541
+ },
+ {
+ "id": 3056795882260293
+ },
+ {
+ "id": 3056794358728453
+ },
+ {
+ "id": 3056793028560773
+ },
+ {
+ "id": 3056787826083717
+ },
+ {
+ "id": 3056787197740869
+ },
+ {
+ "id": 3056782149093125
+ },
+ {
+ "id": 3056777045722949
+ },
+ {
+ "id": 3056766262232837
+ },
+ {
+ "id": 3056764011890501
+ },
+ {
+ "id": 3056763779942213
+ },
+ {
+ "id": 3056757018216197
+ },
+ {
+ "id": 3056750324418245
+ },
+ {
+ "id": 3056733706979077
+ },
+ {
+ "id": 3056727891347269
+ },
+ {
+ "id": 3056727790389061
+ },
+ {
+ "id": 3056727670687621
+ },
+ {
+ "id": 3056720378021765
+ },
+ {
+ "id": 3056698846840581
+ },
+ {
+ "id": 3056698575456005
+ },
+ {
+ "id": 3056693096744837
+ },
+ {
+ "id": 3056692115998533
+ },
+ {
+ "id": 3056687143307013
+ },
+ {
+ "id": 3056685239076613
+ },
+ {
+ "id": 3056681319761733
+ },
+ {
+ "id": 3056668773107461
+ },
+ {
+ "id": 3056664984225669
+ },
+ {
+ "id": 3056661416232837
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3055176918828421
+ },
+ {
+ "id": 3054195561631109
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3055567606646661
+ },
+ {
+ "id": 3055177241628037
+ },
+ {
+ "id": 3055176919745925
+ },
+ {
+ "id": 3054195913755845
+ },
+ {
+ "id": 3054195562007941
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 84,
+ "missing_samples": [
+ {
+ "id": 3057420695603013
+ },
+ {
+ "id": 3057420695390021
+ },
+ {
+ "id": 3057333869315909
+ },
+ {
+ "id": 3057214123050821
+ },
+ {
+ "id": 3057102065273221
+ },
+ {
+ "id": 3057069836568261
+ },
+ {
+ "id": 3057069559318213
+ },
+ {
+ "id": 3057068421285573
+ },
+ {
+ "id": 3057046178219845
+ },
+ {
+ "id": 3056982205843269
+ },
+ {
+ "id": 3056982205630277
+ },
+ {
+ "id": 3056956399159173
+ },
+ {
+ "id": 3056890526271301
+ },
+ {
+ "id": 3056889936807685
+ },
+ {
+ "id": 3056884949944197
+ },
+ {
+ "id": 3056794935265093
+ },
+ {
+ "id": 3056724792837957
+ },
+ {
+ "id": 3056715342644998
+ },
+ {
+ "id": 3056525075613445
+ },
+ {
+ "id": 3056506564429573
+ },
+ {
+ "id": 3055890044389125
+ },
+ {
+ "id": 3055885299271365
+ },
+ {
+ "id": 3055858040621125
+ },
+ {
+ "id": 3055855807367045
+ },
+ {
+ "id": 3055854195361477
+ },
+ {
+ "id": 3055852808914693
+ },
+ {
+ "id": 3055774607657029
+ },
+ {
+ "id": 3055763984451333
+ },
+ {
+ "id": 3055763984221957
+ },
+ {
+ "id": 3055757788825285
+ },
+ {
+ "id": 3055757043795781
+ },
+ {
+ "id": 3055639809738501
+ },
+ {
+ "id": 3055629230081861
+ },
+ {
+ "id": 3055598627915461
+ },
+ {
+ "id": 3055594099394565
+ },
+ {
+ "id": 3055593873819397
+ },
+ {
+ "id": 3055568805889925
+ },
+ {
+ "id": 3055567467775877
+ },
+ {
+ "id": 3055398349588165
+ },
+ {
+ "id": 3055365207852805
+ },
+ {
+ "id": 3055356105049861
+ },
+ {
+ "id": 3055354347685573
+ },
+ {
+ "id": 3055215423655301
+ },
+ {
+ "id": 3055178207153925
+ },
+ {
+ "id": 3055177880128581
+ },
+ {
+ "id": 3055177166523781
+ },
+ {
+ "id": 3054532494724421
+ },
+ {
+ "id": 3054369725648197
+ },
+ {
+ "id": 3054369201130885
+ },
+ {
+ "id": 3054282268888133
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 13,
+ "records_with_pk": 13,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3055852804769541
+ },
+ {
+ "id": 3055757040240453
+ },
+ {
+ "id": 3055567463532421
+ },
+ {
+ "id": 3055177162837381
+ },
+ {
+ "id": 3054210385137029
+ },
+ {
+ "id": 3054195772001605
+ },
+ {
+ "id": 3053966621347013
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 316,
+ "missing_samples": [
+ {
+ "id": 3057270102296453
+ },
+ {
+ "id": 3057270102296454
+ },
+ {
+ "id": 3057270102296455
+ },
+ {
+ "id": 3057270102296456
+ },
+ {
+ "id": 3057270102296457
+ },
+ {
+ "id": 3057156450977669
+ },
+ {
+ "id": 3057134774388613
+ },
+ {
+ "id": 3057078870181637
+ },
+ {
+ "id": 3057048528390021
+ },
+ {
+ "id": 3057043857180485
+ },
+ {
+ "id": 3057015007889221
+ },
+ {
+ "id": 3057013774731077
+ },
+ {
+ "id": 3057008535111493
+ },
+ {
+ "id": 3056995705620293
+ },
+ {
+ "id": 3056959702091525
+ },
+ {
+ "id": 3056954954352325
+ },
+ {
+ "id": 3056943961081669
+ },
+ {
+ "id": 3056943961065285
+ },
+ {
+ "id": 3056938840458949
+ },
+ {
+ "id": 3056938840458950
+ },
+ {
+ "id": 3056938840458951
+ },
+ {
+ "id": 3056932669966149
+ },
+ {
+ "id": 3056931820734149
+ },
+ {
+ "id": 3056914461689541
+ },
+ {
+ "id": 3056914283038405
+ },
+ {
+ "id": 3056905348155141
+ },
+ {
+ "id": 3056902090180357
+ },
+ {
+ "id": 3056891126744965
+ },
+ {
+ "id": 3056891126761349
+ },
+ {
+ "id": 3056886266480389
+ },
+ {
+ "id": 3056884237829829
+ },
+ {
+ "id": 3056884237846213
+ },
+ {
+ "id": 3056877437814661
+ },
+ {
+ "id": 3056864357205765
+ },
+ {
+ "id": 3056864357205766
+ },
+ {
+ "id": 3056855001810693
+ },
+ {
+ "id": 3056853945599685
+ },
+ {
+ "id": 3056852579862405
+ },
+ {
+ "id": 3056837046994693
+ },
+ {
+ "id": 3056836324624197
+ },
+ {
+ "id": 3056826114819973
+ },
+ {
+ "id": 3056816588408581
+ },
+ {
+ "id": 3056816588424965
+ },
+ {
+ "id": 3056809300887237
+ },
+ {
+ "id": 3056805524244293
+ },
+ {
+ "id": 3056779347511173
+ },
+ {
+ "id": 3056779174823813
+ },
+ {
+ "id": 3056779174823814
+ },
+ {
+ "id": 3056774520473477
+ },
+ {
+ "id": 3056774520473478
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 688,
+ "records_with_pk": 688,
+ "missing": 496,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3057033942206213
+ },
+ {
+ "sitegoodsstockid": 3057020049737477
+ },
+ {
+ "sitegoodsstockid": 3057014058862405
+ },
+ {
+ "sitegoodsstockid": 3057009674340165
+ },
+ {
+ "sitegoodsstockid": 3057005598492421
+ },
+ {
+ "sitegoodsstockid": 3057004882659141
+ },
+ {
+ "sitegoodsstockid": 3056997868406661
+ },
+ {
+ "sitegoodsstockid": 3056979367380805
+ },
+ {
+ "sitegoodsstockid": 3056967704184645
+ },
+ {
+ "sitegoodsstockid": 3056961133971333
+ },
+ {
+ "sitegoodsstockid": 3056949671331589
+ },
+ {
+ "sitegoodsstockid": 3056911529903941
+ },
+ {
+ "sitegoodsstockid": 3056911312242565
+ },
+ {
+ "sitegoodsstockid": 3056910612252485
+ },
+ {
+ "sitegoodsstockid": 3056910612776773
+ },
+ {
+ "sitegoodsstockid": 3056910613432133
+ },
+ {
+ "sitegoodsstockid": 3056890725517061
+ },
+ {
+ "sitegoodsstockid": 3056888105731845
+ },
+ {
+ "sitegoodsstockid": 3056888105895685
+ },
+ {
+ "sitegoodsstockid": 3056887950313349
+ },
+ {
+ "sitegoodsstockid": 3056884951287685
+ },
+ {
+ "sitegoodsstockid": 3056881394812805
+ },
+ {
+ "sitegoodsstockid": 3056868923803461
+ },
+ {
+ "sitegoodsstockid": 3056867086780165
+ },
+ {
+ "sitegoodsstockid": 3056867087369989
+ },
+ {
+ "sitegoodsstockid": 3056867086010117
+ },
+ {
+ "sitegoodsstockid": 3056866232600261
+ },
+ {
+ "sitegoodsstockid": 3056850159027973
+ },
+ {
+ "sitegoodsstockid": 3056847869511429
+ },
+ {
+ "sitegoodsstockid": 3056847870068485
+ },
+ {
+ "sitegoodsstockid": 3056837533452037
+ },
+ {
+ "sitegoodsstockid": 3056837532845829
+ },
+ {
+ "sitegoodsstockid": 3056811220617093
+ },
+ {
+ "sitegoodsstockid": 3056811220453253
+ },
+ {
+ "sitegoodsstockid": 3056808611137349
+ },
+ {
+ "sitegoodsstockid": 3056805312218885
+ },
+ {
+ "sitegoodsstockid": 3056805313136389
+ },
+ {
+ "sitegoodsstockid": 3056805312694021
+ },
+ {
+ "sitegoodsstockid": 3056804676077445
+ },
+ {
+ "sitegoodsstockid": 3056804675569541
+ },
+ {
+ "sitegoodsstockid": 3056797925508869
+ },
+ {
+ "sitegoodsstockid": 3056797925984005
+ },
+ {
+ "sitegoodsstockid": 3056797925017349
+ },
+ {
+ "sitegoodsstockid": 3056796414658245
+ },
+ {
+ "sitegoodsstockid": 3056796414822085
+ },
+ {
+ "sitegoodsstockid": 3056794178750341
+ },
+ {
+ "sitegoodsstockid": 3056794002392837
+ },
+ {
+ "sitegoodsstockid": 3056776751368005
+ },
+ {
+ "sitegoodsstockid": 3056753449502597
+ },
+ {
+ "sitegoodsstockid": 3056753449994117
+ }
+ ],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053572251340677
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 56,
+ "missing_samples": [
+ {
+ "id": 3057420702877509
+ },
+ {
+ "id": 3057420702828357
+ },
+ {
+ "id": 3057290456647557
+ },
+ {
+ "id": 3057196644845317
+ },
+ {
+ "id": 3057167232796421
+ },
+ {
+ "id": 3057069563741893
+ },
+ {
+ "id": 3057068425086661
+ },
+ {
+ "id": 3057052575090373
+ },
+ {
+ "id": 3057046180955973
+ },
+ {
+ "id": 3056956402583429
+ },
+ {
+ "id": 3056953998591877
+ },
+ {
+ "id": 3056953998542725
+ },
+ {
+ "id": 3056919599646533
+ },
+ {
+ "id": 3056911096579973
+ },
+ {
+ "id": 3056890529875781
+ },
+ {
+ "id": 3056889940182789
+ },
+ {
+ "id": 3056880173565765
+ },
+ {
+ "id": 3056880173631301
+ },
+ {
+ "id": 3056853684012741
+ },
+ {
+ "id": 3056715346052869
+ },
+ {
+ "id": 3056714098034501
+ },
+ {
+ "id": 3056525609846533
+ },
+ {
+ "id": 3056506571310853
+ },
+ {
+ "id": 3055885303826117
+ },
+ {
+ "id": 3055854200489669
+ },
+ {
+ "id": 3055763989219077
+ },
+ {
+ "id": 3055757795428037
+ },
+ {
+ "id": 3055681673316165
+ },
+ {
+ "id": 3055679770003205
+ },
+ {
+ "id": 3055639815849733
+ },
+ {
+ "id": 3055639815898885
+ },
+ {
+ "id": 3055634624120645
+ },
+ {
+ "id": 3055629234423621
+ },
+ {
+ "id": 3055540093290245
+ },
+ {
+ "id": 3055225050172485
+ },
+ {
+ "id": 3055215426702725
+ },
+ {
+ "id": 3055177884388421
+ },
+ {
+ "id": 3055173781015941
+ },
+ {
+ "id": 3054532501458245
+ },
+ {
+ "id": 3054282273492037
+ },
+ {
+ "id": 3054276256615749
+ },
+ {
+ "id": 3054270334012741
+ },
+ {
+ "id": 3054257701309509
+ },
+ {
+ "id": 3054221961874629
+ },
+ {
+ "id": 3054210804370629
+ },
+ {
+ "id": 3054205940256133
+ },
+ {
+ "id": 3054189600066886
+ },
+ {
+ "id": 3054188845255877
+ },
+ {
+ "id": 3054140558675141
+ },
+ {
+ "id": 3054140558920901
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3053571772270213
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 554,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 554,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 2587,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T07:08:56.962352+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17227,
+ "diff": -17226
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 120,
+ "diff": -120
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 64,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 552,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 406040.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22075,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 120,
+ "ods": 120,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 3910.16,
+ "ods_sum": 3910.16,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 4855.76,
+ "ods_sum": 4855.76,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 17482.25,
+ "ods_sum": 17482.25,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 1857.77,
+ "ods_sum": 1857.77,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 9785.64,
+ "ods_sum": 9785.64,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17227,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 305990.47,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2654,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 40,
+ "ods": 40,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 14270.54,
+ "ods_sum": 14270.54,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4681,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 88,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4502,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 87,
+ "ods": 87,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 4940.0,
+ "ods_sum": 4940.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 4855.76,
+ "ods_sum": 4855.76,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10545,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 80,
+ "ods": 80,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 4584.0,
+ "ods_sum": 4584.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16086,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 433,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 136,
+ "ods": 136,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 32589.0,
+ "ods_sum": 32589.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 42,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 466822
+ },
+ "generated_at": "2026-01-19T07:09:03.345493+08:00"
+ }
+ ],
+ "total_missing": 34614,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T07:09:03.345546+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_history_20260119_082915.json b/etl_billiards/reports/data_integrity_history_20260119_082915.json
new file mode 100644
index 0000000..da06d04
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_history_20260119_082915.json
@@ -0,0 +1,24517 @@
+{
+ "mode": "history",
+ "start": "2024-07-19T00:00:00+08:00",
+ "end": "2026-01-19T00:00:00+08:00",
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2024-07-19T00:00:00+08:00",
+ "end": "2024-08-01T00:00:00+08:00",
+ "label": "month_2024-07-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2024-07-19T00:00:00+08:00",
+ "end": "2024-08-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 13,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T07:36:45.707440+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17601,
+ "diff": -17600
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 67,
+ "diff": -3
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 554,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 943,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 411958.35,
+ "diff": -5918.049999999988
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17601,
+ "diff": -374
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 311771.56,
+ "diff": -5781.090000000026
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4755,
+ "diff": -74
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10861,
+ "diff": -316
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16403,
+ "diff": -317
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 43,
+ "diff": -1
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 464365
+ },
+ "generated_at": "2026-01-19T07:36:56.167144+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2024-08-01T00:00:00+08:00",
+ "end": "2024-09-01T00:00:00+08:00",
+ "label": "month_2024-08-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2024-08-01T00:00:00+08:00",
+ "end": "2024-09-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T07:39:11.088512+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17601,
+ "diff": -17600
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 67,
+ "diff": -3
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 554,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 943,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 411958.35,
+ "diff": -5918.049999999988
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17601,
+ "diff": -374
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 311771.56,
+ "diff": -5781.090000000026
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4755,
+ "diff": -74
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10861,
+ "diff": -316
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16403,
+ "diff": -317
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 43,
+ "diff": -1
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 464365
+ },
+ "generated_at": "2026-01-19T07:39:21.514836+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2024-09-01T00:00:00+08:00",
+ "end": "2024-10-01T00:00:00+08:00",
+ "label": "month_2024-09-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2024-09-01T00:00:00+08:00",
+ "end": "2024-10-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T07:41:37.162810+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17601,
+ "diff": -17600
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 67,
+ "diff": -3
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 554,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 943,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 411958.35,
+ "diff": -5918.049999999988
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17601,
+ "diff": -374
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 311771.56,
+ "diff": -5781.090000000026
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4755,
+ "diff": -74
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10861,
+ "diff": -316
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16403,
+ "diff": -317
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 43,
+ "diff": -1
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 464365
+ },
+ "generated_at": "2026-01-19T07:41:47.077781+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2024-10-01T00:00:00+08:00",
+ "end": "2024-11-01T00:00:00+08:00",
+ "label": "month_2024-10-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2024-10-01T00:00:00+08:00",
+ "end": "2024-11-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T07:44:02.517955+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17601,
+ "diff": -17600
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 67,
+ "diff": -3
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 554,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 943,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 411958.35,
+ "diff": -5918.049999999988
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17601,
+ "diff": -374
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 311771.56,
+ "diff": -5781.090000000026
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4755,
+ "diff": -74
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10861,
+ "diff": -316
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16403,
+ "diff": -317
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 43,
+ "diff": -1
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 464365
+ },
+ "generated_at": "2026-01-19T07:44:13.078380+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2024-11-01T00:00:00+08:00",
+ "end": "2024-12-01T00:00:00+08:00",
+ "label": "month_2024-11-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2024-11-01T00:00:00+08:00",
+ "end": "2024-12-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T07:46:29.655689+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17601,
+ "diff": -17600
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 67,
+ "diff": -3
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 554,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 943,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 411958.35,
+ "diff": -5918.049999999988
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17601,
+ "diff": -374
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 311771.56,
+ "diff": -5781.090000000026
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4755,
+ "diff": -74
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10861,
+ "diff": -316
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16403,
+ "diff": -317
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 43,
+ "diff": -1
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 464365
+ },
+ "generated_at": "2026-01-19T07:46:40.111494+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2024-12-01T00:00:00+08:00",
+ "end": "2025-01-01T00:00:00+08:00",
+ "label": "month_2024-12-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2024-12-01T00:00:00+08:00",
+ "end": "2025-01-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T07:48:52.417950+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17601,
+ "diff": -17600
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 67,
+ "diff": -3
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 554,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 943,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 411958.35,
+ "diff": -5918.049999999988
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17601,
+ "diff": -374
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 311771.56,
+ "diff": -5781.090000000026
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4755,
+ "diff": -74
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10861,
+ "diff": -316
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16403,
+ "diff": -317
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 43,
+ "diff": -1
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 464365
+ },
+ "generated_at": "2026-01-19T07:49:02.521291+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-01-01T00:00:00+08:00",
+ "end": "2025-02-01T00:00:00+08:00",
+ "label": "month_2025-01-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-01-01T00:00:00+08:00",
+ "end": "2025-02-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T07:51:15.362870+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17601,
+ "diff": -17600
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 67,
+ "diff": -3
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 554,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 943,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 411958.35,
+ "diff": -5918.049999999988
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17601,
+ "diff": -374
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 311771.56,
+ "diff": -5781.090000000026
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4755,
+ "diff": -74
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10861,
+ "diff": -316
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16403,
+ "diff": -317
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 43,
+ "diff": -1
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 464365
+ },
+ "generated_at": "2026-01-19T07:51:26.056095+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-02-01T00:00:00+08:00",
+ "end": "2025-03-01T00:00:00+08:00",
+ "label": "month_2025-02-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-02-01T00:00:00+08:00",
+ "end": "2025-03-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 28,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T07:53:40.905795+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17601,
+ "diff": -17600
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 67,
+ "diff": -3
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 554,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 943,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 411958.35,
+ "diff": -5918.049999999988
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17601,
+ "diff": -374
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 311771.56,
+ "diff": -5781.090000000026
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4755,
+ "diff": -74
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10861,
+ "diff": -316
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16403,
+ "diff": -317
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 43,
+ "diff": -1
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 464365
+ },
+ "generated_at": "2026-01-19T07:53:51.454575+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-03-01T00:00:00+08:00",
+ "end": "2025-04-01T00:00:00+08:00",
+ "label": "month_2025-03-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-03-01T00:00:00+08:00",
+ "end": "2025-04-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T07:56:05.319847+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17601,
+ "diff": -17600
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 67,
+ "diff": -3
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 554,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 943,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 411958.35,
+ "diff": -5918.049999999988
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17601,
+ "diff": -374
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 311771.56,
+ "diff": -5781.090000000026
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4755,
+ "diff": -74
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10861,
+ "diff": -316
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16403,
+ "diff": -317
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 43,
+ "diff": -1
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 464365
+ },
+ "generated_at": "2026-01-19T07:56:15.821734+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-04-01T00:00:00+08:00",
+ "end": "2025-05-01T00:00:00+08:00",
+ "label": "month_2025-04-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-04-01T00:00:00+08:00",
+ "end": "2025-05-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T07:58:29.552232+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17601,
+ "diff": -17600
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 67,
+ "diff": -3
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 554,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 943,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 411958.35,
+ "diff": -5918.049999999988
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17601,
+ "diff": -374
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 311771.56,
+ "diff": -5781.090000000026
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4755,
+ "diff": -74
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10861,
+ "diff": -316
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16403,
+ "diff": -317
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 43,
+ "diff": -1
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 464365
+ },
+ "generated_at": "2026-01-19T07:58:39.602961+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-05-01T00:00:00+08:00",
+ "end": "2025-06-01T00:00:00+08:00",
+ "label": "month_2025-05-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-05-01T00:00:00+08:00",
+ "end": "2025-06-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T08:00:54.482073+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17601,
+ "diff": -17600
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 67,
+ "diff": -3
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 554,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 943,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 411958.35,
+ "diff": -5918.049999999988
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17601,
+ "diff": -374
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 311771.56,
+ "diff": -5781.090000000026
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4755,
+ "diff": -74
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10861,
+ "diff": -316
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16403,
+ "diff": -317
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 43,
+ "diff": -1
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 464365
+ },
+ "generated_at": "2026-01-19T08:01:04.790663+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-06-01T00:00:00+08:00",
+ "end": "2025-07-01T00:00:00+08:00",
+ "label": "month_2025-06-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-06-01T00:00:00+08:00",
+ "end": "2025-07-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8332,
+ "records_with_pk": 8332,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1674,
+ "records_with_pk": 1674,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T08:03:17.107093+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17601,
+ "diff": -17600
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 67,
+ "diff": -3
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 554,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 943,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 411958.35,
+ "diff": -5918.049999999988
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17601,
+ "diff": -374
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 311771.56,
+ "diff": -5781.090000000026
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4755,
+ "diff": -74
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10861,
+ "diff": -316
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16403,
+ "diff": -317
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 43,
+ "diff": -1
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 464365
+ },
+ "generated_at": "2026-01-19T08:03:27.049723+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-07-01T00:00:00+08:00",
+ "end": "2025-08-01T00:00:00+08:00",
+ "label": "month_2025-07-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-07-01T00:00:00+08:00",
+ "end": "2025-08-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1776,
+ "records_with_pk": 1776,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9969,
+ "records_with_pk": 9969,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 351,
+ "records_with_pk": 351,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11946,
+ "records_with_pk": 11946,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 44,
+ "records_with_pk": 44,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8205,
+ "records_with_pk": 8205,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 2551,
+ "records_with_pk": 2551,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1664,
+ "records_with_pk": 1664,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 1845,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 10,
+ "skipped_missing_pk": 1845,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T08:06:53.838853+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17601,
+ "diff": -17600
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1246,
+ "diff": -1246
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 67,
+ "diff": -3
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 23,
+ "ods": 23,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 466,
+ "ods": 466,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 554,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 943,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 411958.35,
+ "diff": -5918.049999999988
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 751,
+ "ods": 751,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 149,
+ "ods": 149,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 14,
+ "ods": 14,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1246,
+ "ods": 1246,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 18607.65,
+ "ods_sum": 18607.65,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 68759.8,
+ "ods_sum": 68759.8,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 133842.45,
+ "ods_sum": 133842.45,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 10234.83,
+ "ods_sum": 10234.83,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 46883.63,
+ "ods_sum": 46883.63,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17601,
+ "diff": -374
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 311771.56,
+ "diff": -5781.090000000026
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1575,
+ "ods": 1575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 14.25,
+ "ods_sum": 14.25,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 31186.8,
+ "ods_sum": 31186.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 29160.8,
+ "ods_sum": 29160.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 351,
+ "ods": 351,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1261.59,
+ "ods_sum": 1261.59,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 113232.99,
+ "ods_sum": 113232.99,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4755,
+ "diff": -74
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10861,
+ "diff": -316
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1007,
+ "ods": 1007,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 72348.0,
+ "ods_sum": 72348.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16403,
+ "diff": -317
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1833,
+ "ods": 1833,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 178060.0,
+ "ods_sum": 178060.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 43,
+ "diff": -1
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 463119
+ },
+ "generated_at": "2026-01-19T08:07:03.991335+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-08-01T00:00:00+08:00",
+ "end": "2025-09-01T00:00:00+08:00",
+ "label": "month_2025-08-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-08-01T00:00:00+08:00",
+ "end": "2025-09-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4602,
+ "records_with_pk": 4602,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 24,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9833,
+ "records_with_pk": 9833,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 859,
+ "records_with_pk": 859,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11770,
+ "records_with_pk": 11770,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2445,
+ "records_with_pk": 2445,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 94,
+ "records_with_pk": 94,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8205,
+ "records_with_pk": 8205,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5196,
+ "records_with_pk": 5196,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 26,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1664,
+ "records_with_pk": 1664,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4763,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 24,
+ "skipped_missing_pk": 4763,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T08:09:53.937608+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17601,
+ "diff": -17600
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3587,
+ "diff": -3587
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 67,
+ "diff": -3
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 18,
+ "ods": 18,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 554,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 943,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 411958.35,
+ "diff": -5918.049999999988
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 51,
+ "ods": 51,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3587,
+ "ods": 3587,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 54919.33,
+ "ods_sum": 54919.33,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 186359.95,
+ "ods_sum": 186359.95,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 383097.96,
+ "ods_sum": 383097.96,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 44840.88,
+ "ods_sum": 44840.88,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 145513.13,
+ "ods_sum": 145513.13,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17601,
+ "diff": -374
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 311771.56,
+ "diff": -5781.090000000026
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4305,
+ "ods": 4305,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 47.45,
+ "ods_sum": 47.45,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 87523.4,
+ "ods_sum": 87523.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 83759.0,
+ "ods_sum": 83759.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 859,
+ "ods": 859,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1874.75,
+ "ods_sum": 1874.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 268501.57,
+ "ods_sum": 268501.57,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4755,
+ "diff": -74
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10861,
+ "diff": -316
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2850,
+ "ods": 2850,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 189960.0,
+ "ods_sum": 189960.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16403,
+ "diff": -317
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4763,
+ "ods": 4763,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 381598.0,
+ "ods_sum": 381598.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 43,
+ "diff": -1
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 460778
+ },
+ "generated_at": "2026-01-19T08:10:04.668039+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-09-01T00:00:00+08:00",
+ "end": "2025-10-01T00:00:00+08:00",
+ "label": "month_2025-09-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-09-01T00:00:00+08:00",
+ "end": "2025-10-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3720,
+ "records_with_pk": 3720,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 19,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9833,
+ "records_with_pk": 9833,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 654,
+ "records_with_pk": 654,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11770,
+ "records_with_pk": 11770,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2445,
+ "records_with_pk": 2445,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 54,
+ "records_with_pk": 54,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8205,
+ "records_with_pk": 8205,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 4816,
+ "records_with_pk": 4816,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 25,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1664,
+ "records_with_pk": 1664,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 3810,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 20,
+ "skipped_missing_pk": 3810,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T08:13:03.304940+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17601,
+ "diff": -17600
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1264,
+ "diff": -1264
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 67,
+ "diff": -3
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 11,
+ "ods": 11,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 554,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 943,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 411958.35,
+ "diff": -5918.049999999988
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1264,
+ "ods": 1264,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 11020.51,
+ "ods_sum": 11020.51,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 73893.75,
+ "ods_sum": 73893.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 137203.92,
+ "ods_sum": 137203.92,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 15685.02,
+ "ods_sum": 15685.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 52340.33,
+ "ods_sum": 52340.33,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17601,
+ "diff": -374
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 311771.56,
+ "diff": -5781.090000000026
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1449,
+ "ods": 1449,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1.41,
+ "ods_sum": 1.41,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 24706.9,
+ "ods_sum": 24706.9,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 23874.4,
+ "ods_sum": 23874.4,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 240,
+ "ods": 654,
+ "diff": -414
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 391.51,
+ "ods_sum": 781.44,
+ "diff": -389.93000000000006
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 69566.69,
+ "ods_sum": 192541.75,
+ "diff": -122975.06
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4755,
+ "diff": -74
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1173,
+ "ods": 1173,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 75824.0,
+ "ods_sum": 75824.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 73843.08,
+ "ods_sum": 73843.08,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10861,
+ "diff": -316
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 184722.0,
+ "ods_sum": 184722.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16403,
+ "diff": -317
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1544,
+ "ods": 1544,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 108880.0,
+ "ods_sum": 108880.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -1011.0,
+ "ods_sum": -1011.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 43,
+ "diff": -1
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 462687
+ },
+ "generated_at": "2026-01-19T08:13:13.481155+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-10-01T00:00:00+08:00",
+ "end": "2025-11-01T00:00:00+08:00",
+ "label": "month_2025-10-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-10-01T00:00:00+08:00",
+ "end": "2025-11-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1435,
+ "records_with_pk": 1435,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 8,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9833,
+ "records_with_pk": 9833,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 259,
+ "records_with_pk": 259,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 6,
+ "records_with_pk": 6,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11770,
+ "records_with_pk": 11770,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2445,
+ "records_with_pk": 2445,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 21,
+ "records_with_pk": 21,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8205,
+ "records_with_pk": 8205,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 2019,
+ "records_with_pk": 2019,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 11,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1664,
+ "records_with_pk": 1664,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 1462,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 8,
+ "skipped_missing_pk": 1462,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T08:15:46.480592+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17601,
+ "diff": -17600
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2824,
+ "diff": -2824
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 67,
+ "diff": -3
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 554,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 943,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 411958.35,
+ "diff": -5918.049999999988
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 21,
+ "ods": 21,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2824,
+ "ods": 2824,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 40394.85,
+ "ods_sum": 40394.85,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 310789.49,
+ "ods_sum": 310789.49,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33315.15,
+ "ods_sum": 33315.15,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 116393.37,
+ "ods_sum": 116393.37,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17601,
+ "diff": -374
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 311771.56,
+ "diff": -5781.090000000026
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3475,
+ "ods": 3475,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1319.49,
+ "ods_sum": 1319.49,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 66216.8,
+ "ods_sum": 66216.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 64234.0,
+ "ods_sum": 64234.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 573,
+ "ods": 573,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 2143.56,
+ "ods_sum": 2143.56,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 172536.78,
+ "ods_sum": 172536.78,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4755,
+ "diff": -74
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2490,
+ "ods": 2490,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160988.0,
+ "ods_sum": 160988.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10861,
+ "diff": -316
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2489,
+ "ods": 2489,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160076.0,
+ "ods_sum": 160076.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16403,
+ "diff": -317
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3616,
+ "ods": 3616,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 286088.0,
+ "ods_sum": 286088.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -47020.0,
+ "ods_sum": -47020.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 43,
+ "diff": -1
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 461541
+ },
+ "generated_at": "2026-01-19T08:15:56.711886+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-11-01T00:00:00+08:00",
+ "end": "2025-12-01T00:00:00+08:00",
+ "label": "month_2025-11-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-11-01T00:00:00+08:00",
+ "end": "2025-12-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3874,
+ "records_with_pk": 3874,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 20,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9833,
+ "records_with_pk": 9833,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 884,
+ "records_with_pk": 884,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 12,
+ "records_with_pk": 12,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11770,
+ "records_with_pk": 11770,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2445,
+ "records_with_pk": 2445,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 80,
+ "records_with_pk": 80,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8205,
+ "records_with_pk": 8205,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5516,
+ "records_with_pk": 5516,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 28,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1664,
+ "records_with_pk": 1664,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 3999,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 20,
+ "skipped_missing_pk": 3999,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T08:18:42.768538+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17601,
+ "diff": -17600
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3336,
+ "diff": -3336
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 67,
+ "diff": -3
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 12,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 40,
+ "ods": 40,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 554,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 943,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 411958.35,
+ "diff": -5918.049999999988
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 80,
+ "ods": 80,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3336,
+ "ods": 3336,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71642.8,
+ "ods_sum": 71642.8,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 394705.62,
+ "ods_sum": 394705.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33307.25,
+ "ods_sum": 33307.25,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 156623.79,
+ "ods_sum": 156623.79,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17601,
+ "diff": -374
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 311771.56,
+ "diff": -5781.090000000026
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4134,
+ "ods": 4134,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1544.05,
+ "ods_sum": 1544.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 98139.8,
+ "ods_sum": 98139.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 87610.8,
+ "ods_sum": 87610.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 884,
+ "ods": 884,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1437.75,
+ "ods_sum": 1437.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 281102.62,
+ "ods_sum": 281102.62,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4755,
+ "diff": -74
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2838,
+ "ods": 2838,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 172860.0,
+ "ods_sum": 172860.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10861,
+ "diff": -316
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2843,
+ "ods": 2843,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 173800.0,
+ "ods_sum": 173800.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16403,
+ "diff": -317
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3999,
+ "ods": 3999,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 457185.0,
+ "ods_sum": 457185.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 17,
+ "ods": 17,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -16567.0,
+ "ods_sum": -16567.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 43,
+ "diff": -1
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 461029
+ },
+ "generated_at": "2026-01-19T08:18:53.200611+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-12-01T00:00:00+08:00",
+ "end": "2026-01-01T00:00:00+08:00",
+ "label": "month_2025-12-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "start": "2025-12-01T00:00:00+08:00",
+ "end": "2026-01-01T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4011,
+ "records_with_pk": 4011,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 21,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9833,
+ "records_with_pk": 9833,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 975,
+ "records_with_pk": 975,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 35,
+ "records_with_pk": 35,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11770,
+ "records_with_pk": 11770,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2445,
+ "records_with_pk": 2445,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 70,
+ "records_with_pk": 70,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8205,
+ "records_with_pk": 8205,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5464,
+ "records_with_pk": 5464,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 28,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1664,
+ "records_with_pk": 1664,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4118,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 21,
+ "skipped_missing_pk": 4118,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T08:21:41.547645+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17601,
+ "diff": -17600
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3479,
+ "diff": -3479
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 67,
+ "diff": -3
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 554,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 943,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 411958.35,
+ "diff": -5918.049999999988
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 12,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3479,
+ "ods": 3479,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71445.57,
+ "ods_sum": 71445.57,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 432220.76,
+ "ods_sum": 432220.76,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 34544.63,
+ "ods_sum": 34544.63,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 189974.44,
+ "ods_sum": 189974.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17601,
+ "diff": -374
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 311771.56,
+ "diff": -5781.090000000026
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2625,
+ "ods": 2625,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 190.1,
+ "ods_sum": 190.1,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 65814.4,
+ "ods_sum": 65814.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 63275.9,
+ "ods_sum": 63275.9,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 975,
+ "ods": 975,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 3190.05,
+ "ods_sum": 3190.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 322183.69,
+ "ods_sum": 322183.69,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4755,
+ "diff": -74
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2816,
+ "ods": 2816,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 179652.0,
+ "ods_sum": 179652.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10861,
+ "diff": -316
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2827,
+ "ods": 2827,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 180232.0,
+ "ods_sum": 180232.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16403,
+ "diff": -317
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4118,
+ "ods": 4118,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 472999.0,
+ "ods_sum": 472999.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -4314.0,
+ "ods_sum": -4314.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 43,
+ "diff": -1
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 460886
+ },
+ "generated_at": "2026-01-19T08:21:51.631109+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-01T00:00:00+08:00",
+ "end": "2026-01-08T00:00:00+08:00",
+ "label": "week_2026-01-01",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "start": "2026-01-01T00:00:00+08:00",
+ "end": "2026-01-08T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 800,
+ "records_with_pk": 800,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9833,
+ "records_with_pk": 9833,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 157,
+ "records_with_pk": 157,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2,
+ "records_with_pk": 2,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11770,
+ "records_with_pk": 11770,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2445,
+ "records_with_pk": 2445,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17,
+ "records_with_pk": 17,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8205,
+ "records_with_pk": 8205,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 867,
+ "records_with_pk": 867,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1664,
+ "records_with_pk": 1664,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 823,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 823,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T08:24:10.237193+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17601,
+ "diff": -17600
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 699,
+ "diff": -699
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 67,
+ "diff": -3
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 554,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 943,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 411958.35,
+ "diff": -5918.049999999988
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 699,
+ "ods": 699,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 8896.03,
+ "ods_sum": 8896.03,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 74693.62,
+ "ods_sum": 74693.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6587.39,
+ "ods_sum": 6587.39,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30138.48,
+ "ods_sum": 30138.48,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17601,
+ "diff": -374
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 311771.56,
+ "diff": -5781.090000000026
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 157,
+ "ods": 157,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 46522.68,
+ "ods_sum": 46522.68,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4755,
+ "diff": -74
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 569,
+ "ods": 569,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37392.0,
+ "ods_sum": 37392.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10861,
+ "diff": -316
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 566,
+ "ods": 566,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37228.0,
+ "ods_sum": 37228.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16403,
+ "diff": -317
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 823,
+ "ods": 823,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 78730.0,
+ "ods_sum": 78730.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -7.0,
+ "ods_sum": -7.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 43,
+ "diff": -1
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 463666
+ },
+ "generated_at": "2026-01-19T08:24:20.536791+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-08T00:00:00+08:00",
+ "end": "2026-01-15T00:00:00+08:00",
+ "label": "week_2026-01-08",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "start": "2026-01-08T00:00:00+08:00",
+ "end": "2026-01-15T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 767,
+ "records_with_pk": 767,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9833,
+ "records_with_pk": 9833,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 188,
+ "records_with_pk": 188,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 22,
+ "records_with_pk": 22,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11770,
+ "records_with_pk": 11770,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2445,
+ "records_with_pk": 2445,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 15,
+ "records_with_pk": 15,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8205,
+ "records_with_pk": 8205,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1198,
+ "records_with_pk": 1198,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1664,
+ "records_with_pk": 1664,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 790,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 790,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T08:26:37.733093+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17601,
+ "diff": -17600
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 672,
+ "diff": -672
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 67,
+ "diff": -3
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 554,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 943,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 411958.35,
+ "diff": -5918.049999999988
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 672,
+ "ods": 672,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 16159.12,
+ "ods_sum": 16159.12,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 82416.19,
+ "ods_sum": 82416.19,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6098.02,
+ "ods_sum": 6098.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30731.98,
+ "ods_sum": 30731.98,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17601,
+ "diff": -374
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 311771.56,
+ "diff": -5781.090000000026
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 188,
+ "ods": 188,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 190.72,
+ "ods_sum": 190.72,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 54584.19,
+ "ods_sum": 54584.19,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4755,
+ "diff": -74
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 572,
+ "ods": 572,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37214.0,
+ "ods_sum": 37214.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10861,
+ "diff": -316
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 575,
+ "ods": 575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37262.0,
+ "ods_sum": 37262.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16403,
+ "diff": -317
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 790,
+ "ods": 790,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 86381.0,
+ "ods_sum": 86381.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -39.0,
+ "ods_sum": -39.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 43,
+ "diff": -1
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 463693
+ },
+ "generated_at": "2026-01-19T08:26:47.627441+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-15T00:00:00+08:00",
+ "end": "2026-01-19T00:00:00+08:00",
+ "label": "week_2026-01-15",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "start": "2026-01-15T00:00:00+08:00",
+ "end": "2026-01-19T00:00:00+08:00",
+ "cutoff": null,
+ "window_days": 4,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 67,
+ "records_with_pk": 67,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 531,
+ "records_with_pk": 531,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9833,
+ "records_with_pk": 9833,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 114,
+ "records_with_pk": 114,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 5,
+ "records_with_pk": 5,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11770,
+ "records_with_pk": 11770,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16403,
+ "records_with_pk": 16403,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2445,
+ "records_with_pk": 2445,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 13,
+ "records_with_pk": 13,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8205,
+ "records_with_pk": 8205,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 688,
+ "records_with_pk": 688,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1664,
+ "records_with_pk": 1664,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 554,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 554,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T08:29:05.648926+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17601,
+ "diff": -17600
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 472,
+ "diff": -472
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 64,
+ "ods": 67,
+ "diff": -3
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3,
+ "diff": -3
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 3,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 552,
+ "ods": 554,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 938,
+ "ods": 943,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 406040.3,
+ "ods_sum": 411958.35,
+ "diff": -5918.049999999988
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 7,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 169,
+ "ods": 170,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22075,
+ "ods": 22478,
+ "diff": -403
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 120,
+ "ods": 472,
+ "diff": -352
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 3910.16,
+ "ods_sum": 8371.97,
+ "diff": -4461.8099999999995
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 4855.76,
+ "ods_sum": 24549.66,
+ "diff": -19693.9
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 17482.25,
+ "ods_sum": 53245.25,
+ "diff": -35763.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 1857.77,
+ "ods_sum": 4127.64,
+ "diff": -2269.8700000000003
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 9785.64,
+ "ods_sum": 23662.8,
+ "diff": -13877.16
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17227,
+ "ods": 17601,
+ "diff": -374
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 305990.47,
+ "ods_sum": 311771.56,
+ "diff": -5781.090000000026
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2654,
+ "ods": 2710,
+ "diff": -56
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 501714,
+ "ods": 17563,
+ "diff": 484151
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 615278.9,
+ "ods_sum": 21673.2,
+ "diff": 593605.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 40,
+ "ods": 114,
+ "diff": -74
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 14270.54,
+ "ods_sum": 35457.3,
+ "diff": -21186.760000000002
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4681,
+ "ods": 4755,
+ "diff": -74
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 88,
+ "ods": 92,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4502,
+ "ods": 4586,
+ "diff": -84
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 87,
+ "ods": 393,
+ "diff": -306
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 4940.0,
+ "ods_sum": 25170.0,
+ "diff": -20230.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 4855.76,
+ "ods_sum": 24549.66,
+ "diff": -19693.9
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10545,
+ "ods": 10861,
+ "diff": -316
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 80,
+ "ods": 395,
+ "diff": -315
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 4584.0,
+ "ods_sum": 25438.0,
+ "diff": -20854.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16086,
+ "ods": 16403,
+ "diff": -317
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 433,
+ "ods": 440,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 136,
+ "ods": 554,
+ "diff": -418
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 32589.0,
+ "ods_sum": 62078.0,
+ "diff": -29489.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": -34.0,
+ "diff": 34.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 42,
+ "ods": 43,
+ "diff": -1
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 462416
+ },
+ "generated_at": "2026-01-19T08:29:15.504991+08:00"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T08:29:15.505020+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_history_20260119_170701.json b/etl_billiards/reports/data_integrity_history_20260119_170701.json
new file mode 100644
index 0000000..d54e49a
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_history_20260119_170701.json
@@ -0,0 +1,9 @@
+{
+ "mode": "history",
+ "start": "2026-01-19T00:00:00+08:00",
+ "end": "2026-01-19T00:00:00+08:00",
+ "windows": [],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T17:07:01.451073+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_history_20260120_041412.json b/etl_billiards/reports/data_integrity_history_20260120_041412.json
new file mode 100644
index 0000000..1d4ba7a
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_history_20260120_041412.json
@@ -0,0 +1,10555 @@
+{
+ "mode": "history",
+ "start": "2025-07-20T00:00:00+08:00",
+ "end": "2026-01-20T00:00:00+08:00",
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-07-20T00:00:00+08:00",
+ "end": "2025-08-01T00:00:00+08:00",
+ "label": "month_2025-07-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-07-19T22:00:00+08:00",
+ "end": "2025-08-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 12,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 136,
+ "records_with_pk": 136,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1790,
+ "records_with_pk": 1790,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 10,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 355,
+ "records_with_pk": 355,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11894,
+ "records_with_pk": 11894,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16480,
+ "records_with_pk": 16480,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2474,
+ "records_with_pk": 2474,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 44,
+ "records_with_pk": 44,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8282,
+ "records_with_pk": 8282,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 2514,
+ "records_with_pk": 2514,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 14,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1690,
+ "records_with_pk": 1690,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 1858,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 11,
+ "skipped_missing_pk": 1858,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-20T03:51:30.040626+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17711,
+ "diff": -17710
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1246,
+ "diff": -1246
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 465,
+ "ods": 465,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 554,
+ "ods": 554,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 943,
+ "ods": 943,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 411958.35,
+ "ods_sum": 411958.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 747,
+ "ods": 747,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 8,
+ "ods": 8,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 14,
+ "ods": 14,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22622,
+ "ods": 22622,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22622,
+ "ods": 22622,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1246,
+ "ods": 1246,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 18607.65,
+ "ods_sum": 18607.65,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 68759.8,
+ "ods_sum": 68759.8,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 133842.45,
+ "ods_sum": 133842.45,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 10234.83,
+ "ods_sum": 10234.83,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 46883.63,
+ "ods_sum": 46883.63,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17711,
+ "ods": 17711,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 315562.38,
+ "ods_sum": 315562.38,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1575,
+ "ods": 1575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 14.25,
+ "ods_sum": 14.25,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 31186.8,
+ "ods_sum": 31186.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 29160.8,
+ "ods_sum": 29160.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 607092,
+ "ods": 17563,
+ "diff": 589529
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 745318.1,
+ "ods_sum": 21673.2,
+ "diff": 723644.9
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 351,
+ "ods": 351,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1261.59,
+ "ods_sum": 1261.59,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 113232.99,
+ "ods_sum": 113232.99,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4811,
+ "ods": 4811,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4615,
+ "ods": 4615,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4615,
+ "ods": 4615,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10938,
+ "ods": 10938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1007,
+ "ods": 1007,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 72348.0,
+ "ods_sum": 72348.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16480,
+ "ods": 16480,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 444,
+ "ods": 444,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 444,
+ "ods": 444,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1833,
+ "ods": 1833,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 178060.0,
+ "ods_sum": 178060.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 43,
+ "ods": 43,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 570590
+ },
+ "generated_at": "2026-01-20T03:51:37.115550+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-08-01T00:00:00+08:00",
+ "end": "2025-09-01T00:00:00+08:00",
+ "label": "month_2025-08-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-07-31T22:00:00+08:00",
+ "end": "2025-09-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 204,
+ "records_with_pk": 204,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4653,
+ "records_with_pk": 4653,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 26,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 867,
+ "records_with_pk": 867,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11894,
+ "records_with_pk": 11894,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16480,
+ "records_with_pk": 16480,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2474,
+ "records_with_pk": 2474,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 96,
+ "records_with_pk": 96,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8282,
+ "records_with_pk": 8282,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5271,
+ "records_with_pk": 5271,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 28,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1690,
+ "records_with_pk": 1690,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4817,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 26,
+ "skipped_missing_pk": 4817,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-20T03:54:31.172192+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17711,
+ "diff": -17710
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3587,
+ "diff": -3587
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 18,
+ "ods": 18,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 554,
+ "ods": 554,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 943,
+ "ods": 943,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 411958.35,
+ "ods_sum": 411958.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 51,
+ "ods": 51,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22622,
+ "ods": 22622,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22622,
+ "ods": 22622,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3587,
+ "ods": 3587,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 54919.33,
+ "ods_sum": 54919.33,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 186359.95,
+ "ods_sum": 186359.95,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 383097.96,
+ "ods_sum": 383097.96,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 44840.88,
+ "ods_sum": 44840.88,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 145513.13,
+ "ods_sum": 145513.13,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17711,
+ "ods": 17711,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 315562.38,
+ "ods_sum": 315562.38,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4305,
+ "ods": 4305,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 47.45,
+ "ods_sum": 47.45,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 87523.4,
+ "ods_sum": 87523.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 83759.0,
+ "ods_sum": 83759.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 607092,
+ "ods": 17563,
+ "diff": 589529
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 745318.1,
+ "ods_sum": 21673.2,
+ "diff": 723644.9
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 859,
+ "ods": 859,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1874.75,
+ "ods_sum": 1874.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 268501.57,
+ "ods_sum": 268501.57,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4811,
+ "ods": 4811,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4615,
+ "ods": 4615,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4615,
+ "ods": 4615,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10938,
+ "ods": 10938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2850,
+ "ods": 2850,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 189960.0,
+ "ods_sum": 189960.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16480,
+ "ods": 16480,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 444,
+ "ods": 444,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 444,
+ "ods": 444,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4763,
+ "ods": 4763,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 381598.0,
+ "ods_sum": 381598.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 43,
+ "ods": 43,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 568249
+ },
+ "generated_at": "2026-01-20T03:54:37.871489+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-09-01T00:00:00+08:00",
+ "end": "2025-10-01T00:00:00+08:00",
+ "label": "month_2025-09-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-08-31T22:00:00+08:00",
+ "end": "2025-10-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 204,
+ "records_with_pk": 204,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3738,
+ "records_with_pk": 3738,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 21,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 655,
+ "records_with_pk": 655,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11894,
+ "records_with_pk": 11894,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16480,
+ "records_with_pk": 16480,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2474,
+ "records_with_pk": 2474,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 54,
+ "records_with_pk": 54,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8282,
+ "records_with_pk": 8282,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 4853,
+ "records_with_pk": 4853,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 27,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1690,
+ "records_with_pk": 1690,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 3828,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 3828,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-20T03:57:25.939452+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17711,
+ "diff": -17710
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1264,
+ "diff": -1264
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 11,
+ "ods": 11,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 554,
+ "ods": 554,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 943,
+ "ods": 943,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 411958.35,
+ "ods_sum": 411958.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22622,
+ "ods": 22622,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22622,
+ "ods": 22622,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1264,
+ "ods": 1264,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 11020.51,
+ "ods_sum": 11020.51,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 73893.75,
+ "ods_sum": 73893.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 137203.92,
+ "ods_sum": 137203.92,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 15685.02,
+ "ods_sum": 15685.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 52340.33,
+ "ods_sum": 52340.33,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17711,
+ "ods": 17711,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 315562.38,
+ "ods_sum": 315562.38,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1449,
+ "ods": 1449,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1.41,
+ "ods_sum": 1.41,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 24706.9,
+ "ods_sum": 24706.9,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 23874.4,
+ "ods_sum": 23874.4,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 607092,
+ "ods": 17563,
+ "diff": 589529
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 745318.1,
+ "ods_sum": 21673.2,
+ "diff": 723644.9
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 240,
+ "ods": 654,
+ "diff": -414
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 391.51,
+ "ods_sum": 781.44,
+ "diff": -389.93000000000006
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 69566.69,
+ "ods_sum": 192541.75,
+ "diff": -122975.06
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4811,
+ "ods": 4811,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4615,
+ "ods": 4615,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4615,
+ "ods": 4615,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1173,
+ "ods": 1173,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 75824.0,
+ "ods_sum": 75824.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 73843.08,
+ "ods_sum": 73843.08,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10938,
+ "ods": 10938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 184722.0,
+ "ods_sum": 184722.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16480,
+ "ods": 16480,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 444,
+ "ods": 444,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 444,
+ "ods": 444,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1544,
+ "ods": 1544,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 108880.0,
+ "ods_sum": 108880.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -1011.0,
+ "ods_sum": -1011.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 43,
+ "ods": 43,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 570158
+ },
+ "generated_at": "2026-01-20T03:57:32.703985+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-10-01T00:00:00+08:00",
+ "end": "2025-11-01T00:00:00+08:00",
+ "label": "month_2025-10-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-09-30T22:00:00+08:00",
+ "end": "2025-11-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 204,
+ "records_with_pk": 204,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1476,
+ "records_with_pk": 1476,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 10,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 269,
+ "records_with_pk": 269,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 6,
+ "records_with_pk": 6,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11895,
+ "records_with_pk": 11895,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3058686745823045
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16480,
+ "records_with_pk": 16480,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2474,
+ "records_with_pk": 2474,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 22,
+ "records_with_pk": 22,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8282,
+ "records_with_pk": 8282,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 2059,
+ "records_with_pk": 2059,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1690,
+ "records_with_pk": 1690,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 1504,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 10,
+ "skipped_missing_pk": 1504,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1,
+ "total_errors": 0,
+ "generated_at": "2026-01-20T04:00:03.134754+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17711,
+ "diff": -17710
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2824,
+ "diff": -2824
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 554,
+ "ods": 554,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 943,
+ "ods": 943,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 411958.35,
+ "ods_sum": 411958.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 21,
+ "ods": 21,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22622,
+ "ods": 22622,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22622,
+ "ods": 22622,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2824,
+ "ods": 2824,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 40394.85,
+ "ods_sum": 40394.85,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 310789.49,
+ "ods_sum": 310789.49,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33315.15,
+ "ods_sum": 33315.15,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 116393.37,
+ "ods_sum": 116393.37,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17711,
+ "ods": 17711,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 315562.38,
+ "ods_sum": 315562.38,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3475,
+ "ods": 3475,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1319.49,
+ "ods_sum": 1319.49,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 66216.8,
+ "ods_sum": 66216.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 64234.0,
+ "ods_sum": 64234.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 607092,
+ "ods": 17563,
+ "diff": 589529
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 745318.1,
+ "ods_sum": 21673.2,
+ "diff": 723644.9
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 573,
+ "ods": 573,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 2143.56,
+ "ods_sum": 2143.56,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 172536.78,
+ "ods_sum": 172536.78,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4811,
+ "ods": 4811,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4615,
+ "ods": 4615,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4615,
+ "ods": 4615,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2490,
+ "ods": 2490,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160988.0,
+ "ods_sum": 160988.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10938,
+ "ods": 10938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2489,
+ "ods": 2489,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160076.0,
+ "ods_sum": 160076.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16480,
+ "ods": 16480,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 444,
+ "ods": 444,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 444,
+ "ods": 444,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3616,
+ "ods": 3616,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 286088.0,
+ "ods_sum": 286088.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -47020.0,
+ "ods_sum": -47020.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 43,
+ "ods": 43,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 569012
+ },
+ "generated_at": "2026-01-20T04:00:09.851638+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-11-01T00:00:00+08:00",
+ "end": "2025-12-01T00:00:00+08:00",
+ "label": "month_2025-11-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-10-31T22:00:00+08:00",
+ "end": "2025-12-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 204,
+ "records_with_pk": 204,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3927,
+ "records_with_pk": 3927,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 890,
+ "records_with_pk": 890,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 12,
+ "records_with_pk": 12,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11895,
+ "records_with_pk": 11895,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3058686745823045
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16480,
+ "records_with_pk": 16480,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2474,
+ "records_with_pk": 2474,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 80,
+ "records_with_pk": 80,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8282,
+ "records_with_pk": 8282,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5561,
+ "records_with_pk": 5561,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 30,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1690,
+ "records_with_pk": 1690,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4052,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 4052,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1,
+ "total_errors": 0,
+ "generated_at": "2026-01-20T04:02:57.794632+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17711,
+ "diff": -17710
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3336,
+ "diff": -3336
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 12,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 40,
+ "ods": 40,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 554,
+ "ods": 554,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 943,
+ "ods": 943,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 411958.35,
+ "ods_sum": 411958.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 80,
+ "ods": 80,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22622,
+ "ods": 22622,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22622,
+ "ods": 22622,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3336,
+ "ods": 3336,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71642.8,
+ "ods_sum": 71642.8,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 394705.62,
+ "ods_sum": 394705.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33307.25,
+ "ods_sum": 33307.25,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 156623.79,
+ "ods_sum": 156623.79,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17711,
+ "ods": 17711,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 315562.38,
+ "ods_sum": 315562.38,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4134,
+ "ods": 4134,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1544.05,
+ "ods_sum": 1544.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 98139.8,
+ "ods_sum": 98139.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 87610.8,
+ "ods_sum": 87610.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 607092,
+ "ods": 17563,
+ "diff": 589529
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 745318.1,
+ "ods_sum": 21673.2,
+ "diff": 723644.9
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 884,
+ "ods": 884,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1437.75,
+ "ods_sum": 1437.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 281102.62,
+ "ods_sum": 281102.62,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4811,
+ "ods": 4811,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4615,
+ "ods": 4615,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4615,
+ "ods": 4615,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2838,
+ "ods": 2838,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 172860.0,
+ "ods_sum": 172860.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10938,
+ "ods": 10938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2843,
+ "ods": 2843,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 173800.0,
+ "ods_sum": 173800.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16480,
+ "ods": 16480,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 444,
+ "ods": 444,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 444,
+ "ods": 444,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3999,
+ "ods": 3999,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 457185.0,
+ "ods_sum": 457185.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 17,
+ "ods": 17,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -16567.0,
+ "ods_sum": -16567.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 43,
+ "ods": 43,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 568500
+ },
+ "generated_at": "2026-01-20T04:03:04.513892+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-12-01T00:00:00+08:00",
+ "end": "2026-01-01T00:00:00+08:00",
+ "label": "month_2025-12-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-11-30T22:00:00+08:00",
+ "end": "2026-01-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 204,
+ "records_with_pk": 204,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4044,
+ "records_with_pk": 4044,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 23,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 984,
+ "records_with_pk": 984,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 35,
+ "records_with_pk": 35,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11895,
+ "records_with_pk": 11895,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3058686745823045
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16480,
+ "records_with_pk": 16480,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2474,
+ "records_with_pk": 2474,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 70,
+ "records_with_pk": 70,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8282,
+ "records_with_pk": 8282,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5490,
+ "records_with_pk": 5490,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 30,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1690,
+ "records_with_pk": 1690,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4151,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 23,
+ "skipped_missing_pk": 4151,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1,
+ "total_errors": 0,
+ "generated_at": "2026-01-20T04:06:44.629763+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17711,
+ "diff": -17710
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3479,
+ "diff": -3479
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 554,
+ "ods": 554,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 943,
+ "ods": 943,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 411958.35,
+ "ods_sum": 411958.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 12,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22622,
+ "ods": 22622,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22622,
+ "ods": 22622,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3479,
+ "ods": 3479,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71445.57,
+ "ods_sum": 71445.57,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 432220.76,
+ "ods_sum": 432220.76,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 34544.63,
+ "ods_sum": 34544.63,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 189974.44,
+ "ods_sum": 189974.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17711,
+ "ods": 17711,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 315562.38,
+ "ods_sum": 315562.38,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2625,
+ "ods": 2625,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 190.1,
+ "ods_sum": 190.1,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 65814.4,
+ "ods_sum": 65814.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 63275.9,
+ "ods_sum": 63275.9,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 607092,
+ "ods": 17563,
+ "diff": 589529
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 745318.1,
+ "ods_sum": 21673.2,
+ "diff": 723644.9
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 975,
+ "ods": 975,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 3190.05,
+ "ods_sum": 3190.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 322183.69,
+ "ods_sum": 322183.69,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4811,
+ "ods": 4811,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4615,
+ "ods": 4615,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4615,
+ "ods": 4615,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2816,
+ "ods": 2816,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 179652.0,
+ "ods_sum": 179652.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10938,
+ "ods": 10938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2827,
+ "ods": 2827,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 180232.0,
+ "ods_sum": 180232.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16480,
+ "ods": 16480,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 444,
+ "ods": 444,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 444,
+ "ods": 444,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4118,
+ "ods": 4118,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 472999.0,
+ "ods_sum": 472999.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -4314.0,
+ "ods_sum": -4314.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 43,
+ "ods": 43,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 568357
+ },
+ "generated_at": "2026-01-20T04:06:55.377324+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-01T00:00:00+08:00",
+ "end": "2026-01-08T00:00:00+08:00",
+ "label": "week_2026-01-01",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-12-31T22:00:00+08:00",
+ "end": "2026-01-08T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 136,
+ "records_with_pk": 136,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 827,
+ "records_with_pk": 827,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 167,
+ "records_with_pk": 167,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10,
+ "records_with_pk": 10,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11895,
+ "records_with_pk": 11895,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3058686745823045
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16480,
+ "records_with_pk": 16480,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2474,
+ "records_with_pk": 2474,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8282,
+ "records_with_pk": 8282,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 880,
+ "records_with_pk": 880,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1690,
+ "records_with_pk": 1690,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 851,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 851,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1,
+ "total_errors": 0,
+ "generated_at": "2026-01-20T04:09:15.263506+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17711,
+ "diff": -17710
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 699,
+ "diff": -699
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 554,
+ "ods": 554,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 943,
+ "ods": 943,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 411958.35,
+ "ods_sum": 411958.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22622,
+ "ods": 22622,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22622,
+ "ods": 22622,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 699,
+ "ods": 699,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 8896.03,
+ "ods_sum": 8896.03,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 74693.62,
+ "ods_sum": 74693.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6587.39,
+ "ods_sum": 6587.39,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30138.48,
+ "ods_sum": 30138.48,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17711,
+ "ods": 17711,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 315562.38,
+ "ods_sum": 315562.38,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 607092,
+ "ods": 17563,
+ "diff": 589529
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 745318.1,
+ "ods_sum": 21673.2,
+ "diff": 723644.9
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 157,
+ "ods": 157,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 46522.68,
+ "ods_sum": 46522.68,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4811,
+ "ods": 4811,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4615,
+ "ods": 4615,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4615,
+ "ods": 4615,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 569,
+ "ods": 569,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37392.0,
+ "ods_sum": 37392.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10938,
+ "ods": 10938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 566,
+ "ods": 566,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37228.0,
+ "ods_sum": 37228.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16480,
+ "ods": 16480,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 444,
+ "ods": 444,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 444,
+ "ods": 444,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 823,
+ "ods": 823,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 78730.0,
+ "ods_sum": 78730.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -7.0,
+ "ods_sum": -7.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 43,
+ "ods": 43,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 571137
+ },
+ "generated_at": "2026-01-20T04:09:22.967307+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-08T00:00:00+08:00",
+ "end": "2026-01-15T00:00:00+08:00",
+ "label": "week_2026-01-08",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-07T22:00:00+08:00",
+ "end": "2026-01-15T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 68,
+ "records_with_pk": 68,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 790,
+ "records_with_pk": 790,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 195,
+ "records_with_pk": 195,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 22,
+ "records_with_pk": 22,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11895,
+ "records_with_pk": 11895,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3058686745823045
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16480,
+ "records_with_pk": 16480,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2474,
+ "records_with_pk": 2474,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 15,
+ "records_with_pk": 15,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8282,
+ "records_with_pk": 8282,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1241,
+ "records_with_pk": 1241,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1690,
+ "records_with_pk": 1690,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 814,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 814,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1,
+ "total_errors": 0,
+ "generated_at": "2026-01-20T04:11:41.642798+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17711,
+ "diff": -17710
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 672,
+ "diff": -672
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 554,
+ "ods": 554,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 943,
+ "ods": 943,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 411958.35,
+ "ods_sum": 411958.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22622,
+ "ods": 22622,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22622,
+ "ods": 22622,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 672,
+ "ods": 672,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 16159.12,
+ "ods_sum": 16159.12,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 82416.19,
+ "ods_sum": 82416.19,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6098.02,
+ "ods_sum": 6098.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30731.98,
+ "ods_sum": 30731.98,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17711,
+ "ods": 17711,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 315562.38,
+ "ods_sum": 315562.38,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 607092,
+ "ods": 17563,
+ "diff": 589529
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 745318.1,
+ "ods_sum": 21673.2,
+ "diff": 723644.9
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 188,
+ "ods": 188,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 190.72,
+ "ods_sum": 190.72,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 54584.19,
+ "ods_sum": 54584.19,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4811,
+ "ods": 4811,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4615,
+ "ods": 4615,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4615,
+ "ods": 4615,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 572,
+ "ods": 572,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37214.0,
+ "ods_sum": 37214.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10938,
+ "ods": 10938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 575,
+ "ods": 575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37262.0,
+ "ods_sum": 37262.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16480,
+ "ods": 16480,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 444,
+ "ods": 444,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 444,
+ "ods": 444,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 790,
+ "ods": 790,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 86381.0,
+ "ods_sum": 86381.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -39.0,
+ "ods_sum": -39.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 43,
+ "ods": 43,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 571164
+ },
+ "generated_at": "2026-01-20T04:11:49.388911+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-15T00:00:00+08:00",
+ "end": "2026-01-20T00:00:00+08:00",
+ "label": "week_2026-01-15",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-14T22:00:00+08:00",
+ "end": "2026-01-20T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 5,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 68,
+ "records_with_pk": 68,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 700,
+ "records_with_pk": 700,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 5,
+ "records_with_pk": 5,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11895,
+ "records_with_pk": 11895,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3058686745823045
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16480,
+ "records_with_pk": 16480,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2474,
+ "records_with_pk": 2474,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17,
+ "records_with_pk": 17,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8282,
+ "records_with_pk": 8282,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 869,
+ "records_with_pk": 869,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1690,
+ "records_with_pk": 1690,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 728,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 728,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1,
+ "total_errors": 0,
+ "generated_at": "2026-01-20T04:14:04.703641+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 17711,
+ "diff": -17710
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 579,
+ "diff": -579
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 554,
+ "ods": 554,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 943,
+ "ods": 943,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 411958.35,
+ "ods_sum": 411958.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22622,
+ "ods": 22622,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22622,
+ "ods": 22622,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 579,
+ "ods": 579,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 12066.07,
+ "ods_sum": 12066.07,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 29828.36,
+ "ods_sum": 29828.36,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 68332.42,
+ "ods_sum": 68332.42,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 4379.2,
+ "ods_sum": 4379.2,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30028.73,
+ "ods_sum": 30028.73,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17711,
+ "ods": 17711,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 315562.38,
+ "ods_sum": 315562.38,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 607092,
+ "ods": 17563,
+ "diff": 589529
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 745318.1,
+ "ods_sum": 21673.2,
+ "diff": 723644.9
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 153,
+ "ods": 153,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 51898.0,
+ "ods_sum": 51898.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4811,
+ "ods": 4811,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4615,
+ "ods": 4615,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4615,
+ "ods": 4615,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 474,
+ "ods": 474,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 30844.0,
+ "ods_sum": 30844.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 29828.36,
+ "ods_sum": 29828.36,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10938,
+ "ods": 10938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 474,
+ "ods": 474,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 30824.0,
+ "ods_sum": 30824.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16480,
+ "ods": 16480,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 444,
+ "ods": 444,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 444,
+ "ods": 444,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 678,
+ "ods": 678,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 82556.0,
+ "ods_sum": 82556.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -34.0,
+ "ods_sum": -34.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 43,
+ "ods": 43,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 571257
+ },
+ "generated_at": "2026-01-20T04:14:12.384754+08:00"
+ }
+ ],
+ "total_missing": 6,
+ "total_errors": 0,
+ "generated_at": "2026-01-20T04:14:12.384777+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_history_20260126_061648.json b/etl_billiards/reports/data_integrity_history_20260126_061648.json
new file mode 100644
index 0000000..ceff579
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_history_20260126_061648.json
@@ -0,0 +1,19348 @@
+{
+ "mode": "history",
+ "start": "2025-01-01T00:00:00+08:00",
+ "end": "2026-01-26T00:00:00+08:00",
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-01-01T00:00:00+08:00",
+ "end": "2025-02-01T00:00:00+08:00",
+ "label": "month_2025-01-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2024-12-31T22:00:00+08:00",
+ "end": "2025-02-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 204,
+ "records_with_pk": 204,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10071,
+ "records_with_pk": 10071,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3067211608837061
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11928,
+ "records_with_pk": 11928,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3067211605281733
+ },
+ {
+ "id": 3067210806709061
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16953,
+ "records_with_pk": 16953,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2474,
+ "records_with_pk": 2474,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3067211605855173
+ },
+ {
+ "id": 3067210808216389
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8266,
+ "records_with_pk": 8266,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1738,
+ "records_with_pk": 1738,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3067211610753989
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 6,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T04:44:50.286736+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18361,
+ "diff": -18360
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18361,
+ "ods": 18361,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 328358.71,
+ "ods_sum": 328901.21,
+ "diff": -542.5
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4998,
+ "ods": 4998,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11388,
+ "ods": 11411,
+ "diff": -23
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16953,
+ "ods": 16953,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18382
+ },
+ "generated_at": "2026-01-26T04:44:54.113987+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-02-01T00:00:00+08:00",
+ "end": "2025-03-01T00:00:00+08:00",
+ "label": "month_2025-02-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-01-31T22:00:00+08:00",
+ "end": "2025-03-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 28,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 204,
+ "records_with_pk": 204,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10071,
+ "records_with_pk": 10071,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3067211608837061
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11928,
+ "records_with_pk": 11928,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3067211605281733
+ },
+ {
+ "id": 3067210806709061
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16953,
+ "records_with_pk": 16953,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2474,
+ "records_with_pk": 2474,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3067211605855173
+ },
+ {
+ "id": 3067210808216389
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8266,
+ "records_with_pk": 8266,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1738,
+ "records_with_pk": 1738,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3067211610753989
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 6,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T04:50:54.915246+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18361,
+ "diff": -18360
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18361,
+ "ods": 18361,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 328358.71,
+ "ods_sum": 328901.21,
+ "diff": -542.5
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4998,
+ "ods": 4998,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11388,
+ "ods": 11411,
+ "diff": -23
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16953,
+ "ods": 16953,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18382
+ },
+ "generated_at": "2026-01-26T04:50:58.640259+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-03-01T00:00:00+08:00",
+ "end": "2025-04-01T00:00:00+08:00",
+ "label": "month_2025-03-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-02-28T22:00:00+08:00",
+ "end": "2025-04-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 204,
+ "records_with_pk": 204,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10071,
+ "records_with_pk": 10071,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3067211608837061
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11928,
+ "records_with_pk": 11928,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3067211605281733
+ },
+ {
+ "id": 3067210806709061
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16953,
+ "records_with_pk": 16953,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2474,
+ "records_with_pk": 2474,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3067211605855173
+ },
+ {
+ "id": 3067210808216389
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8266,
+ "records_with_pk": 8266,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1738,
+ "records_with_pk": 1738,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3067211610753989
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 6,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T04:56:40.233217+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18361,
+ "diff": -18360
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18361,
+ "ods": 18361,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 328358.71,
+ "ods_sum": 328901.21,
+ "diff": -542.5
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4998,
+ "ods": 4998,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11388,
+ "ods": 11411,
+ "diff": -23
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16953,
+ "ods": 16953,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18382
+ },
+ "generated_at": "2026-01-26T04:56:43.957627+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-04-01T00:00:00+08:00",
+ "end": "2025-05-01T00:00:00+08:00",
+ "label": "month_2025-04-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-03-31T22:00:00+08:00",
+ "end": "2025-05-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 204,
+ "records_with_pk": 204,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10071,
+ "records_with_pk": 10071,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3067211608837061
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11928,
+ "records_with_pk": 11928,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3067211605281733
+ },
+ {
+ "id": 3067210806709061
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16953,
+ "records_with_pk": 16953,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2474,
+ "records_with_pk": 2474,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3067211605855173
+ },
+ {
+ "id": 3067210808216389
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8266,
+ "records_with_pk": 8266,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1738,
+ "records_with_pk": 1738,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3067211610753989
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 6,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T05:02:32.502900+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18361,
+ "diff": -18360
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18361,
+ "ods": 18361,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 328358.71,
+ "ods_sum": 328901.21,
+ "diff": -542.5
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4998,
+ "ods": 4998,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11388,
+ "ods": 11411,
+ "diff": -23
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16953,
+ "ods": 16953,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18382
+ },
+ "generated_at": "2026-01-26T05:02:36.144485+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-05-01T00:00:00+08:00",
+ "end": "2025-06-01T00:00:00+08:00",
+ "label": "month_2025-05-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-04-30T22:00:00+08:00",
+ "end": "2025-06-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 204,
+ "records_with_pk": 204,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10071,
+ "records_with_pk": 10071,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3067211608837061
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11928,
+ "records_with_pk": 11928,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3067211605281733
+ },
+ {
+ "id": 3067210806709061
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16953,
+ "records_with_pk": 16953,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2474,
+ "records_with_pk": 2474,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3067211605855173
+ },
+ {
+ "id": 3067210808216389
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8266,
+ "records_with_pk": 8266,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1738,
+ "records_with_pk": 1738,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3067211610753989
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 6,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T05:08:23.632374+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18361,
+ "diff": -18360
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18361,
+ "ods": 18361,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 328358.71,
+ "ods_sum": 328901.21,
+ "diff": -542.5
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4998,
+ "ods": 4998,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11388,
+ "ods": 11411,
+ "diff": -23
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16953,
+ "ods": 16953,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18382
+ },
+ "generated_at": "2026-01-26T05:08:27.290890+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-06-01T00:00:00+08:00",
+ "end": "2025-07-01T00:00:00+08:00",
+ "label": "month_2025-06-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-05-31T22:00:00+08:00",
+ "end": "2025-07-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 204,
+ "records_with_pk": 204,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10071,
+ "records_with_pk": 10071,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3067211608837061
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11928,
+ "records_with_pk": 11928,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3067211605281733
+ },
+ {
+ "id": 3067210806709061
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16953,
+ "records_with_pk": 16953,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2474,
+ "records_with_pk": 2474,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3067211605855173
+ },
+ {
+ "id": 3067210808216389
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8266,
+ "records_with_pk": 8266,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1740,
+ "records_with_pk": 1740,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3067252824935621
+ },
+ {
+ "id": 3067252824886469
+ },
+ {
+ "id": 3067211610753989
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 8,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T05:14:18.744652+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18361,
+ "diff": -18360
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18361,
+ "ods": 18361,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 328358.71,
+ "ods_sum": 328901.21,
+ "diff": -542.5
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4998,
+ "ods": 4998,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11388,
+ "ods": 11411,
+ "diff": -23
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16953,
+ "ods": 16953,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18382
+ },
+ "generated_at": "2026-01-26T05:14:22.563756+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-07-01T00:00:00+08:00",
+ "end": "2025-08-01T00:00:00+08:00",
+ "label": "month_2025-07-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-06-30T22:00:00+08:00",
+ "end": "2025-08-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 204,
+ "records_with_pk": 204,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1798,
+ "records_with_pk": 1798,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 11,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10073,
+ "records_with_pk": 10073,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3067252823968965
+ },
+ {
+ "id": 3067252823985349
+ },
+ {
+ "id": 3067211608837061
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 355,
+ "records_with_pk": 355,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11929,
+ "records_with_pk": 11929,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3067252820446405
+ },
+ {
+ "id": 3067211605281733
+ },
+ {
+ "id": 3067210806709061
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16953,
+ "records_with_pk": 16953,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2475,
+ "records_with_pk": 2475,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3067211605855173
+ },
+ {
+ "id": 3067210808216389
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 44,
+ "records_with_pk": 44,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8266,
+ "records_with_pk": 8266,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 2578,
+ "records_with_pk": 2578,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 15,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1740,
+ "records_with_pk": 1740,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3067252824935621
+ },
+ {
+ "id": 3067252824886469
+ },
+ {
+ "id": 3067211610753989
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 1867,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 12,
+ "skipped_missing_pk": 1867,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 11,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T05:20:21.047786+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18361,
+ "diff": -18360
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1246,
+ "diff": -1246
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 23,
+ "ods": 23,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 466,
+ "ods": 466,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 751,
+ "ods": 751,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 149,
+ "ods": 149,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 14,
+ "ods": 14,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1246,
+ "ods": 1246,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 18607.65,
+ "ods_sum": 18607.65,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 68759.8,
+ "ods_sum": 68759.8,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 133842.45,
+ "ods_sum": 133842.45,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 10234.83,
+ "ods_sum": 10234.83,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 46883.63,
+ "ods_sum": 46883.63,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18361,
+ "ods": 18361,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 328358.71,
+ "ods_sum": 328901.21,
+ "diff": -542.5
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1575,
+ "ods": 1575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 14.25,
+ "ods_sum": 14.25,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 31186.8,
+ "ods_sum": 31186.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 29160.8,
+ "ods_sum": 29160.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 351,
+ "ods": 351,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1261.59,
+ "ods_sum": 1261.59,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 113232.99,
+ "ods_sum": 113232.99,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4998,
+ "ods": 4998,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11388,
+ "ods": 11411,
+ "diff": -23
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1007,
+ "ods": 1007,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 72348.0,
+ "ods_sum": 72348.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16953,
+ "ods": 16953,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1833,
+ "ods": 1833,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 178060.0,
+ "ods_sum": 178060.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19628
+ },
+ "generated_at": "2026-01-26T05:20:24.799157+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-08-01T00:00:00+08:00",
+ "end": "2025-09-01T00:00:00+08:00",
+ "label": "month_2025-08-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-07-31T22:00:00+08:00",
+ "end": "2025-09-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 204,
+ "records_with_pk": 204,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4653,
+ "records_with_pk": 4653,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 26,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10075,
+ "records_with_pk": 10075,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3067259091061957
+ },
+ {
+ "id": 3067259091078341
+ },
+ {
+ "id": 3067252823968965
+ },
+ {
+ "id": 3067252823985349
+ },
+ {
+ "id": 3067211608837061
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 867,
+ "records_with_pk": 867,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11930,
+ "records_with_pk": 11930,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3067259086490821
+ },
+ {
+ "id": 3067252820446405
+ },
+ {
+ "id": 3067211605281733
+ },
+ {
+ "id": 3067210806709061
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16953,
+ "records_with_pk": 16953,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2475,
+ "records_with_pk": 2475,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3067259087146181
+ },
+ {
+ "id": 3067211605855173
+ },
+ {
+ "id": 3067210808216389
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 96,
+ "records_with_pk": 96,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8266,
+ "records_with_pk": 8266,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5271,
+ "records_with_pk": 5271,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 28,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1740,
+ "records_with_pk": 1740,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3067252824935621
+ },
+ {
+ "id": 3067252824886469
+ },
+ {
+ "id": 3067211610753989
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4817,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 26,
+ "skipped_missing_pk": 4817,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 15,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T05:27:26.825587+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18361,
+ "diff": -18360
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3587,
+ "diff": -3587
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 18,
+ "ods": 18,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 51,
+ "ods": 51,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3587,
+ "ods": 3587,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 54919.33,
+ "ods_sum": 54919.33,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 186359.95,
+ "ods_sum": 186359.95,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 383097.96,
+ "ods_sum": 383097.96,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 44840.88,
+ "ods_sum": 44840.88,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 145513.13,
+ "ods_sum": 145513.13,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18361,
+ "ods": 18361,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 328358.71,
+ "ods_sum": 328901.21,
+ "diff": -542.5
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4305,
+ "ods": 4305,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 47.45,
+ "ods_sum": 47.45,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 87523.4,
+ "ods_sum": 87523.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 83759.0,
+ "ods_sum": 83759.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 859,
+ "ods": 859,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1874.75,
+ "ods_sum": 1874.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 268501.57,
+ "ods_sum": 268501.57,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4998,
+ "ods": 4998,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11388,
+ "ods": 11411,
+ "diff": -23
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2850,
+ "ods": 2850,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 189960.0,
+ "ods_sum": 189960.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16953,
+ "ods": 16953,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4763,
+ "ods": 4763,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 381598.0,
+ "ods_sum": 381598.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -21969
+ },
+ "generated_at": "2026-01-26T05:27:30.496154+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-09-01T00:00:00+08:00",
+ "end": "2025-10-01T00:00:00+08:00",
+ "label": "month_2025-09-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-08-31T22:00:00+08:00",
+ "end": "2025-10-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 204,
+ "records_with_pk": 204,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3738,
+ "records_with_pk": 3738,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 21,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10075,
+ "records_with_pk": 10075,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3067259091061957
+ },
+ {
+ "id": 3067259091078341
+ },
+ {
+ "id": 3067252823968965
+ },
+ {
+ "id": 3067252823985349
+ },
+ {
+ "id": 3067211608837061
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 655,
+ "records_with_pk": 655,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11930,
+ "records_with_pk": 11930,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3067259086490821
+ },
+ {
+ "id": 3067252820446405
+ },
+ {
+ "id": 3067211605281733
+ },
+ {
+ "id": 3067210806709061
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16953,
+ "records_with_pk": 16953,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2475,
+ "records_with_pk": 2475,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3067259087146181
+ },
+ {
+ "id": 3067211605855173
+ },
+ {
+ "id": 3067210808216389
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 54,
+ "records_with_pk": 54,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8266,
+ "records_with_pk": 8266,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 4853,
+ "records_with_pk": 4853,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 27,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1740,
+ "records_with_pk": 1740,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3067252824935621
+ },
+ {
+ "id": 3067252824886469
+ },
+ {
+ "id": 3067211610753989
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 3828,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 3828,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 15,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T05:34:03.938323+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18361,
+ "diff": -18360
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1264,
+ "diff": -1264
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 11,
+ "ods": 11,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1264,
+ "ods": 1264,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 11020.51,
+ "ods_sum": 11020.51,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 73893.75,
+ "ods_sum": 73893.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 137203.92,
+ "ods_sum": 137203.92,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 15685.02,
+ "ods_sum": 15685.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 52340.33,
+ "ods_sum": 52340.33,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18361,
+ "ods": 18361,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 328358.71,
+ "ods_sum": 328901.21,
+ "diff": -542.5
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1449,
+ "ods": 1449,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1.41,
+ "ods_sum": 1.41,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 24706.9,
+ "ods_sum": 24706.9,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 23874.4,
+ "ods_sum": 23874.4,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 654,
+ "ods": 654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 781.44,
+ "ods_sum": 781.44,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 192541.75,
+ "ods_sum": 192541.75,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4998,
+ "ods": 4998,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1173,
+ "ods": 1173,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 75824.0,
+ "ods_sum": 75824.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 73843.08,
+ "ods_sum": 73843.08,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11388,
+ "ods": 11411,
+ "diff": -23
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 184722.0,
+ "ods_sum": 184722.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16953,
+ "ods": 16953,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1544,
+ "ods": 1544,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 108880.0,
+ "ods_sum": 108880.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -1011.0,
+ "ods_sum": -1011.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19646
+ },
+ "generated_at": "2026-01-26T05:34:07.598877+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-10-01T00:00:00+08:00",
+ "end": "2025-11-01T00:00:00+08:00",
+ "label": "month_2025-10-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-09-30T22:00:00+08:00",
+ "end": "2025-11-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 204,
+ "records_with_pk": 204,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 789,
+ "records_with_pk": 789,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10075,
+ "records_with_pk": 10075,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3067259091061957
+ },
+ {
+ "id": 3067259091078341
+ },
+ {
+ "id": 3067252823968965
+ },
+ {
+ "id": 3067252823985349
+ },
+ {
+ "id": 3067211608837061
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 5,
+ "records_with_pk": 5,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11930,
+ "records_with_pk": 11930,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3067259086490821
+ },
+ {
+ "id": 3067252820446405
+ },
+ {
+ "id": 3067211605281733
+ },
+ {
+ "id": 3067210806709061
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16953,
+ "records_with_pk": 16953,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2475,
+ "records_with_pk": 2475,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3067259087146181
+ },
+ {
+ "id": 3067211605855173
+ },
+ {
+ "id": 3067210808216389
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 13,
+ "records_with_pk": 13,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8266,
+ "records_with_pk": 8266,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1167,
+ "records_with_pk": 1167,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 8,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1740,
+ "records_with_pk": 1740,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3067252824935621
+ },
+ {
+ "id": 3067252824886469
+ },
+ {
+ "id": 3067211610753989
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 803,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 803,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 15,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T05:39:56.916120+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18361,
+ "diff": -18360
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2824,
+ "diff": -2824
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 21,
+ "ods": 21,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2824,
+ "ods": 2824,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 40394.85,
+ "ods_sum": 40394.85,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 310789.49,
+ "ods_sum": 310789.49,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33315.15,
+ "ods_sum": 33315.15,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 116393.37,
+ "ods_sum": 116393.37,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18361,
+ "ods": 18361,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 328358.71,
+ "ods_sum": 328901.21,
+ "diff": -542.5
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3475,
+ "ods": 3475,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1319.49,
+ "ods_sum": 1319.49,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 66216.8,
+ "ods_sum": 66216.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 64234.0,
+ "ods_sum": 64234.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 573,
+ "ods": 573,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 2143.56,
+ "ods_sum": 2143.56,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 172536.78,
+ "ods_sum": 172536.78,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4998,
+ "ods": 4998,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2490,
+ "ods": 2490,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160988.0,
+ "ods_sum": 160988.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11388,
+ "ods": 11411,
+ "diff": -23
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2489,
+ "ods": 2489,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160076.0,
+ "ods_sum": 160076.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16953,
+ "ods": 16953,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3616,
+ "ods": 3616,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 286088.0,
+ "ods_sum": 286088.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -47020.0,
+ "ods_sum": -47020.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -21206
+ },
+ "generated_at": "2026-01-26T05:40:00.785991+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-11-01T00:00:00+08:00",
+ "end": "2025-12-01T00:00:00+08:00",
+ "label": "month_2025-11-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-10-31T22:00:00+08:00",
+ "end": "2025-12-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 204,
+ "records_with_pk": 204,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3927,
+ "records_with_pk": 3927,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10075,
+ "records_with_pk": 10075,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3067259091061957
+ },
+ {
+ "id": 3067259091078341
+ },
+ {
+ "id": 3067252823968965
+ },
+ {
+ "id": 3067252823985349
+ },
+ {
+ "id": 3067211608837061
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 890,
+ "records_with_pk": 890,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 12,
+ "records_with_pk": 12,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11930,
+ "records_with_pk": 11930,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3067259086490821
+ },
+ {
+ "id": 3067252820446405
+ },
+ {
+ "id": 3067211605281733
+ },
+ {
+ "id": 3067210806709061
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16953,
+ "records_with_pk": 16953,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2476,
+ "records_with_pk": 2476,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3067278947175045
+ },
+ {
+ "id": 3067259087146181
+ },
+ {
+ "id": 3067211605855173
+ },
+ {
+ "id": 3067210808216389
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 80,
+ "records_with_pk": 80,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8266,
+ "records_with_pk": 8266,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5561,
+ "records_with_pk": 5561,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 30,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1740,
+ "records_with_pk": 1740,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3067252824935621
+ },
+ {
+ "id": 3067252824886469
+ },
+ {
+ "id": 3067211610753989
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4052,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 4052,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 16,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T05:46:41.582600+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18361,
+ "diff": -18360
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3336,
+ "diff": -3336
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 12,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 40,
+ "ods": 40,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 80,
+ "ods": 80,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3336,
+ "ods": 3336,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71642.8,
+ "ods_sum": 71642.8,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 394705.62,
+ "ods_sum": 394705.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33307.25,
+ "ods_sum": 33307.25,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 156623.79,
+ "ods_sum": 156623.79,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18361,
+ "ods": 18361,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 328358.71,
+ "ods_sum": 328901.21,
+ "diff": -542.5
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4134,
+ "ods": 4134,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1544.05,
+ "ods_sum": 1544.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 98139.8,
+ "ods_sum": 98139.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 87610.8,
+ "ods_sum": 87610.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 884,
+ "ods": 884,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1437.75,
+ "ods_sum": 1437.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 281102.62,
+ "ods_sum": 281102.62,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4998,
+ "ods": 4998,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2838,
+ "ods": 2838,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 172860.0,
+ "ods_sum": 172860.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11388,
+ "ods": 11411,
+ "diff": -23
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2843,
+ "ods": 2843,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 173800.0,
+ "ods_sum": 173800.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16953,
+ "ods": 16953,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3999,
+ "ods": 3999,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 457185.0,
+ "ods_sum": 457185.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 17,
+ "ods": 17,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -16567.0,
+ "ods_sum": -16567.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -21718
+ },
+ "generated_at": "2026-01-26T05:46:45.166466+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-12-01T00:00:00+08:00",
+ "end": "2026-01-01T00:00:00+08:00",
+ "label": "month_2025-12-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-11-30T22:00:00+08:00",
+ "end": "2026-01-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 204,
+ "records_with_pk": 204,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4044,
+ "records_with_pk": 4044,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 23,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10075,
+ "records_with_pk": 10075,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3067259091061957
+ },
+ {
+ "id": 3067259091078341
+ },
+ {
+ "id": 3067252823968965
+ },
+ {
+ "id": 3067252823985349
+ },
+ {
+ "id": 3067211608837061
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 984,
+ "records_with_pk": 984,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 35,
+ "records_with_pk": 35,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11930,
+ "records_with_pk": 11930,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3067259086490821
+ },
+ {
+ "id": 3067252820446405
+ },
+ {
+ "id": 3067211605281733
+ },
+ {
+ "id": 3067210806709061
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16953,
+ "records_with_pk": 16953,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2476,
+ "records_with_pk": 2476,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3067278947175045
+ },
+ {
+ "id": 3067259087146181
+ },
+ {
+ "id": 3067211605855173
+ },
+ {
+ "id": 3067210808216389
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 70,
+ "records_with_pk": 70,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8266,
+ "records_with_pk": 8266,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5490,
+ "records_with_pk": 5490,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 30,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1740,
+ "records_with_pk": 1740,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3067252824935621
+ },
+ {
+ "id": 3067252824886469
+ },
+ {
+ "id": 3067211610753989
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4151,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 23,
+ "skipped_missing_pk": 4151,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 16,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T05:53:37.253537+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18361,
+ "diff": -18360
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3479,
+ "diff": -3479
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 12,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3479,
+ "ods": 3479,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71445.57,
+ "ods_sum": 71445.57,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 432220.76,
+ "ods_sum": 432220.76,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 34544.63,
+ "ods_sum": 34544.63,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 189974.44,
+ "ods_sum": 189974.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18361,
+ "ods": 18361,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 328358.71,
+ "ods_sum": 328901.21,
+ "diff": -542.5
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2625,
+ "ods": 2625,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 190.1,
+ "ods_sum": 190.1,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 65814.4,
+ "ods_sum": 65814.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 63275.9,
+ "ods_sum": 63275.9,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 975,
+ "ods": 975,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 3190.05,
+ "ods_sum": 3190.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 322183.69,
+ "ods_sum": 322183.69,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4998,
+ "ods": 4998,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2816,
+ "ods": 2816,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 179652.0,
+ "ods_sum": 179652.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11388,
+ "ods": 11411,
+ "diff": -23
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2827,
+ "ods": 2827,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 180232.0,
+ "ods_sum": 180232.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16953,
+ "ods": 16953,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4118,
+ "ods": 4118,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 472999.0,
+ "ods_sum": 472999.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -4314.0,
+ "ods_sum": -4314.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -21861
+ },
+ "generated_at": "2026-01-26T05:53:40.872515+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-01T00:00:00+08:00",
+ "end": "2026-01-08T00:00:00+08:00",
+ "label": "week_2026-01-01",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-12-31T22:00:00+08:00",
+ "end": "2026-01-08T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 136,
+ "records_with_pk": 136,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 827,
+ "records_with_pk": 827,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10075,
+ "records_with_pk": 10075,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3067259091061957
+ },
+ {
+ "id": 3067259091078341
+ },
+ {
+ "id": 3067252823968965
+ },
+ {
+ "id": 3067252823985349
+ },
+ {
+ "id": 3067211608837061
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 167,
+ "records_with_pk": 167,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10,
+ "records_with_pk": 10,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11930,
+ "records_with_pk": 11930,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3067259086490821
+ },
+ {
+ "id": 3067252820446405
+ },
+ {
+ "id": 3067211605281733
+ },
+ {
+ "id": 3067210806709061
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16953,
+ "records_with_pk": 16953,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2476,
+ "records_with_pk": 2476,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3067278947175045
+ },
+ {
+ "id": 3067259087146181
+ },
+ {
+ "id": 3067211605855173
+ },
+ {
+ "id": 3067210808216389
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8266,
+ "records_with_pk": 8266,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 880,
+ "records_with_pk": 880,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1740,
+ "records_with_pk": 1740,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3067252824935621
+ },
+ {
+ "id": 3067252824886469
+ },
+ {
+ "id": 3067211610753989
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 851,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 851,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 16,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T05:59:29.545308+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18361,
+ "diff": -18360
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 699,
+ "diff": -699
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 699,
+ "ods": 699,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 8896.03,
+ "ods_sum": 8896.03,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 74693.62,
+ "ods_sum": 74693.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6587.39,
+ "ods_sum": 6587.39,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30138.48,
+ "ods_sum": 30138.48,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18361,
+ "ods": 18361,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 328358.71,
+ "ods_sum": 328901.21,
+ "diff": -542.5
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 157,
+ "ods": 157,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 46522.68,
+ "ods_sum": 46522.68,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4998,
+ "ods": 4998,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 569,
+ "ods": 569,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37392.0,
+ "ods_sum": 37392.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11388,
+ "ods": 11411,
+ "diff": -23
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 566,
+ "ods": 566,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37228.0,
+ "ods_sum": 37228.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16953,
+ "ods": 16953,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 823,
+ "ods": 823,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 78730.0,
+ "ods_sum": 78730.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -7.0,
+ "ods_sum": -7.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19081
+ },
+ "generated_at": "2026-01-26T05:59:33.346021+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-08T00:00:00+08:00",
+ "end": "2026-01-15T00:00:00+08:00",
+ "label": "week_2026-01-08",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-07T22:00:00+08:00",
+ "end": "2026-01-15T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 68,
+ "records_with_pk": 68,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 790,
+ "records_with_pk": 790,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10075,
+ "records_with_pk": 10075,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3067259091061957
+ },
+ {
+ "id": 3067259091078341
+ },
+ {
+ "id": 3067252823968965
+ },
+ {
+ "id": 3067252823985349
+ },
+ {
+ "id": 3067211608837061
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 195,
+ "records_with_pk": 195,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 22,
+ "records_with_pk": 22,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11930,
+ "records_with_pk": 11930,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3067259086490821
+ },
+ {
+ "id": 3067252820446405
+ },
+ {
+ "id": 3067211605281733
+ },
+ {
+ "id": 3067210806709061
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16953,
+ "records_with_pk": 16953,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2476,
+ "records_with_pk": 2476,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3067278947175045
+ },
+ {
+ "id": 3067259087146181
+ },
+ {
+ "id": 3067211605855173
+ },
+ {
+ "id": 3067210808216389
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 15,
+ "records_with_pk": 15,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8266,
+ "records_with_pk": 8266,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1241,
+ "records_with_pk": 1241,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1740,
+ "records_with_pk": 1740,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3067252824935621
+ },
+ {
+ "id": 3067252824886469
+ },
+ {
+ "id": 3067211610753989
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 814,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 814,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 16,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T06:05:13.373633+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18361,
+ "diff": -18360
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 672,
+ "diff": -672
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 672,
+ "ods": 672,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 16159.12,
+ "ods_sum": 16159.12,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 82416.19,
+ "ods_sum": 82416.19,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6098.02,
+ "ods_sum": 6098.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30731.98,
+ "ods_sum": 30731.98,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18361,
+ "ods": 18361,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 328358.71,
+ "ods_sum": 328901.21,
+ "diff": -542.5
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 188,
+ "ods": 188,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 190.72,
+ "ods_sum": 190.72,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 54584.19,
+ "ods_sum": 54584.19,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4998,
+ "ods": 4998,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 572,
+ "ods": 572,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37214.0,
+ "ods_sum": 37214.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11388,
+ "ods": 11411,
+ "diff": -23
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 575,
+ "ods": 575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37262.0,
+ "ods_sum": 37262.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16953,
+ "ods": 16953,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 790,
+ "ods": 790,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 86381.0,
+ "ods_sum": 86381.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -39.0,
+ "ods_sum": -39.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19054
+ },
+ "generated_at": "2026-01-26T06:05:17.001366+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-15T00:00:00+08:00",
+ "end": "2026-01-22T00:00:00+08:00",
+ "label": "week_2026-01-15",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-14T22:00:00+08:00",
+ "end": "2026-01-22T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 68,
+ "records_with_pk": 68,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 899,
+ "records_with_pk": 899,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10075,
+ "records_with_pk": 10075,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3067259091061957
+ },
+ {
+ "id": 3067259091078341
+ },
+ {
+ "id": 3067252823968965
+ },
+ {
+ "id": 3067252823985349
+ },
+ {
+ "id": 3067211608837061
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 216,
+ "records_with_pk": 216,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 6,
+ "records_with_pk": 6,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11930,
+ "records_with_pk": 11930,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3067259086490821
+ },
+ {
+ "id": 3067252820446405
+ },
+ {
+ "id": 3067211605281733
+ },
+ {
+ "id": 3067210806709061
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16953,
+ "records_with_pk": 16953,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2476,
+ "records_with_pk": 2476,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3067278947175045
+ },
+ {
+ "id": 3067259087146181
+ },
+ {
+ "id": 3067211605855173
+ },
+ {
+ "id": 3067210808216389
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 21,
+ "records_with_pk": 21,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8266,
+ "records_with_pk": 8266,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1181,
+ "records_with_pk": 1181,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1740,
+ "records_with_pk": 1740,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3067252824935621
+ },
+ {
+ "id": 3067252824886469
+ },
+ {
+ "id": 3067211610753989
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 932,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 932,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 16,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T06:10:57.961411+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18361,
+ "diff": -18360
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 776,
+ "diff": -776
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 776,
+ "ods": 776,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 16959.34,
+ "ods_sum": 16959.34,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 38520.64,
+ "ods_sum": 38520.64,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 93110.51,
+ "ods_sum": 93110.51,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 5009.13,
+ "ods_sum": 5009.13,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 40591.34,
+ "ods_sum": 40591.34,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18361,
+ "ods": 18361,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 328358.71,
+ "ods_sum": 328901.21,
+ "diff": -542.5
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 212,
+ "ods": 212,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 191.21,
+ "ods_sum": 191.21,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 70610.77,
+ "ods_sum": 70610.77,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4998,
+ "ods": 4998,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 613,
+ "ods": 613,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 40100.0,
+ "ods_sum": 40100.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 38520.64,
+ "ods_sum": 38520.64,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11388,
+ "ods": 11411,
+ "diff": -23
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 616,
+ "ods": 616,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 40456.0,
+ "ods_sum": 40456.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16953,
+ "ods": 16953,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 896,
+ "ods": 896,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 123718.0,
+ "ods_sum": 123718.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -34.0,
+ "ods_sum": -34.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19158
+ },
+ "generated_at": "2026-01-26T06:11:01.735310+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-22T00:00:00+08:00",
+ "end": "2026-01-26T00:00:00+08:00",
+ "label": "week_2026-01-22",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-21T22:00:00+08:00",
+ "end": "2026-01-26T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 4,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 68,
+ "records_with_pk": 68,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 540,
+ "records_with_pk": 540,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10075,
+ "records_with_pk": 10075,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3067259091061957
+ },
+ {
+ "id": 3067259091078341
+ },
+ {
+ "id": 3067252823968965
+ },
+ {
+ "id": 3067252823985349
+ },
+ {
+ "id": 3067211608837061
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 147,
+ "records_with_pk": 147,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 5,
+ "records_with_pk": 5,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11930,
+ "records_with_pk": 11930,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3067259086490821
+ },
+ {
+ "id": 3067252820446405
+ },
+ {
+ "id": 3067211605281733
+ },
+ {
+ "id": 3067210806709061
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16953,
+ "records_with_pk": 16953,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2476,
+ "records_with_pk": 2476,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3067278947175045
+ },
+ {
+ "id": 3067259087146181
+ },
+ {
+ "id": 3067211605855173
+ },
+ {
+ "id": 3067210808216389
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 6,
+ "records_with_pk": 6,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8266,
+ "records_with_pk": 8266,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 953,
+ "records_with_pk": 953,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1740,
+ "records_with_pk": 1740,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3067252824935621
+ },
+ {
+ "id": 3067252824886469
+ },
+ {
+ "id": 3067211610753989
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 551,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 551,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 16,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T06:16:45.330506+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18361,
+ "diff": -18360
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 465,
+ "diff": -465
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 465,
+ "ods": 465,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 9264.7,
+ "ods_sum": 9264.7,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 21930.18,
+ "ods_sum": 21930.18,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 61454.19,
+ "ods_sum": 61454.19,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 1649.19,
+ "ods_sum": 1649.19,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 28610.12,
+ "ods_sum": 28610.12,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18361,
+ "ods": 18361,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 328358.71,
+ "ods_sum": 328901.21,
+ "diff": -542.5
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 138,
+ "ods": 138,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 40013.33,
+ "ods_sum": 40013.33,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4998,
+ "ods": 4998,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 317,
+ "ods": 331,
+ "diff": -14
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 21728.0,
+ "ods_sum": 22654.0,
+ "diff": -926.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 21004.18,
+ "ods_sum": 21930.18,
+ "diff": -926.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11388,
+ "ods": 11411,
+ "diff": -23
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 330,
+ "ods": 330,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 22452.0,
+ "ods_sum": 22452.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16953,
+ "ods": 16953,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 524,
+ "ods": 524,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 59984.0,
+ "ods_sum": 59984.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -7.0,
+ "ods_sum": -7.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18861
+ },
+ "generated_at": "2026-01-26T06:16:48.949911+08:00"
+ }
+ ],
+ "total_missing": 190,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T06:16:48.949931+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_history_20260126_192038.json b/etl_billiards/reports/data_integrity_history_20260126_192038.json
new file mode 100644
index 0000000..a916e74
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_history_20260126_192038.json
@@ -0,0 +1,18946 @@
+{
+ "mode": "history",
+ "start": "2025-01-01T00:00:00+08:00",
+ "end": "2026-01-26T00:00:00+08:00",
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-01-01T00:00:00+08:00",
+ "end": "2025-02-01T00:00:00+08:00",
+ "label": "month_2025-01-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2024-12-31T22:00:00+08:00",
+ "end": "2025-02-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9939,
+ "records_with_pk": 9939,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11770,
+ "records_with_pk": 11770,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16977,
+ "records_with_pk": 16977,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2460,
+ "records_with_pk": 2460,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8160,
+ "records_with_pk": 8160,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1735,
+ "records_with_pk": 1735,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T18:38:49.722107+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18386,
+ "diff": -18385
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18386,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11427,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16977,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18368
+ },
+ "generated_at": "2026-01-26T18:38:57.643275+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-02-01T00:00:00+08:00",
+ "end": "2025-03-01T00:00:00+08:00",
+ "label": "month_2025-02-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-01-31T22:00:00+08:00",
+ "end": "2025-03-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 28,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9939,
+ "records_with_pk": 9939,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11770,
+ "records_with_pk": 11770,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16977,
+ "records_with_pk": 16977,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2460,
+ "records_with_pk": 2460,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8160,
+ "records_with_pk": 8160,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1735,
+ "records_with_pk": 1735,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T18:41:25.769291+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18386,
+ "diff": -18385
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18386,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11427,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16977,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18368
+ },
+ "generated_at": "2026-01-26T18:41:33.883748+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-03-01T00:00:00+08:00",
+ "end": "2025-04-01T00:00:00+08:00",
+ "label": "month_2025-03-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-02-28T22:00:00+08:00",
+ "end": "2025-04-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9939,
+ "records_with_pk": 9939,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11770,
+ "records_with_pk": 11770,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16977,
+ "records_with_pk": 16977,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2460,
+ "records_with_pk": 2460,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8160,
+ "records_with_pk": 8160,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1735,
+ "records_with_pk": 1735,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T18:44:05.340888+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18386,
+ "diff": -18385
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18386,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11427,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16977,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18368
+ },
+ "generated_at": "2026-01-26T18:44:13.179324+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-04-01T00:00:00+08:00",
+ "end": "2025-05-01T00:00:00+08:00",
+ "label": "month_2025-04-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-03-31T22:00:00+08:00",
+ "end": "2025-05-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9939,
+ "records_with_pk": 9939,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11771,
+ "records_with_pk": 11771,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16977,
+ "records_with_pk": 16977,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2460,
+ "records_with_pk": 2460,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8161,
+ "records_with_pk": 8161,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985891013
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1735,
+ "records_with_pk": 1735,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T18:46:43.078754+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18386,
+ "diff": -18385
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18386,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11427,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16977,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18368
+ },
+ "generated_at": "2026-01-26T18:46:50.930848+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-05-01T00:00:00+08:00",
+ "end": "2025-06-01T00:00:00+08:00",
+ "label": "month_2025-05-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-04-30T22:00:00+08:00",
+ "end": "2025-06-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985350341
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11771,
+ "records_with_pk": 11771,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052983007429
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16978,
+ "records_with_pk": 16978,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068054386329861
+ }
+ ],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2460,
+ "records_with_pk": 2460,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8161,
+ "records_with_pk": 8161,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985891013
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1735,
+ "records_with_pk": 1735,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 4,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T18:49:22.666606+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18386,
+ "diff": -18385
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18386,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11427,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16977,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18368
+ },
+ "generated_at": "2026-01-26T18:49:30.492059+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-06-01T00:00:00+08:00",
+ "end": "2025-07-01T00:00:00+08:00",
+ "label": "month_2025-06-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-05-31T22:00:00+08:00",
+ "end": "2025-07-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985350341
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11771,
+ "records_with_pk": 11771,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052983007429
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16978,
+ "records_with_pk": 16978,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068054386329861
+ }
+ ],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2460,
+ "records_with_pk": 2460,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8161,
+ "records_with_pk": 8161,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985891013
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1735,
+ "records_with_pk": 1735,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 4,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T18:51:59.529360+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18386,
+ "diff": -18385
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18386,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11427,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16977,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18368
+ },
+ "generated_at": "2026-01-26T18:52:07.305231+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-07-01T00:00:00+08:00",
+ "end": "2025-08-01T00:00:00+08:00",
+ "label": "month_2025-07-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-06-30T22:00:00+08:00",
+ "end": "2025-08-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1798,
+ "records_with_pk": 1798,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 11,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985350341
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 355,
+ "records_with_pk": 355,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11771,
+ "records_with_pk": 11771,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052983007429
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16978,
+ "records_with_pk": 16978,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068054386329861
+ }
+ ],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2460,
+ "records_with_pk": 2460,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 44,
+ "records_with_pk": 44,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8161,
+ "records_with_pk": 8161,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985891013
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 2578,
+ "records_with_pk": 2578,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 15,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1735,
+ "records_with_pk": 1735,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 1867,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 12,
+ "skipped_missing_pk": 1867,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 4,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T18:54:52.477989+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18386,
+ "diff": -18385
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1246,
+ "diff": -1246
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 23,
+ "ods": 23,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 466,
+ "ods": 466,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 751,
+ "ods": 751,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 149,
+ "ods": 149,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 14,
+ "ods": 14,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1246,
+ "ods": 1246,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 18607.65,
+ "ods_sum": 18607.65,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 68759.8,
+ "ods_sum": 68759.8,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 133842.45,
+ "ods_sum": 133842.45,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 10234.83,
+ "ods_sum": 10234.83,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 46883.63,
+ "ods_sum": 46883.63,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18386,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1575,
+ "ods": 1575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 14.25,
+ "ods_sum": 14.25,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 31186.8,
+ "ods_sum": 31186.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 29160.8,
+ "ods_sum": 29160.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 351,
+ "ods": 351,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1261.59,
+ "ods_sum": 1261.59,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 113232.99,
+ "ods_sum": 113232.99,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11427,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1007,
+ "ods": 1007,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 72348.0,
+ "ods_sum": 72348.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16977,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1833,
+ "ods": 1833,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 178060.0,
+ "ods_sum": 178060.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19614
+ },
+ "generated_at": "2026-01-26T18:55:00.181811+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-08-01T00:00:00+08:00",
+ "end": "2025-09-01T00:00:00+08:00",
+ "label": "month_2025-08-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-07-31T22:00:00+08:00",
+ "end": "2025-09-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4653,
+ "records_with_pk": 4653,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 26,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985350341
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 867,
+ "records_with_pk": 867,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11771,
+ "records_with_pk": 11771,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052983007429
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16978,
+ "records_with_pk": 16978,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068054386329861
+ }
+ ],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2460,
+ "records_with_pk": 2460,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 96,
+ "records_with_pk": 96,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8161,
+ "records_with_pk": 8161,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985891013
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5271,
+ "records_with_pk": 5271,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 28,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1735,
+ "records_with_pk": 1735,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4817,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 26,
+ "skipped_missing_pk": 4817,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 4,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T18:58:09.968647+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18386,
+ "diff": -18385
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3587,
+ "diff": -3587
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 18,
+ "ods": 18,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 51,
+ "ods": 51,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3587,
+ "ods": 3587,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 54919.33,
+ "ods_sum": 54919.33,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 186359.95,
+ "ods_sum": 186359.95,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 383097.96,
+ "ods_sum": 383097.96,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 44840.88,
+ "ods_sum": 44840.88,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 145513.13,
+ "ods_sum": 145513.13,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18386,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4305,
+ "ods": 4305,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 47.45,
+ "ods_sum": 47.45,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 87523.4,
+ "ods_sum": 87523.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 83759.0,
+ "ods_sum": 83759.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 859,
+ "ods": 859,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1874.75,
+ "ods_sum": 1874.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 268501.57,
+ "ods_sum": 268501.57,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11427,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2850,
+ "ods": 2850,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 189960.0,
+ "ods_sum": 189960.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16977,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4763,
+ "ods": 4763,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 381598.0,
+ "ods_sum": 381598.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -21955
+ },
+ "generated_at": "2026-01-26T18:58:17.626016+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-09-01T00:00:00+08:00",
+ "end": "2025-10-01T00:00:00+08:00",
+ "label": "month_2025-09-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-08-31T22:00:00+08:00",
+ "end": "2025-10-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3738,
+ "records_with_pk": 3738,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 21,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985350341
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 655,
+ "records_with_pk": 655,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11771,
+ "records_with_pk": 11771,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052983007429
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16978,
+ "records_with_pk": 16978,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068054386329861
+ }
+ ],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2460,
+ "records_with_pk": 2460,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 54,
+ "records_with_pk": 54,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8161,
+ "records_with_pk": 8161,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985891013
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 4853,
+ "records_with_pk": 4853,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 27,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1735,
+ "records_with_pk": 1735,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 3828,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 3828,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 4,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T19:01:18.117991+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18386,
+ "diff": -18385
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1264,
+ "diff": -1264
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 11,
+ "ods": 11,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1264,
+ "ods": 1264,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 11020.51,
+ "ods_sum": 11020.51,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 73893.75,
+ "ods_sum": 73893.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 137203.92,
+ "ods_sum": 137203.92,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 15685.02,
+ "ods_sum": 15685.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 52340.33,
+ "ods_sum": 52340.33,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18386,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1449,
+ "ods": 1449,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1.41,
+ "ods_sum": 1.41,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 24706.9,
+ "ods_sum": 24706.9,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 23874.4,
+ "ods_sum": 23874.4,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 654,
+ "ods": 654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 781.44,
+ "ods_sum": 781.44,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 192541.75,
+ "ods_sum": 192541.75,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1173,
+ "ods": 1173,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 75824.0,
+ "ods_sum": 75824.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 73843.08,
+ "ods_sum": 73843.08,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11427,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 184722.0,
+ "ods_sum": 184722.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16977,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1544,
+ "ods": 1544,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 108880.0,
+ "ods_sum": 108880.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -1011.0,
+ "ods_sum": -1011.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19632
+ },
+ "generated_at": "2026-01-26T19:01:25.909968+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-10-01T00:00:00+08:00",
+ "end": "2025-11-01T00:00:00+08:00",
+ "label": "month_2025-10-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-09-30T22:00:00+08:00",
+ "end": "2025-11-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 607,
+ "records_with_pk": 607,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985350341
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 136,
+ "records_with_pk": 136,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4,
+ "records_with_pk": 4,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11771,
+ "records_with_pk": 11771,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052983007429
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16979,
+ "records_with_pk": 16979,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068068669081733
+ },
+ {
+ "id": 3068054386329861
+ }
+ ],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2460,
+ "records_with_pk": 2460,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11,
+ "records_with_pk": 11,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8161,
+ "records_with_pk": 8161,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985891013
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 997,
+ "records_with_pk": 997,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1735,
+ "records_with_pk": 1735,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 619,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 619,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 5,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T19:03:53.935724+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18386,
+ "diff": -18385
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2824,
+ "diff": -2824
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 21,
+ "ods": 21,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2824,
+ "ods": 2824,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 40394.85,
+ "ods_sum": 40394.85,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 310789.49,
+ "ods_sum": 310789.49,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33315.15,
+ "ods_sum": 33315.15,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 116393.37,
+ "ods_sum": 116393.37,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18386,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3475,
+ "ods": 3475,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1319.49,
+ "ods_sum": 1319.49,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 66216.8,
+ "ods_sum": 66216.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 64234.0,
+ "ods_sum": 64234.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 573,
+ "ods": 573,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 2143.56,
+ "ods_sum": 2143.56,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 172536.78,
+ "ods_sum": 172536.78,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2490,
+ "ods": 2490,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160988.0,
+ "ods_sum": 160988.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11427,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2489,
+ "ods": 2489,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160076.0,
+ "ods_sum": 160076.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16977,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3616,
+ "ods": 3616,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 286088.0,
+ "ods_sum": 286088.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -47020.0,
+ "ods_sum": -47020.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -21192
+ },
+ "generated_at": "2026-01-26T19:04:01.765414+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-11-01T00:00:00+08:00",
+ "end": "2025-12-01T00:00:00+08:00",
+ "label": "month_2025-11-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-10-31T22:00:00+08:00",
+ "end": "2025-12-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3927,
+ "records_with_pk": 3927,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985350341
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 890,
+ "records_with_pk": 890,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 12,
+ "records_with_pk": 12,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11771,
+ "records_with_pk": 11771,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052983007429
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16979,
+ "records_with_pk": 16979,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068068669081733
+ },
+ {
+ "id": 3068054386329861
+ }
+ ],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2460,
+ "records_with_pk": 2460,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 80,
+ "records_with_pk": 80,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8161,
+ "records_with_pk": 8161,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985891013
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5561,
+ "records_with_pk": 5561,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 30,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1735,
+ "records_with_pk": 1735,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4052,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 4052,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 5,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T19:07:00.229045+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18386,
+ "diff": -18385
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3336,
+ "diff": -3336
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 12,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 40,
+ "ods": 40,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 80,
+ "ods": 80,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3336,
+ "ods": 3336,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71642.8,
+ "ods_sum": 71642.8,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 394705.62,
+ "ods_sum": 394705.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33307.25,
+ "ods_sum": 33307.25,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 156623.79,
+ "ods_sum": 156623.79,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18386,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4134,
+ "ods": 4134,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1544.05,
+ "ods_sum": 1544.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 98139.8,
+ "ods_sum": 98139.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 87610.8,
+ "ods_sum": 87610.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 884,
+ "ods": 884,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1437.75,
+ "ods_sum": 1437.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 281102.62,
+ "ods_sum": 281102.62,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2838,
+ "ods": 2838,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 172860.0,
+ "ods_sum": 172860.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11427,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2843,
+ "ods": 2843,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 173800.0,
+ "ods_sum": 173800.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16977,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3999,
+ "ods": 3999,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 457185.0,
+ "ods_sum": 457185.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 17,
+ "ods": 17,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -16567.0,
+ "ods_sum": -16567.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -21704
+ },
+ "generated_at": "2026-01-26T19:07:07.983588+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-12-01T00:00:00+08:00",
+ "end": "2026-01-01T00:00:00+08:00",
+ "label": "month_2025-12-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-11-30T22:00:00+08:00",
+ "end": "2026-01-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4044,
+ "records_with_pk": 4044,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 23,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985350341
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 984,
+ "records_with_pk": 984,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 35,
+ "records_with_pk": 35,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11771,
+ "records_with_pk": 11771,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052983007429
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16979,
+ "records_with_pk": 16979,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068068669081733
+ },
+ {
+ "id": 3068054386329861
+ }
+ ],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2460,
+ "records_with_pk": 2460,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 70,
+ "records_with_pk": 70,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8161,
+ "records_with_pk": 8161,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985891013
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5490,
+ "records_with_pk": 5490,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 30,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1735,
+ "records_with_pk": 1735,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4151,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 23,
+ "skipped_missing_pk": 4151,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 5,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T19:10:07.271731+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18386,
+ "diff": -18385
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3479,
+ "diff": -3479
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 12,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3479,
+ "ods": 3479,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71445.57,
+ "ods_sum": 71445.57,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 432220.76,
+ "ods_sum": 432220.76,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 34544.63,
+ "ods_sum": 34544.63,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 189974.44,
+ "ods_sum": 189974.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18386,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2625,
+ "ods": 2625,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 190.1,
+ "ods_sum": 190.1,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 65814.4,
+ "ods_sum": 65814.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 63275.9,
+ "ods_sum": 63275.9,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 975,
+ "ods": 975,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 3190.05,
+ "ods_sum": 3190.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 322183.69,
+ "ods_sum": 322183.69,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2816,
+ "ods": 2816,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 179652.0,
+ "ods_sum": 179652.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11427,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2827,
+ "ods": 2827,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 180232.0,
+ "ods_sum": 180232.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16977,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4118,
+ "ods": 4118,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 472999.0,
+ "ods_sum": 472999.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -4314.0,
+ "ods_sum": -4314.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -21847
+ },
+ "generated_at": "2026-01-26T19:10:14.988226+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-01T00:00:00+08:00",
+ "end": "2026-01-08T00:00:00+08:00",
+ "label": "week_2026-01-01",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-12-31T22:00:00+08:00",
+ "end": "2026-01-08T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 138,
+ "records_with_pk": 138,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 827,
+ "records_with_pk": 827,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985350341
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 167,
+ "records_with_pk": 167,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10,
+ "records_with_pk": 10,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11771,
+ "records_with_pk": 11771,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052983007429
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16980,
+ "records_with_pk": 16980,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3068078500645061
+ },
+ {
+ "id": 3068068669081733
+ },
+ {
+ "id": 3068054386329861
+ }
+ ],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2460,
+ "records_with_pk": 2460,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8161,
+ "records_with_pk": 8161,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985891013
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 880,
+ "records_with_pk": 880,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1735,
+ "records_with_pk": 1735,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 851,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 851,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 6,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T19:12:45.645937+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18386,
+ "diff": -18385
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 699,
+ "diff": -699
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 699,
+ "ods": 699,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 8896.03,
+ "ods_sum": 8896.03,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 74693.62,
+ "ods_sum": 74693.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6587.39,
+ "ods_sum": 6587.39,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30138.48,
+ "ods_sum": 30138.48,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18386,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 157,
+ "ods": 157,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 46522.68,
+ "ods_sum": 46522.68,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 569,
+ "ods": 569,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37392.0,
+ "ods_sum": 37392.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11427,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 566,
+ "ods": 566,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37228.0,
+ "ods_sum": 37228.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16977,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 823,
+ "ods": 823,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 78730.0,
+ "ods_sum": 78730.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -7.0,
+ "ods_sum": -7.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19067
+ },
+ "generated_at": "2026-01-26T19:12:53.309926+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-08T00:00:00+08:00",
+ "end": "2026-01-15T00:00:00+08:00",
+ "label": "week_2026-01-08",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-07T22:00:00+08:00",
+ "end": "2026-01-15T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 790,
+ "records_with_pk": 790,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985350341
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 195,
+ "records_with_pk": 195,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 22,
+ "records_with_pk": 22,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11771,
+ "records_with_pk": 11771,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052983007429
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16980,
+ "records_with_pk": 16980,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3068078500645061
+ },
+ {
+ "id": 3068068669081733
+ },
+ {
+ "id": 3068054386329861
+ }
+ ],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2460,
+ "records_with_pk": 2460,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 15,
+ "records_with_pk": 15,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8161,
+ "records_with_pk": 8161,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985891013
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1241,
+ "records_with_pk": 1241,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1735,
+ "records_with_pk": 1735,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 814,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 814,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 6,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T19:15:20.585365+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18386,
+ "diff": -18385
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 672,
+ "diff": -672
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 672,
+ "ods": 672,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 16159.12,
+ "ods_sum": 16159.12,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 82416.19,
+ "ods_sum": 82416.19,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6098.02,
+ "ods_sum": 6098.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30731.98,
+ "ods_sum": 30731.98,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18386,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 188,
+ "ods": 188,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 190.72,
+ "ods_sum": 190.72,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 54584.19,
+ "ods_sum": 54584.19,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 572,
+ "ods": 572,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37214.0,
+ "ods_sum": 37214.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11427,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 575,
+ "ods": 575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37262.0,
+ "ods_sum": 37262.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16977,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 790,
+ "ods": 790,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 86381.0,
+ "ods_sum": 86381.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -39.0,
+ "ods_sum": -39.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19040
+ },
+ "generated_at": "2026-01-26T19:15:28.732577+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-15T00:00:00+08:00",
+ "end": "2026-01-22T00:00:00+08:00",
+ "label": "week_2026-01-15",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-14T22:00:00+08:00",
+ "end": "2026-01-22T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 899,
+ "records_with_pk": 899,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985350341
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 216,
+ "records_with_pk": 216,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 6,
+ "records_with_pk": 6,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11771,
+ "records_with_pk": 11771,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052983007429
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16980,
+ "records_with_pk": 16980,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3068078500645061
+ },
+ {
+ "id": 3068068669081733
+ },
+ {
+ "id": 3068054386329861
+ }
+ ],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2460,
+ "records_with_pk": 2460,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 21,
+ "records_with_pk": 21,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8161,
+ "records_with_pk": 8161,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985891013
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1181,
+ "records_with_pk": 1181,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1735,
+ "records_with_pk": 1735,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 932,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 932,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 6,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T19:17:54.522162+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18386,
+ "diff": -18385
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 776,
+ "diff": -776
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 776,
+ "ods": 776,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 16959.34,
+ "ods_sum": 16959.34,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 38520.64,
+ "ods_sum": 38520.64,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 93110.51,
+ "ods_sum": 93110.51,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 5009.13,
+ "ods_sum": 5009.13,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 40591.34,
+ "ods_sum": 40591.34,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18386,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 212,
+ "ods": 212,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 191.21,
+ "ods_sum": 191.21,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 70610.77,
+ "ods_sum": 70610.77,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 613,
+ "ods": 613,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 40100.0,
+ "ods_sum": 40100.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 38520.64,
+ "ods_sum": 38520.64,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11427,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 616,
+ "ods": 616,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 40456.0,
+ "ods_sum": 40456.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16977,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 896,
+ "ods": 896,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 123718.0,
+ "ods_sum": 123718.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -34.0,
+ "ods_sum": -34.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19144
+ },
+ "generated_at": "2026-01-26T19:18:02.558874+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-22T00:00:00+08:00",
+ "end": "2026-01-26T00:00:00+08:00",
+ "label": "week_2026-01-22",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-21T22:00:00+08:00",
+ "end": "2026-01-26T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 4,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 540,
+ "records_with_pk": 540,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985350341
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 147,
+ "records_with_pk": 147,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 5,
+ "records_with_pk": 5,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11771,
+ "records_with_pk": 11771,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052983007429
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16981,
+ "records_with_pk": 16981,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3068085950662789
+ },
+ {
+ "id": 3068078500645061
+ },
+ {
+ "id": 3068068669081733
+ },
+ {
+ "id": 3068054386329861
+ }
+ ],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2460,
+ "records_with_pk": 2460,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 6,
+ "records_with_pk": 6,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8161,
+ "records_with_pk": 8161,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068052985891013
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 953,
+ "records_with_pk": 953,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1735,
+ "records_with_pk": 1735,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 551,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 551,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 7,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T19:20:30.475266+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18386,
+ "diff": -18385
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 465,
+ "diff": -465
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 465,
+ "ods": 465,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 9264.7,
+ "ods_sum": 9264.7,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 21930.18,
+ "ods_sum": 21930.18,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 61454.19,
+ "ods_sum": 61454.19,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 1649.19,
+ "ods_sum": 1649.19,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 28610.12,
+ "ods_sum": 28610.12,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18386,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 138,
+ "ods": 138,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 40013.33,
+ "ods_sum": 40013.33,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 331,
+ "ods": 331,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 22654.0,
+ "ods_sum": 22654.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 21930.18,
+ "ods_sum": 21930.18,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11427,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 330,
+ "ods": 330,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 22452.0,
+ "ods_sum": 22452.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16977,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 524,
+ "ods": 524,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 59984.0,
+ "ods_sum": 59984.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -7.0,
+ "ods_sum": -7.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18833
+ },
+ "generated_at": "2026-01-26T19:20:38.513902+08:00"
+ }
+ ],
+ "total_missing": 61,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T19:20:38.513921+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_history_20260126_205212.json b/etl_billiards/reports/data_integrity_history_20260126_205212.json
new file mode 100644
index 0000000..c9a05e0
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_history_20260126_205212.json
@@ -0,0 +1,11273 @@
+{
+ "mode": "history",
+ "start": "2025-07-01T00:00:00+08:00",
+ "end": "2026-01-26T20:34:55.893505+08:00",
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-07-01T00:00:00+08:00",
+ "end": "2025-08-01T00:00:00+08:00",
+ "label": "month_2025-07-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-06-30T22:00:00+08:00",
+ "end": "2025-08-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1798,
+ "records_with_pk": 1798,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 11,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9950,
+ "records_with_pk": 9950,
+ "missing": 10,
+ "missing_samples": [
+ {
+ "id": 3068147084101765
+ },
+ {
+ "id": 3068144682748165
+ },
+ {
+ "id": 3068137883715845
+ },
+ {
+ "id": 3068137496643781
+ },
+ {
+ "id": 3068136781121733
+ },
+ {
+ "id": 3068136781088965
+ },
+ {
+ "id": 3068116743686405
+ },
+ {
+ "id": 3068116691830917
+ },
+ {
+ "id": 3068111488747717
+ },
+ {
+ "id": 3068092242069701
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 355,
+ "records_with_pk": 355,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11780,
+ "records_with_pk": 11780,
+ "missing": 9,
+ "missing_samples": [
+ {
+ "id": 3068147081676933
+ },
+ {
+ "id": 3068144680323333
+ },
+ {
+ "id": 3068137880373509
+ },
+ {
+ "id": 3068137493563589
+ },
+ {
+ "id": 3068136777763013
+ },
+ {
+ "id": 3068116741064965
+ },
+ {
+ "id": 3068116689406085
+ },
+ {
+ "id": 3068111485782213
+ },
+ {
+ "id": 3068092239743173
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16994,
+ "records_with_pk": 16994,
+ "missing": 13,
+ "missing_samples": [
+ {
+ "id": 3068148319062213
+ },
+ {
+ "id": 3068146395908357
+ },
+ {
+ "id": 3068144802646213
+ },
+ {
+ "id": 3068143756839239
+ },
+ {
+ "id": 3068143756839238
+ },
+ {
+ "id": 3068143756839237
+ },
+ {
+ "id": 3068136318617733
+ },
+ {
+ "id": 3068128340887877
+ },
+ {
+ "id": 3068121241585925
+ },
+ {
+ "id": 3068118919940421
+ },
+ {
+ "id": 3068118229600453
+ },
+ {
+ "id": 3068113712285957
+ },
+ {
+ "id": 3068091996113029
+ }
+ ],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2460,
+ "records_with_pk": 2460,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 44,
+ "records_with_pk": 44,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8168,
+ "records_with_pk": 8168,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068147084724357
+ },
+ {
+ "id": 3068137884977413
+ },
+ {
+ "id": 3068137497528517
+ },
+ {
+ "id": 3068116744390917
+ },
+ {
+ "id": 3068116692404357
+ },
+ {
+ "id": 3068111489616069
+ },
+ {
+ "id": 3068092242643141
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 2578,
+ "records_with_pk": 2578,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 15,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1736,
+ "records_with_pk": 1736,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068144683387141
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 1867,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 12,
+ "skipped_missing_pk": 1867,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 40,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T20:25:56.834455+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1246,
+ "ods": 1246,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 18607.65,
+ "ods_sum": 18607.65,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 68759.8,
+ "ods_sum": 68759.8,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 133842.45,
+ "ods_sum": 133842.45,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 10234.83,
+ "ods_sum": 10234.83,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 46883.63,
+ "ods_sum": 46883.63,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18387,
+ "diff": -1
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1575,
+ "ods": 1575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 14.25,
+ "ods_sum": 14.25,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 31186.8,
+ "ods_sum": 31186.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 29160.8,
+ "ods_sum": 29160.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 351,
+ "ods": 351,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1261.59,
+ "ods_sum": 1261.59,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 113232.99,
+ "ods_sum": 113232.99,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11428,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1007,
+ "ods": 1007,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 72348.0,
+ "ods_sum": 72348.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16981,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1833,
+ "ods": 1833,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 178060.0,
+ "ods_sum": 178060.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -6
+ },
+ "generated_at": "2026-01-26T20:26:03.152991+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-08-01T00:00:00+08:00",
+ "end": "2025-09-01T00:00:00+08:00",
+ "label": "month_2025-08-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-07-31T22:00:00+08:00",
+ "end": "2025-09-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4653,
+ "records_with_pk": 4653,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 26,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9950,
+ "records_with_pk": 9950,
+ "missing": 10,
+ "missing_samples": [
+ {
+ "id": 3068147084101765
+ },
+ {
+ "id": 3068144682748165
+ },
+ {
+ "id": 3068137883715845
+ },
+ {
+ "id": 3068137496643781
+ },
+ {
+ "id": 3068136781121733
+ },
+ {
+ "id": 3068136781088965
+ },
+ {
+ "id": 3068116743686405
+ },
+ {
+ "id": 3068116691830917
+ },
+ {
+ "id": 3068111488747717
+ },
+ {
+ "id": 3068092242069701
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 867,
+ "records_with_pk": 867,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11780,
+ "records_with_pk": 11780,
+ "missing": 9,
+ "missing_samples": [
+ {
+ "id": 3068147081676933
+ },
+ {
+ "id": 3068144680323333
+ },
+ {
+ "id": 3068137880373509
+ },
+ {
+ "id": 3068137493563589
+ },
+ {
+ "id": 3068136777763013
+ },
+ {
+ "id": 3068116741064965
+ },
+ {
+ "id": 3068116689406085
+ },
+ {
+ "id": 3068111485782213
+ },
+ {
+ "id": 3068092239743173
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16994,
+ "records_with_pk": 16994,
+ "missing": 13,
+ "missing_samples": [
+ {
+ "id": 3068148319062213
+ },
+ {
+ "id": 3068146395908357
+ },
+ {
+ "id": 3068144802646213
+ },
+ {
+ "id": 3068143756839239
+ },
+ {
+ "id": 3068143756839238
+ },
+ {
+ "id": 3068143756839237
+ },
+ {
+ "id": 3068136318617733
+ },
+ {
+ "id": 3068128340887877
+ },
+ {
+ "id": 3068121241585925
+ },
+ {
+ "id": 3068118919940421
+ },
+ {
+ "id": 3068118229600453
+ },
+ {
+ "id": 3068113712285957
+ },
+ {
+ "id": 3068091996113029
+ }
+ ],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2460,
+ "records_with_pk": 2460,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 96,
+ "records_with_pk": 96,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8168,
+ "records_with_pk": 8168,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068147084724357
+ },
+ {
+ "id": 3068137884977413
+ },
+ {
+ "id": 3068137497528517
+ },
+ {
+ "id": 3068116744390917
+ },
+ {
+ "id": 3068116692404357
+ },
+ {
+ "id": 3068111489616069
+ },
+ {
+ "id": 3068092242643141
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5271,
+ "records_with_pk": 5271,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 28,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1736,
+ "records_with_pk": 1736,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068144683387141
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4817,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 26,
+ "skipped_missing_pk": 4817,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 40,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T20:29:15.544082+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3587,
+ "ods": 3587,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 54919.33,
+ "ods_sum": 54919.33,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 186359.95,
+ "ods_sum": 186359.95,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 383097.96,
+ "ods_sum": 383097.96,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 44840.88,
+ "ods_sum": 44840.88,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 145513.13,
+ "ods_sum": 145513.13,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18387,
+ "diff": -1
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4305,
+ "ods": 4305,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 47.45,
+ "ods_sum": 47.45,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 87523.4,
+ "ods_sum": 87523.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 83759.0,
+ "ods_sum": 83759.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 859,
+ "ods": 859,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1874.75,
+ "ods_sum": 1874.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 268501.57,
+ "ods_sum": 268501.57,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11428,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2850,
+ "ods": 2850,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 189960.0,
+ "ods_sum": 189960.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16981,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4763,
+ "ods": 4763,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 381598.0,
+ "ods_sum": 381598.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -6
+ },
+ "generated_at": "2026-01-26T20:29:21.794699+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-09-01T00:00:00+08:00",
+ "end": "2025-10-01T00:00:00+08:00",
+ "label": "month_2025-09-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-08-31T22:00:00+08:00",
+ "end": "2025-10-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3738,
+ "records_with_pk": 3738,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 21,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9950,
+ "records_with_pk": 9950,
+ "missing": 10,
+ "missing_samples": [
+ {
+ "id": 3068147084101765
+ },
+ {
+ "id": 3068144682748165
+ },
+ {
+ "id": 3068137883715845
+ },
+ {
+ "id": 3068137496643781
+ },
+ {
+ "id": 3068136781121733
+ },
+ {
+ "id": 3068136781088965
+ },
+ {
+ "id": 3068116743686405
+ },
+ {
+ "id": 3068116691830917
+ },
+ {
+ "id": 3068111488747717
+ },
+ {
+ "id": 3068092242069701
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 655,
+ "records_with_pk": 655,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11781,
+ "records_with_pk": 11781,
+ "missing": 9,
+ "missing_samples": [
+ {
+ "id": 3068147081676933
+ },
+ {
+ "id": 3068144680323333
+ },
+ {
+ "id": 3068137880373509
+ },
+ {
+ "id": 3068137493563589
+ },
+ {
+ "id": 3068136777763013
+ },
+ {
+ "id": 3068116741064965
+ },
+ {
+ "id": 3068116689406085
+ },
+ {
+ "id": 3068111485782213
+ },
+ {
+ "id": 3068092239743173
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16996,
+ "records_with_pk": 16996,
+ "missing": 15,
+ "missing_samples": [
+ {
+ "id": 3068156135868741
+ },
+ {
+ "id": 3068154759743749
+ },
+ {
+ "id": 3068148319062213
+ },
+ {
+ "id": 3068146395908357
+ },
+ {
+ "id": 3068144802646213
+ },
+ {
+ "id": 3068143756839239
+ },
+ {
+ "id": 3068143756839238
+ },
+ {
+ "id": 3068143756839237
+ },
+ {
+ "id": 3068136318617733
+ },
+ {
+ "id": 3068128340887877
+ },
+ {
+ "id": 3068121241585925
+ },
+ {
+ "id": 3068118919940421
+ },
+ {
+ "id": 3068118229600453
+ },
+ {
+ "id": 3068113712285957
+ },
+ {
+ "id": 3068091996113029
+ }
+ ],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2461,
+ "records_with_pk": 2461,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068156519303493
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 54,
+ "records_with_pk": 54,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8168,
+ "records_with_pk": 8168,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068147084724357
+ },
+ {
+ "id": 3068137884977413
+ },
+ {
+ "id": 3068137497528517
+ },
+ {
+ "id": 3068116744390917
+ },
+ {
+ "id": 3068116692404357
+ },
+ {
+ "id": 3068111489616069
+ },
+ {
+ "id": 3068092242643141
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 4853,
+ "records_with_pk": 4853,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 27,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1736,
+ "records_with_pk": 1736,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068144683387141
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 3828,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 3828,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 43,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T20:32:27.027380+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1264,
+ "ods": 1264,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 11020.51,
+ "ods_sum": 11020.51,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 73893.75,
+ "ods_sum": 73893.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 137203.92,
+ "ods_sum": 137203.92,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 15685.02,
+ "ods_sum": 15685.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 52340.33,
+ "ods_sum": 52340.33,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18387,
+ "diff": -1
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1449,
+ "ods": 1449,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1.41,
+ "ods_sum": 1.41,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 24706.9,
+ "ods_sum": 24706.9,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 23874.4,
+ "ods_sum": 23874.4,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 654,
+ "ods": 654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 781.44,
+ "ods_sum": 781.44,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 192541.75,
+ "ods_sum": 192541.75,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1173,
+ "ods": 1173,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 75824.0,
+ "ods_sum": 75824.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 73843.08,
+ "ods_sum": 73843.08,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11428,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 184722.0,
+ "ods_sum": 184722.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16981,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1544,
+ "ods": 1544,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 108880.0,
+ "ods_sum": 108880.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -1011.0,
+ "ods_sum": -1011.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -6
+ },
+ "generated_at": "2026-01-26T20:32:33.303569+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-10-01T00:00:00+08:00",
+ "end": "2025-11-01T00:00:00+08:00",
+ "label": "month_2025-10-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-09-30T22:00:00+08:00",
+ "end": "2025-11-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 607,
+ "records_with_pk": 607,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9950,
+ "records_with_pk": 9950,
+ "missing": 10,
+ "missing_samples": [
+ {
+ "id": 3068147084101765
+ },
+ {
+ "id": 3068144682748165
+ },
+ {
+ "id": 3068137883715845
+ },
+ {
+ "id": 3068137496643781
+ },
+ {
+ "id": 3068136781121733
+ },
+ {
+ "id": 3068136781088965
+ },
+ {
+ "id": 3068116743686405
+ },
+ {
+ "id": 3068116691830917
+ },
+ {
+ "id": 3068111488747717
+ },
+ {
+ "id": 3068092242069701
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 136,
+ "records_with_pk": 136,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4,
+ "records_with_pk": 4,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11781,
+ "records_with_pk": 11781,
+ "missing": 10,
+ "missing_samples": [
+ {
+ "id": 3068156518615365
+ },
+ {
+ "id": 3068147081676933
+ },
+ {
+ "id": 3068144680323333
+ },
+ {
+ "id": 3068137880373509
+ },
+ {
+ "id": 3068137493563589
+ },
+ {
+ "id": 3068136777763013
+ },
+ {
+ "id": 3068116741064965
+ },
+ {
+ "id": 3068116689406085
+ },
+ {
+ "id": 3068111485782213
+ },
+ {
+ "id": 3068092239743173
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16996,
+ "records_with_pk": 16996,
+ "missing": 15,
+ "missing_samples": [
+ {
+ "id": 3068156135868741
+ },
+ {
+ "id": 3068154759743749
+ },
+ {
+ "id": 3068148319062213
+ },
+ {
+ "id": 3068146395908357
+ },
+ {
+ "id": 3068144802646213
+ },
+ {
+ "id": 3068143756839239
+ },
+ {
+ "id": 3068143756839238
+ },
+ {
+ "id": 3068143756839237
+ },
+ {
+ "id": 3068136318617733
+ },
+ {
+ "id": 3068128340887877
+ },
+ {
+ "id": 3068121241585925
+ },
+ {
+ "id": 3068118919940421
+ },
+ {
+ "id": 3068118229600453
+ },
+ {
+ "id": 3068113712285957
+ },
+ {
+ "id": 3068091996113029
+ }
+ ],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2461,
+ "records_with_pk": 2461,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068156519303493
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11,
+ "records_with_pk": 11,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8168,
+ "records_with_pk": 8168,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068147084724357
+ },
+ {
+ "id": 3068137884977413
+ },
+ {
+ "id": 3068137497528517
+ },
+ {
+ "id": 3068116744390917
+ },
+ {
+ "id": 3068116692404357
+ },
+ {
+ "id": 3068111489616069
+ },
+ {
+ "id": 3068092242643141
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 997,
+ "records_with_pk": 997,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1736,
+ "records_with_pk": 1736,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068144683387141
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 619,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 619,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 44,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T20:35:06.503546+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2824,
+ "ods": 2824,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 40394.85,
+ "ods_sum": 40394.85,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 310789.49,
+ "ods_sum": 310789.49,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33315.15,
+ "ods_sum": 33315.15,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 116393.37,
+ "ods_sum": 116393.37,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18387,
+ "diff": -1
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3475,
+ "ods": 3475,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1319.49,
+ "ods_sum": 1319.49,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 66216.8,
+ "ods_sum": 66216.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 64234.0,
+ "ods_sum": 64234.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 573,
+ "ods": 573,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 2143.56,
+ "ods_sum": 2143.56,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 172536.78,
+ "ods_sum": 172536.78,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2490,
+ "ods": 2490,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160988.0,
+ "ods_sum": 160988.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11428,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2489,
+ "ods": 2489,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160076.0,
+ "ods_sum": 160076.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16981,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3616,
+ "ods": 3616,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 286088.0,
+ "ods_sum": 286088.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -47020.0,
+ "ods_sum": -47020.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -6
+ },
+ "generated_at": "2026-01-26T20:35:12.766478+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-11-01T00:00:00+08:00",
+ "end": "2025-12-01T00:00:00+08:00",
+ "label": "month_2025-11-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-10-31T22:00:00+08:00",
+ "end": "2025-12-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3927,
+ "records_with_pk": 3927,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9951,
+ "records_with_pk": 9951,
+ "missing": 11,
+ "missing_samples": [
+ {
+ "id": 3068161263093893
+ },
+ {
+ "id": 3068147084101765
+ },
+ {
+ "id": 3068144682748165
+ },
+ {
+ "id": 3068137883715845
+ },
+ {
+ "id": 3068137496643781
+ },
+ {
+ "id": 3068136781121733
+ },
+ {
+ "id": 3068136781088965
+ },
+ {
+ "id": 3068116743686405
+ },
+ {
+ "id": 3068116691830917
+ },
+ {
+ "id": 3068111488747717
+ },
+ {
+ "id": 3068092242069701
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 890,
+ "records_with_pk": 890,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 12,
+ "records_with_pk": 12,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11782,
+ "records_with_pk": 11782,
+ "missing": 11,
+ "missing_samples": [
+ {
+ "id": 3068161259849861
+ },
+ {
+ "id": 3068156518615365
+ },
+ {
+ "id": 3068147081676933
+ },
+ {
+ "id": 3068144680323333
+ },
+ {
+ "id": 3068137880373509
+ },
+ {
+ "id": 3068137493563589
+ },
+ {
+ "id": 3068136777763013
+ },
+ {
+ "id": 3068116741064965
+ },
+ {
+ "id": 3068116689406085
+ },
+ {
+ "id": 3068111485782213
+ },
+ {
+ "id": 3068092239743173
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16997,
+ "records_with_pk": 16997,
+ "missing": 16,
+ "missing_samples": [
+ {
+ "id": 3068160926992709
+ },
+ {
+ "id": 3068156135868741
+ },
+ {
+ "id": 3068154759743749
+ },
+ {
+ "id": 3068148319062213
+ },
+ {
+ "id": 3068146395908357
+ },
+ {
+ "id": 3068144802646213
+ },
+ {
+ "id": 3068143756839239
+ },
+ {
+ "id": 3068143756839238
+ },
+ {
+ "id": 3068143756839237
+ },
+ {
+ "id": 3068136318617733
+ },
+ {
+ "id": 3068128340887877
+ },
+ {
+ "id": 3068121241585925
+ },
+ {
+ "id": 3068118919940421
+ },
+ {
+ "id": 3068118229600453
+ },
+ {
+ "id": 3068113712285957
+ },
+ {
+ "id": 3068091996113029
+ }
+ ],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2462,
+ "records_with_pk": 2462,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068161260423301
+ },
+ {
+ "id": 3068156519303493
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 80,
+ "records_with_pk": 80,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8168,
+ "records_with_pk": 8168,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068147084724357
+ },
+ {
+ "id": 3068137884977413
+ },
+ {
+ "id": 3068137497528517
+ },
+ {
+ "id": 3068116744390917
+ },
+ {
+ "id": 3068116692404357
+ },
+ {
+ "id": 3068111489616069
+ },
+ {
+ "id": 3068092242643141
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5561,
+ "records_with_pk": 5561,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 30,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1736,
+ "records_with_pk": 1736,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068144683387141
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4052,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 4052,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 48,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T20:38:15.896628+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3336,
+ "ods": 3336,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71642.8,
+ "ods_sum": 71642.8,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 394705.62,
+ "ods_sum": 394705.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33307.25,
+ "ods_sum": 33307.25,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 156623.79,
+ "ods_sum": 156623.79,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18387,
+ "diff": -1
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4134,
+ "ods": 4134,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1544.05,
+ "ods_sum": 1544.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 98139.8,
+ "ods_sum": 98139.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 87610.8,
+ "ods_sum": 87610.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 884,
+ "ods": 884,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1437.75,
+ "ods_sum": 1437.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 281102.62,
+ "ods_sum": 281102.62,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2838,
+ "ods": 2838,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 172860.0,
+ "ods_sum": 172860.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11428,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2843,
+ "ods": 2843,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 173800.0,
+ "ods_sum": 173800.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16981,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3999,
+ "ods": 3999,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 457185.0,
+ "ods_sum": 457185.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 17,
+ "ods": 17,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -16567.0,
+ "ods_sum": -16567.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -6
+ },
+ "generated_at": "2026-01-26T20:38:22.103506+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-12-01T00:00:00+08:00",
+ "end": "2026-01-01T00:00:00+08:00",
+ "label": "month_2025-12-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-11-30T22:00:00+08:00",
+ "end": "2026-01-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4044,
+ "records_with_pk": 4044,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 23,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9951,
+ "records_with_pk": 9951,
+ "missing": 11,
+ "missing_samples": [
+ {
+ "id": 3068161263093893
+ },
+ {
+ "id": 3068147084101765
+ },
+ {
+ "id": 3068144682748165
+ },
+ {
+ "id": 3068137883715845
+ },
+ {
+ "id": 3068137496643781
+ },
+ {
+ "id": 3068136781121733
+ },
+ {
+ "id": 3068136781088965
+ },
+ {
+ "id": 3068116743686405
+ },
+ {
+ "id": 3068116691830917
+ },
+ {
+ "id": 3068111488747717
+ },
+ {
+ "id": 3068092242069701
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 984,
+ "records_with_pk": 984,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 35,
+ "records_with_pk": 35,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11782,
+ "records_with_pk": 11782,
+ "missing": 11,
+ "missing_samples": [
+ {
+ "id": 3068161259849861
+ },
+ {
+ "id": 3068156518615365
+ },
+ {
+ "id": 3068147081676933
+ },
+ {
+ "id": 3068144680323333
+ },
+ {
+ "id": 3068137880373509
+ },
+ {
+ "id": 3068137493563589
+ },
+ {
+ "id": 3068136777763013
+ },
+ {
+ "id": 3068116741064965
+ },
+ {
+ "id": 3068116689406085
+ },
+ {
+ "id": 3068111485782213
+ },
+ {
+ "id": 3068092239743173
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16998,
+ "records_with_pk": 16998,
+ "missing": 17,
+ "missing_samples": [
+ {
+ "id": 3068164968204421
+ },
+ {
+ "id": 3068160926992709
+ },
+ {
+ "id": 3068156135868741
+ },
+ {
+ "id": 3068154759743749
+ },
+ {
+ "id": 3068148319062213
+ },
+ {
+ "id": 3068146395908357
+ },
+ {
+ "id": 3068144802646213
+ },
+ {
+ "id": 3068143756839239
+ },
+ {
+ "id": 3068143756839238
+ },
+ {
+ "id": 3068143756839237
+ },
+ {
+ "id": 3068136318617733
+ },
+ {
+ "id": 3068128340887877
+ },
+ {
+ "id": 3068121241585925
+ },
+ {
+ "id": 3068118919940421
+ },
+ {
+ "id": 3068118229600453
+ },
+ {
+ "id": 3068113712285957
+ },
+ {
+ "id": 3068091996113029
+ }
+ ],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2462,
+ "records_with_pk": 2462,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068161260423301
+ },
+ {
+ "id": 3068156519303493
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 70,
+ "records_with_pk": 70,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8168,
+ "records_with_pk": 8168,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068147084724357
+ },
+ {
+ "id": 3068137884977413
+ },
+ {
+ "id": 3068137497528517
+ },
+ {
+ "id": 3068116744390917
+ },
+ {
+ "id": 3068116692404357
+ },
+ {
+ "id": 3068111489616069
+ },
+ {
+ "id": 3068092242643141
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5490,
+ "records_with_pk": 5490,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 30,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1737,
+ "records_with_pk": 1737,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068165923555589
+ },
+ {
+ "id": 3068144683387141
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4151,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 23,
+ "skipped_missing_pk": 4151,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 50,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T20:41:29.899345+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3479,
+ "ods": 3479,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71445.57,
+ "ods_sum": 71445.57,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 432220.76,
+ "ods_sum": 432220.76,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 34544.63,
+ "ods_sum": 34544.63,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 189974.44,
+ "ods_sum": 189974.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18387,
+ "diff": -1
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2625,
+ "ods": 2625,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 190.1,
+ "ods_sum": 190.1,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 65814.4,
+ "ods_sum": 65814.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 63275.9,
+ "ods_sum": 63275.9,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 975,
+ "ods": 975,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 3190.05,
+ "ods_sum": 3190.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 322183.69,
+ "ods_sum": 322183.69,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2816,
+ "ods": 2816,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 179652.0,
+ "ods_sum": 179652.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11428,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2827,
+ "ods": 2827,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 180232.0,
+ "ods_sum": 180232.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16981,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4118,
+ "ods": 4118,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 472999.0,
+ "ods_sum": 472999.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -4314.0,
+ "ods_sum": -4314.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -6
+ },
+ "generated_at": "2026-01-26T20:41:36.487590+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-01T00:00:00+08:00",
+ "end": "2026-01-08T00:00:00+08:00",
+ "label": "week_2026-01-01",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-12-31T22:00:00+08:00",
+ "end": "2026-01-08T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 138,
+ "records_with_pk": 138,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 827,
+ "records_with_pk": 827,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9952,
+ "records_with_pk": 9952,
+ "missing": 12,
+ "missing_samples": [
+ {
+ "id": 3068165922326789
+ },
+ {
+ "id": 3068161263093893
+ },
+ {
+ "id": 3068147084101765
+ },
+ {
+ "id": 3068144682748165
+ },
+ {
+ "id": 3068137883715845
+ },
+ {
+ "id": 3068137496643781
+ },
+ {
+ "id": 3068136781121733
+ },
+ {
+ "id": 3068136781088965
+ },
+ {
+ "id": 3068116743686405
+ },
+ {
+ "id": 3068116691830917
+ },
+ {
+ "id": 3068111488747717
+ },
+ {
+ "id": 3068092242069701
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 167,
+ "records_with_pk": 167,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10,
+ "records_with_pk": 10,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11783,
+ "records_with_pk": 11783,
+ "missing": 12,
+ "missing_samples": [
+ {
+ "id": 3068165919459589
+ },
+ {
+ "id": 3068161259849861
+ },
+ {
+ "id": 3068156518615365
+ },
+ {
+ "id": 3068147081676933
+ },
+ {
+ "id": 3068144680323333
+ },
+ {
+ "id": 3068137880373509
+ },
+ {
+ "id": 3068137493563589
+ },
+ {
+ "id": 3068136777763013
+ },
+ {
+ "id": 3068116741064965
+ },
+ {
+ "id": 3068116689406085
+ },
+ {
+ "id": 3068111485782213
+ },
+ {
+ "id": 3068092239743173
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17000,
+ "records_with_pk": 17000,
+ "missing": 19,
+ "missing_samples": [
+ {
+ "id": 3068168069302533
+ },
+ {
+ "id": 3068166536087749
+ },
+ {
+ "id": 3068164968204421
+ },
+ {
+ "id": 3068160926992709
+ },
+ {
+ "id": 3068156135868741
+ },
+ {
+ "id": 3068154759743749
+ },
+ {
+ "id": 3068148319062213
+ },
+ {
+ "id": 3068146395908357
+ },
+ {
+ "id": 3068144802646213
+ },
+ {
+ "id": 3068143756839239
+ },
+ {
+ "id": 3068143756839238
+ },
+ {
+ "id": 3068143756839237
+ },
+ {
+ "id": 3068136318617733
+ },
+ {
+ "id": 3068128340887877
+ },
+ {
+ "id": 3068121241585925
+ },
+ {
+ "id": 3068118919940421
+ },
+ {
+ "id": 3068118229600453
+ },
+ {
+ "id": 3068113712285957
+ },
+ {
+ "id": 3068091996113029
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2462,
+ "records_with_pk": 2462,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068161260423301
+ },
+ {
+ "id": 3068156519303493
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8168,
+ "records_with_pk": 8168,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068147084724357
+ },
+ {
+ "id": 3068137884977413
+ },
+ {
+ "id": 3068137497528517
+ },
+ {
+ "id": 3068116744390917
+ },
+ {
+ "id": 3068116692404357
+ },
+ {
+ "id": 3068111489616069
+ },
+ {
+ "id": 3068092242643141
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 880,
+ "records_with_pk": 880,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1737,
+ "records_with_pk": 1737,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068165923555589
+ },
+ {
+ "id": 3068144683387141
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 851,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 851,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 54,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T20:44:11.129296+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 699,
+ "ods": 699,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 8896.03,
+ "ods_sum": 8896.03,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 74693.62,
+ "ods_sum": 74693.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6587.39,
+ "ods_sum": 6587.39,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30138.48,
+ "ods_sum": 30138.48,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18387,
+ "diff": -1
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 157,
+ "ods": 157,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 46522.68,
+ "ods_sum": 46522.68,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 569,
+ "ods": 569,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37392.0,
+ "ods_sum": 37392.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11428,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 566,
+ "ods": 566,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37228.0,
+ "ods_sum": 37228.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16981,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 823,
+ "ods": 823,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 78730.0,
+ "ods_sum": 78730.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -7.0,
+ "ods_sum": -7.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -6
+ },
+ "generated_at": "2026-01-26T20:44:17.462058+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-08T00:00:00+08:00",
+ "end": "2026-01-15T00:00:00+08:00",
+ "label": "week_2026-01-08",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-07T22:00:00+08:00",
+ "end": "2026-01-15T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 790,
+ "records_with_pk": 790,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9952,
+ "records_with_pk": 9952,
+ "missing": 12,
+ "missing_samples": [
+ {
+ "id": 3068165922326789
+ },
+ {
+ "id": 3068161263093893
+ },
+ {
+ "id": 3068147084101765
+ },
+ {
+ "id": 3068144682748165
+ },
+ {
+ "id": 3068137883715845
+ },
+ {
+ "id": 3068137496643781
+ },
+ {
+ "id": 3068136781121733
+ },
+ {
+ "id": 3068136781088965
+ },
+ {
+ "id": 3068116743686405
+ },
+ {
+ "id": 3068116691830917
+ },
+ {
+ "id": 3068111488747717
+ },
+ {
+ "id": 3068092242069701
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 195,
+ "records_with_pk": 195,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 22,
+ "records_with_pk": 22,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11783,
+ "records_with_pk": 11783,
+ "missing": 12,
+ "missing_samples": [
+ {
+ "id": 3068165919459589
+ },
+ {
+ "id": 3068161259849861
+ },
+ {
+ "id": 3068156518615365
+ },
+ {
+ "id": 3068147081676933
+ },
+ {
+ "id": 3068144680323333
+ },
+ {
+ "id": 3068137880373509
+ },
+ {
+ "id": 3068137493563589
+ },
+ {
+ "id": 3068136777763013
+ },
+ {
+ "id": 3068116741064965
+ },
+ {
+ "id": 3068116689406085
+ },
+ {
+ "id": 3068111485782213
+ },
+ {
+ "id": 3068092239743173
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17000,
+ "records_with_pk": 17000,
+ "missing": 19,
+ "missing_samples": [
+ {
+ "id": 3068168069302533
+ },
+ {
+ "id": 3068166536087749
+ },
+ {
+ "id": 3068164968204421
+ },
+ {
+ "id": 3068160926992709
+ },
+ {
+ "id": 3068156135868741
+ },
+ {
+ "id": 3068154759743749
+ },
+ {
+ "id": 3068148319062213
+ },
+ {
+ "id": 3068146395908357
+ },
+ {
+ "id": 3068144802646213
+ },
+ {
+ "id": 3068143756839239
+ },
+ {
+ "id": 3068143756839238
+ },
+ {
+ "id": 3068143756839237
+ },
+ {
+ "id": 3068136318617733
+ },
+ {
+ "id": 3068128340887877
+ },
+ {
+ "id": 3068121241585925
+ },
+ {
+ "id": 3068118919940421
+ },
+ {
+ "id": 3068118229600453
+ },
+ {
+ "id": 3068113712285957
+ },
+ {
+ "id": 3068091996113029
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2462,
+ "records_with_pk": 2462,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068161260423301
+ },
+ {
+ "id": 3068156519303493
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 15,
+ "records_with_pk": 15,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8168,
+ "records_with_pk": 8168,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068147084724357
+ },
+ {
+ "id": 3068137884977413
+ },
+ {
+ "id": 3068137497528517
+ },
+ {
+ "id": 3068116744390917
+ },
+ {
+ "id": 3068116692404357
+ },
+ {
+ "id": 3068111489616069
+ },
+ {
+ "id": 3068092242643141
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1241,
+ "records_with_pk": 1241,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1739,
+ "records_with_pk": 1739,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3068172411242629
+ },
+ {
+ "id": 3068172411193477
+ },
+ {
+ "id": 3068165923555589
+ },
+ {
+ "id": 3068144683387141
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 814,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 814,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 56,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T20:46:48.283138+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 672,
+ "ods": 672,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 16159.12,
+ "ods_sum": 16159.12,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 82416.19,
+ "ods_sum": 82416.19,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6098.02,
+ "ods_sum": 6098.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30731.98,
+ "ods_sum": 30731.98,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18387,
+ "diff": -1
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 188,
+ "ods": 188,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 190.72,
+ "ods_sum": 190.72,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 54584.19,
+ "ods_sum": 54584.19,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 572,
+ "ods": 572,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37214.0,
+ "ods_sum": 37214.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11428,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 575,
+ "ods": 575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37262.0,
+ "ods_sum": 37262.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16981,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 790,
+ "ods": 790,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 86381.0,
+ "ods_sum": 86381.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -39.0,
+ "ods_sum": -39.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -6
+ },
+ "generated_at": "2026-01-26T20:46:54.495119+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-15T00:00:00+08:00",
+ "end": "2026-01-22T00:00:00+08:00",
+ "label": "week_2026-01-15",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-14T22:00:00+08:00",
+ "end": "2026-01-22T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 899,
+ "records_with_pk": 899,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9958,
+ "records_with_pk": 9958,
+ "missing": 15,
+ "missing_samples": [
+ {
+ "id": 3068172409112709
+ },
+ {
+ "id": 3068172409145477
+ },
+ {
+ "id": 3068172409161861
+ },
+ {
+ "id": 3068165922326789
+ },
+ {
+ "id": 3068161263093893
+ },
+ {
+ "id": 3068147084101765
+ },
+ {
+ "id": 3068144682748165
+ },
+ {
+ "id": 3068137883715845
+ },
+ {
+ "id": 3068137496643781
+ },
+ {
+ "id": 3068136781121733
+ },
+ {
+ "id": 3068136781088965
+ },
+ {
+ "id": 3068116743686405
+ },
+ {
+ "id": 3068116691830917
+ },
+ {
+ "id": 3068111488747717
+ },
+ {
+ "id": 3068092242069701
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 216,
+ "records_with_pk": 216,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 6,
+ "records_with_pk": 6,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11785,
+ "records_with_pk": 11785,
+ "missing": 14,
+ "missing_samples": [
+ {
+ "id": 3068173050710149
+ },
+ {
+ "id": 3068172403804293
+ },
+ {
+ "id": 3068165919459589
+ },
+ {
+ "id": 3068161259849861
+ },
+ {
+ "id": 3068156518615365
+ },
+ {
+ "id": 3068147081676933
+ },
+ {
+ "id": 3068144680323333
+ },
+ {
+ "id": 3068137880373509
+ },
+ {
+ "id": 3068137493563589
+ },
+ {
+ "id": 3068136777763013
+ },
+ {
+ "id": 3068116741064965
+ },
+ {
+ "id": 3068116689406085
+ },
+ {
+ "id": 3068111485782213
+ },
+ {
+ "id": 3068092239743173
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17002,
+ "records_with_pk": 17002,
+ "missing": 21,
+ "missing_samples": [
+ {
+ "id": 3068171775248517
+ },
+ {
+ "id": 3068171587406021
+ },
+ {
+ "id": 3068168069302533
+ },
+ {
+ "id": 3068166536087749
+ },
+ {
+ "id": 3068164968204421
+ },
+ {
+ "id": 3068160926992709
+ },
+ {
+ "id": 3068156135868741
+ },
+ {
+ "id": 3068154759743749
+ },
+ {
+ "id": 3068148319062213
+ },
+ {
+ "id": 3068146395908357
+ },
+ {
+ "id": 3068144802646213
+ },
+ {
+ "id": 3068143756839239
+ },
+ {
+ "id": 3068143756839238
+ },
+ {
+ "id": 3068143756839237
+ },
+ {
+ "id": 3068136318617733
+ },
+ {
+ "id": 3068128340887877
+ },
+ {
+ "id": 3068121241585925
+ },
+ {
+ "id": 3068118919940421
+ },
+ {
+ "id": 3068118229600453
+ },
+ {
+ "id": 3068113712285957
+ },
+ {
+ "id": 3068091996113029
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2464,
+ "records_with_pk": 2464,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3068173051381893
+ },
+ {
+ "id": 3068172404426885
+ },
+ {
+ "id": 3068161260423301
+ },
+ {
+ "id": 3068156519303493
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 21,
+ "records_with_pk": 21,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8168,
+ "records_with_pk": 8168,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068147084724357
+ },
+ {
+ "id": 3068137884977413
+ },
+ {
+ "id": 3068137497528517
+ },
+ {
+ "id": 3068116744390917
+ },
+ {
+ "id": 3068116692404357
+ },
+ {
+ "id": 3068111489616069
+ },
+ {
+ "id": 3068092242643141
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1181,
+ "records_with_pk": 1181,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1741,
+ "records_with_pk": 1741,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068173057591429
+ },
+ {
+ "id": 3068173057542277
+ },
+ {
+ "id": 3068172411242629
+ },
+ {
+ "id": 3068172411193477
+ },
+ {
+ "id": 3068165923555589
+ },
+ {
+ "id": 3068144683387141
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 932,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 932,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 67,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T20:49:26.067583+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 776,
+ "ods": 776,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 16959.34,
+ "ods_sum": 16959.34,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 38520.64,
+ "ods_sum": 38520.64,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 93110.51,
+ "ods_sum": 93110.51,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 5009.13,
+ "ods_sum": 5009.13,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 40591.34,
+ "ods_sum": 40591.34,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18387,
+ "diff": -1
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 212,
+ "ods": 212,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 191.21,
+ "ods_sum": 191.21,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 70610.77,
+ "ods_sum": 70610.77,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 613,
+ "ods": 613,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 40100.0,
+ "ods_sum": 40100.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 38520.64,
+ "ods_sum": 38520.64,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11428,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 616,
+ "ods": 616,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 40456.0,
+ "ods_sum": 40456.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16981,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 896,
+ "ods": 896,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 123718.0,
+ "ods_sum": 123718.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -34.0,
+ "ods_sum": -34.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -6
+ },
+ "generated_at": "2026-01-26T20:49:32.338156+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-22T00:00:00+08:00",
+ "end": "2026-01-26T20:34:55.893505+08:00",
+ "label": "week_2026-01-22",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-21T22:00:00+08:00",
+ "end": "2026-01-26T22:34:55.893505+08:00",
+ "cutoff": null,
+ "window_days": 4,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 585,
+ "records_with_pk": 585,
+ "missing": 16,
+ "missing_samples": [
+ {
+ "id": 3068173758433541
+ },
+ {
+ "id": 3068172788353285
+ },
+ {
+ "id": 3068172286822597
+ },
+ {
+ "id": 3068165730896197
+ },
+ {
+ "id": 3068161172441285
+ },
+ {
+ "id": 3068156440938821
+ },
+ {
+ "id": 3068147068373253
+ },
+ {
+ "id": 3068144643229829
+ },
+ {
+ "id": 3068137701460101
+ },
+ {
+ "id": 3068137475737733
+ },
+ {
+ "id": 3068136505919813
+ },
+ {
+ "id": 3068116726745285
+ },
+ {
+ "id": 3068116674398469
+ },
+ {
+ "id": 3068111450900741
+ },
+ {
+ "id": 3068092211972229
+ },
+ {
+ "id": 3068052938459333
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9958,
+ "records_with_pk": 9958,
+ "missing": 18,
+ "missing_samples": [
+ {
+ "id": 3068173055166597
+ },
+ {
+ "id": 3068173055182981
+ },
+ {
+ "id": 3068173055199365
+ },
+ {
+ "id": 3068172409112709
+ },
+ {
+ "id": 3068172409145477
+ },
+ {
+ "id": 3068172409161861
+ },
+ {
+ "id": 3068165922326789
+ },
+ {
+ "id": 3068161263093893
+ },
+ {
+ "id": 3068147084101765
+ },
+ {
+ "id": 3068144682748165
+ },
+ {
+ "id": 3068137883715845
+ },
+ {
+ "id": 3068137496643781
+ },
+ {
+ "id": 3068136781121733
+ },
+ {
+ "id": 3068136781088965
+ },
+ {
+ "id": 3068116743686405
+ },
+ {
+ "id": 3068116691830917
+ },
+ {
+ "id": 3068111488747717
+ },
+ {
+ "id": 3068092242069701
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 162,
+ "records_with_pk": 162,
+ "missing": 8,
+ "missing_samples": [
+ {
+ "id": 3068173056575621
+ },
+ {
+ "id": 3068173056116869
+ },
+ {
+ "id": 3068173055641733
+ },
+ {
+ "id": 3068172409686149
+ },
+ {
+ "id": 3068165922752773
+ },
+ {
+ "id": 3068161263503493
+ },
+ {
+ "id": 3068156522088773
+ },
+ {
+ "id": 3068137884190981
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 5,
+ "records_with_pk": 5,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11786,
+ "records_with_pk": 11786,
+ "missing": 15,
+ "missing_samples": [
+ {
+ "id": 3068173815810309
+ },
+ {
+ "id": 3068173050710149
+ },
+ {
+ "id": 3068172403804293
+ },
+ {
+ "id": 3068165919459589
+ },
+ {
+ "id": 3068161259849861
+ },
+ {
+ "id": 3068156518615365
+ },
+ {
+ "id": 3068147081676933
+ },
+ {
+ "id": 3068144680323333
+ },
+ {
+ "id": 3068137880373509
+ },
+ {
+ "id": 3068137493563589
+ },
+ {
+ "id": 3068136777763013
+ },
+ {
+ "id": 3068116741064965
+ },
+ {
+ "id": 3068116689406085
+ },
+ {
+ "id": 3068111485782213
+ },
+ {
+ "id": 3068092239743173
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17002,
+ "records_with_pk": 17002,
+ "missing": 21,
+ "missing_samples": [
+ {
+ "id": 3068171775248517
+ },
+ {
+ "id": 3068171587406021
+ },
+ {
+ "id": 3068168069302533
+ },
+ {
+ "id": 3068166536087749
+ },
+ {
+ "id": 3068164968204421
+ },
+ {
+ "id": 3068160926992709
+ },
+ {
+ "id": 3068156135868741
+ },
+ {
+ "id": 3068154759743749
+ },
+ {
+ "id": 3068148319062213
+ },
+ {
+ "id": 3068146395908357
+ },
+ {
+ "id": 3068144802646213
+ },
+ {
+ "id": 3068143756839239
+ },
+ {
+ "id": 3068143756839238
+ },
+ {
+ "id": 3068143756839237
+ },
+ {
+ "id": 3068136318617733
+ },
+ {
+ "id": 3068128340887877
+ },
+ {
+ "id": 3068121241585925
+ },
+ {
+ "id": 3068118919940421
+ },
+ {
+ "id": 3068118229600453
+ },
+ {
+ "id": 3068113712285957
+ },
+ {
+ "id": 3068091996113029
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2464,
+ "records_with_pk": 2464,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3068173051381893
+ },
+ {
+ "id": 3068172404426885
+ },
+ {
+ "id": 3068161260423301
+ },
+ {
+ "id": 3068156519303493
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 7,
+ "records_with_pk": 7,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8169,
+ "records_with_pk": 8169,
+ "missing": 8,
+ "missing_samples": [
+ {
+ "id": 3068176796911749
+ },
+ {
+ "id": 3068147084724357
+ },
+ {
+ "id": 3068137884977413
+ },
+ {
+ "id": 3068137497528517
+ },
+ {
+ "id": 3068116744390917
+ },
+ {
+ "id": 3068116692404357
+ },
+ {
+ "id": 3068111489616069
+ },
+ {
+ "id": 3068092242643141
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1024,
+ "records_with_pk": 1024,
+ "missing": 26,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3068173817415941
+ },
+ {
+ "sitegoodsstockid": 3068166835570885
+ },
+ {
+ "sitegoodsstockid": 3068165128079621
+ },
+ {
+ "sitegoodsstockid": 3068159660001413
+ },
+ {
+ "sitegoodsstockid": 3068158269720838
+ },
+ {
+ "sitegoodsstockid": 3068158132488389
+ },
+ {
+ "sitegoodsstockid": 3068143580711045
+ },
+ {
+ "sitegoodsstockid": 3068142510311621
+ },
+ {
+ "sitegoodsstockid": 3068142511032517
+ },
+ {
+ "sitegoodsstockid": 3068135950321861
+ },
+ {
+ "sitegoodsstockid": 3068135950846149
+ },
+ {
+ "sitegoodsstockid": 3068135276693829
+ },
+ {
+ "sitegoodsstockid": 3068135277218117
+ },
+ {
+ "sitegoodsstockid": 3068132803037509
+ },
+ {
+ "sitegoodsstockid": 3068126246095109
+ },
+ {
+ "sitegoodsstockid": 3068125658253573
+ },
+ {
+ "sitegoodsstockid": 3068096166971717
+ },
+ {
+ "sitegoodsstockid": 3068096166529349
+ },
+ {
+ "sitegoodsstockid": 3068090895648965
+ },
+ {
+ "sitegoodsstockid": 3068058833127621
+ },
+ {
+ "sitegoodsstockid": 3068045209585989
+ },
+ {
+ "sitegoodsstockid": 3068045210061125
+ },
+ {
+ "sitegoodsstockid": 3068033580435653
+ },
+ {
+ "sitegoodsstockid": 3068033136544069
+ },
+ {
+ "sitegoodsstockid": 3068032978126981
+ },
+ {
+ "sitegoodsstockid": 3068032978634885
+ }
+ ],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1741,
+ "records_with_pk": 1741,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068173057591429
+ },
+ {
+ "id": 3068173057542277
+ },
+ {
+ "id": 3068172411242629
+ },
+ {
+ "id": 3068172411193477
+ },
+ {
+ "id": 3068165923555589
+ },
+ {
+ "id": 3068144683387141
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 598,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 598,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 122,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T20:52:05.443610+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 503,
+ "ods": 504,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 10412.32,
+ "ods_sum": 10412.32,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 23440.18,
+ "ods_sum": 23488.18,
+ "diff": -48.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 66552.38,
+ "ods_sum": 66600.38,
+ "diff": -48.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 1649.19,
+ "ods_sum": 1649.19,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 31050.69,
+ "ods_sum": 31050.69,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18387,
+ "diff": -1
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 150,
+ "ods": 150,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 45010.31,
+ "ods_sum": 45010.31,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 349,
+ "ods": 357,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 23828.0,
+ "ods_sum": 24212.0,
+ "diff": -384.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 23104.18,
+ "ods_sum": 23488.18,
+ "diff": -384.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11428,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 355,
+ "ods": 359,
+ "diff": -4
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 24424.0,
+ "ods_sum": 24742.0,
+ "diff": -318.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16981,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 567,
+ "ods": 568,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 66836.0,
+ "ods_sum": 66836.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -7.0,
+ "ods_sum": -7.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -20
+ },
+ "generated_at": "2026-01-26T20:52:12.777070+08:00"
+ }
+ ],
+ "total_missing": 564,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T20:52:12.777091+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_history_20260126_213058.json b/etl_billiards/reports/data_integrity_history_20260126_213058.json
new file mode 100644
index 0000000..e10cf7a
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_history_20260126_213058.json
@@ -0,0 +1,14940 @@
+{
+ "mode": "history",
+ "start": "2025-07-26T00:00:00+08:00",
+ "end": "2026-01-26T00:00:00+08:00",
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-07-26T00:00:00+08:00",
+ "end": "2025-08-01T00:00:00+08:00",
+ "label": "month_2025-07-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-07-25T22:00:00+08:00",
+ "end": "2025-08-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 6,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 138,
+ "records_with_pk": 138,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1077,
+ "records_with_pk": 1077,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9962,
+ "records_with_pk": 9962,
+ "missing": 22,
+ "missing_samples": [
+ {
+ "id": 3068187432765765
+ },
+ {
+ "id": 3068178372888901
+ },
+ {
+ "id": 3068178323785925
+ },
+ {
+ "id": 3068176796108933
+ },
+ {
+ "id": 3068173055166597
+ },
+ {
+ "id": 3068173055182981
+ },
+ {
+ "id": 3068173055199365
+ },
+ {
+ "id": 3068172409112709
+ },
+ {
+ "id": 3068172409145477
+ },
+ {
+ "id": 3068172409161861
+ },
+ {
+ "id": 3068165922326789
+ },
+ {
+ "id": 3068161263093893
+ },
+ {
+ "id": 3068147084101765
+ },
+ {
+ "id": 3068144682748165
+ },
+ {
+ "id": 3068137883715845
+ },
+ {
+ "id": 3068137496643781
+ },
+ {
+ "id": 3068136781121733
+ },
+ {
+ "id": 3068136781088965
+ },
+ {
+ "id": 3068116743686405
+ },
+ {
+ "id": 3068116691830917
+ },
+ {
+ "id": 3068111488747717
+ },
+ {
+ "id": 3068092242069701
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 221,
+ "records_with_pk": 221,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11791,
+ "records_with_pk": 11791,
+ "missing": 19,
+ "missing_samples": [
+ {
+ "id": 3068187430504773
+ },
+ {
+ "id": 3068178370578757
+ },
+ {
+ "id": 3068178321377477
+ },
+ {
+ "id": 3068176793585797
+ },
+ {
+ "id": 3068173815810309
+ },
+ {
+ "id": 3068173050710149
+ },
+ {
+ "id": 3068172403804293
+ },
+ {
+ "id": 3068165919459589
+ },
+ {
+ "id": 3068161259849861
+ },
+ {
+ "id": 3068156518615365
+ },
+ {
+ "id": 3068147081676933
+ },
+ {
+ "id": 3068144680323333
+ },
+ {
+ "id": 3068137880373509
+ },
+ {
+ "id": 3068137493563589
+ },
+ {
+ "id": 3068136777763013
+ },
+ {
+ "id": 3068116741064965
+ },
+ {
+ "id": 3068116689406085
+ },
+ {
+ "id": 3068111485782213
+ },
+ {
+ "id": 3068092239743173
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17007,
+ "records_with_pk": 17007,
+ "missing": 26,
+ "missing_samples": [
+ {
+ "id": 3068188476033349
+ },
+ {
+ "id": 3068183718152325
+ },
+ {
+ "id": 3068182719219909
+ },
+ {
+ "id": 3068180288719109
+ },
+ {
+ "id": 3068179623479493
+ },
+ {
+ "id": 3068171775248517
+ },
+ {
+ "id": 3068171587406021
+ },
+ {
+ "id": 3068168069302533
+ },
+ {
+ "id": 3068166536087749
+ },
+ {
+ "id": 3068164968204421
+ },
+ {
+ "id": 3068160926992709
+ },
+ {
+ "id": 3068156135868741
+ },
+ {
+ "id": 3068154759743749
+ },
+ {
+ "id": 3068148319062213
+ },
+ {
+ "id": 3068146395908357
+ },
+ {
+ "id": 3068144802646213
+ },
+ {
+ "id": 3068143756839239
+ },
+ {
+ "id": 3068143756839238
+ },
+ {
+ "id": 3068143756839237
+ },
+ {
+ "id": 3068136318617733
+ },
+ {
+ "id": 3068128340887877
+ },
+ {
+ "id": 3068121241585925
+ },
+ {
+ "id": 3068118919940421
+ },
+ {
+ "id": 3068118229600453
+ },
+ {
+ "id": 3068113712285957
+ },
+ {
+ "id": 3068091996113029
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2465,
+ "records_with_pk": 2465,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068189902866629
+ },
+ {
+ "id": 3068173051381893
+ },
+ {
+ "id": 3068172404426885
+ },
+ {
+ "id": 3068161260423301
+ },
+ {
+ "id": 3068156519303493
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 26,
+ "records_with_pk": 26,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8174,
+ "records_with_pk": 8174,
+ "missing": 12,
+ "missing_samples": [
+ {
+ "id": 3068187433306437
+ },
+ {
+ "id": 3068187433322821
+ },
+ {
+ "id": 3068178373445957
+ },
+ {
+ "id": 3068178324654277
+ },
+ {
+ "id": 3068176796911749
+ },
+ {
+ "id": 3068147084724357
+ },
+ {
+ "id": 3068137884977413
+ },
+ {
+ "id": 3068137497528517
+ },
+ {
+ "id": 3068116744390917
+ },
+ {
+ "id": 3068116692404357
+ },
+ {
+ "id": 3068111489616069
+ },
+ {
+ "id": 3068092242643141
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1219,
+ "records_with_pk": 1219,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1741,
+ "records_with_pk": 1741,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068173057591429
+ },
+ {
+ "id": 3068173057542277
+ },
+ {
+ "id": 3068172411242629
+ },
+ {
+ "id": 3068172411193477
+ },
+ {
+ "id": 3068165923555589
+ },
+ {
+ "id": 3068144683387141
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 1119,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 1119,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 90,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T21:06:10.863661+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18387,
+ "diff": -18386
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 721,
+ "diff": -721
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 20,
+ "ods": 20,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 721,
+ "ods": 721,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 11495.64,
+ "ods_sum": 11495.64,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 38281.97,
+ "ods_sum": 38281.97,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 76905.95,
+ "ods_sum": 76905.95,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6771.92,
+ "ods_sum": 6771.92,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 27536.97,
+ "ods_sum": 27536.97,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18387,
+ "diff": -1
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 929,
+ "ods": 929,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 5.66,
+ "ods_sum": 5.66,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 19820.0,
+ "ods_sum": 19820.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 18387.0,
+ "ods_sum": 18387.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 203,
+ "ods": 203,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 766.09,
+ "ods_sum": 766.09,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 65258.01,
+ "ods_sum": 65258.01,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11428,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 549,
+ "ods": 549,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 38816.0,
+ "ods_sum": 38816.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16981,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1051,
+ "ods": 1051,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 110117.0,
+ "ods_sum": 110117.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19096
+ },
+ "generated_at": "2026-01-26T21:06:14.707643+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-08-01T00:00:00+08:00",
+ "end": "2025-09-01T00:00:00+08:00",
+ "label": "month_2025-08-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-07-31T22:00:00+08:00",
+ "end": "2025-09-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4653,
+ "records_with_pk": 4653,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 26,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9964,
+ "records_with_pk": 9964,
+ "missing": 24,
+ "missing_samples": [
+ {
+ "id": 3068191315953989
+ },
+ {
+ "id": 3068189905504453
+ },
+ {
+ "id": 3068187432765765
+ },
+ {
+ "id": 3068178372888901
+ },
+ {
+ "id": 3068178323785925
+ },
+ {
+ "id": 3068176796108933
+ },
+ {
+ "id": 3068173055166597
+ },
+ {
+ "id": 3068173055182981
+ },
+ {
+ "id": 3068173055199365
+ },
+ {
+ "id": 3068172409112709
+ },
+ {
+ "id": 3068172409145477
+ },
+ {
+ "id": 3068172409161861
+ },
+ {
+ "id": 3068165922326789
+ },
+ {
+ "id": 3068161263093893
+ },
+ {
+ "id": 3068147084101765
+ },
+ {
+ "id": 3068144682748165
+ },
+ {
+ "id": 3068137883715845
+ },
+ {
+ "id": 3068137496643781
+ },
+ {
+ "id": 3068136781121733
+ },
+ {
+ "id": 3068136781088965
+ },
+ {
+ "id": 3068116743686405
+ },
+ {
+ "id": 3068116691830917
+ },
+ {
+ "id": 3068111488747717
+ },
+ {
+ "id": 3068092242069701
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 867,
+ "records_with_pk": 867,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11792,
+ "records_with_pk": 11792,
+ "missing": 21,
+ "missing_samples": [
+ {
+ "id": 3068191313217861
+ },
+ {
+ "id": 3068189902260421
+ },
+ {
+ "id": 3068187430504773
+ },
+ {
+ "id": 3068178370578757
+ },
+ {
+ "id": 3068178321377477
+ },
+ {
+ "id": 3068176793585797
+ },
+ {
+ "id": 3068173815810309
+ },
+ {
+ "id": 3068173050710149
+ },
+ {
+ "id": 3068172403804293
+ },
+ {
+ "id": 3068165919459589
+ },
+ {
+ "id": 3068161259849861
+ },
+ {
+ "id": 3068156518615365
+ },
+ {
+ "id": 3068147081676933
+ },
+ {
+ "id": 3068144680323333
+ },
+ {
+ "id": 3068137880373509
+ },
+ {
+ "id": 3068137493563589
+ },
+ {
+ "id": 3068136777763013
+ },
+ {
+ "id": 3068116741064965
+ },
+ {
+ "id": 3068116689406085
+ },
+ {
+ "id": 3068111485782213
+ },
+ {
+ "id": 3068092239743173
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17007,
+ "records_with_pk": 17007,
+ "missing": 26,
+ "missing_samples": [
+ {
+ "id": 3068188476033349
+ },
+ {
+ "id": 3068183718152325
+ },
+ {
+ "id": 3068182719219909
+ },
+ {
+ "id": 3068180288719109
+ },
+ {
+ "id": 3068179623479493
+ },
+ {
+ "id": 3068171775248517
+ },
+ {
+ "id": 3068171587406021
+ },
+ {
+ "id": 3068168069302533
+ },
+ {
+ "id": 3068166536087749
+ },
+ {
+ "id": 3068164968204421
+ },
+ {
+ "id": 3068160926992709
+ },
+ {
+ "id": 3068156135868741
+ },
+ {
+ "id": 3068154759743749
+ },
+ {
+ "id": 3068148319062213
+ },
+ {
+ "id": 3068146395908357
+ },
+ {
+ "id": 3068144802646213
+ },
+ {
+ "id": 3068143756839239
+ },
+ {
+ "id": 3068143756839238
+ },
+ {
+ "id": 3068143756839237
+ },
+ {
+ "id": 3068136318617733
+ },
+ {
+ "id": 3068128340887877
+ },
+ {
+ "id": 3068121241585925
+ },
+ {
+ "id": 3068118919940421
+ },
+ {
+ "id": 3068118229600453
+ },
+ {
+ "id": 3068113712285957
+ },
+ {
+ "id": 3068091996113029
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068193229965573
+ },
+ {
+ "id": 3068189902866629
+ },
+ {
+ "id": 3068173051381893
+ },
+ {
+ "id": 3068172404426885
+ },
+ {
+ "id": 3068161260423301
+ },
+ {
+ "id": 3068156519303493
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 96,
+ "records_with_pk": 96,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8174,
+ "records_with_pk": 8174,
+ "missing": 13,
+ "missing_samples": [
+ {
+ "id": 3068191316789573
+ },
+ {
+ "id": 3068187433306437
+ },
+ {
+ "id": 3068187433322821
+ },
+ {
+ "id": 3068178373445957
+ },
+ {
+ "id": 3068178324654277
+ },
+ {
+ "id": 3068176796911749
+ },
+ {
+ "id": 3068147084724357
+ },
+ {
+ "id": 3068137884977413
+ },
+ {
+ "id": 3068137497528517
+ },
+ {
+ "id": 3068116744390917
+ },
+ {
+ "id": 3068116692404357
+ },
+ {
+ "id": 3068111489616069
+ },
+ {
+ "id": 3068092242643141
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5271,
+ "records_with_pk": 5271,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 28,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1741,
+ "records_with_pk": 1741,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068173057591429
+ },
+ {
+ "id": 3068173057542277
+ },
+ {
+ "id": 3068172411242629
+ },
+ {
+ "id": 3068172411193477
+ },
+ {
+ "id": 3068165923555589
+ },
+ {
+ "id": 3068144683387141
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4817,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 26,
+ "skipped_missing_pk": 4817,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 96,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T21:09:20.212001+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18387,
+ "diff": -18386
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3587,
+ "diff": -3587
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 18,
+ "ods": 18,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 51,
+ "ods": 51,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3587,
+ "ods": 3587,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 54919.33,
+ "ods_sum": 54919.33,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 186359.95,
+ "ods_sum": 186359.95,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 383097.96,
+ "ods_sum": 383097.96,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 44840.88,
+ "ods_sum": 44840.88,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 145513.13,
+ "ods_sum": 145513.13,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18387,
+ "diff": -1
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4305,
+ "ods": 4305,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 47.45,
+ "ods_sum": 47.45,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 87523.4,
+ "ods_sum": 87523.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 83759.0,
+ "ods_sum": 83759.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 859,
+ "ods": 859,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1874.75,
+ "ods_sum": 1874.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 268501.57,
+ "ods_sum": 268501.57,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11428,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2850,
+ "ods": 2850,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 189960.0,
+ "ods_sum": 189960.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16981,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4763,
+ "ods": 4763,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 381598.0,
+ "ods_sum": 381598.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -21962
+ },
+ "generated_at": "2026-01-26T21:09:24.059175+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-09-01T00:00:00+08:00",
+ "end": "2025-10-01T00:00:00+08:00",
+ "label": "month_2025-09-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-08-31T22:00:00+08:00",
+ "end": "2025-10-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3738,
+ "records_with_pk": 3738,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 21,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9965,
+ "records_with_pk": 9965,
+ "missing": 25,
+ "missing_samples": [
+ {
+ "id": 3068195098511621
+ },
+ {
+ "id": 3068191315953989
+ },
+ {
+ "id": 3068189905504453
+ },
+ {
+ "id": 3068187432765765
+ },
+ {
+ "id": 3068178372888901
+ },
+ {
+ "id": 3068178323785925
+ },
+ {
+ "id": 3068176796108933
+ },
+ {
+ "id": 3068173055166597
+ },
+ {
+ "id": 3068173055182981
+ },
+ {
+ "id": 3068173055199365
+ },
+ {
+ "id": 3068172409112709
+ },
+ {
+ "id": 3068172409145477
+ },
+ {
+ "id": 3068172409161861
+ },
+ {
+ "id": 3068165922326789
+ },
+ {
+ "id": 3068161263093893
+ },
+ {
+ "id": 3068147084101765
+ },
+ {
+ "id": 3068144682748165
+ },
+ {
+ "id": 3068137883715845
+ },
+ {
+ "id": 3068137496643781
+ },
+ {
+ "id": 3068136781121733
+ },
+ {
+ "id": 3068136781088965
+ },
+ {
+ "id": 3068116743686405
+ },
+ {
+ "id": 3068116691830917
+ },
+ {
+ "id": 3068111488747717
+ },
+ {
+ "id": 3068092242069701
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 655,
+ "records_with_pk": 655,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11794,
+ "records_with_pk": 11794,
+ "missing": 23,
+ "missing_samples": [
+ {
+ "id": 3068195094317317
+ },
+ {
+ "id": 3068193228065029
+ },
+ {
+ "id": 3068191313217861
+ },
+ {
+ "id": 3068189902260421
+ },
+ {
+ "id": 3068187430504773
+ },
+ {
+ "id": 3068178370578757
+ },
+ {
+ "id": 3068178321377477
+ },
+ {
+ "id": 3068176793585797
+ },
+ {
+ "id": 3068173815810309
+ },
+ {
+ "id": 3068173050710149
+ },
+ {
+ "id": 3068172403804293
+ },
+ {
+ "id": 3068165919459589
+ },
+ {
+ "id": 3068161259849861
+ },
+ {
+ "id": 3068156518615365
+ },
+ {
+ "id": 3068147081676933
+ },
+ {
+ "id": 3068144680323333
+ },
+ {
+ "id": 3068137880373509
+ },
+ {
+ "id": 3068137493563589
+ },
+ {
+ "id": 3068136777763013
+ },
+ {
+ "id": 3068116741064965
+ },
+ {
+ "id": 3068116689406085
+ },
+ {
+ "id": 3068111485782213
+ },
+ {
+ "id": 3068092239743173
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17008,
+ "records_with_pk": 17008,
+ "missing": 27,
+ "missing_samples": [
+ {
+ "id": 3068193998768325
+ },
+ {
+ "id": 3068188476033349
+ },
+ {
+ "id": 3068183718152325
+ },
+ {
+ "id": 3068182719219909
+ },
+ {
+ "id": 3068180288719109
+ },
+ {
+ "id": 3068179623479493
+ },
+ {
+ "id": 3068171775248517
+ },
+ {
+ "id": 3068171587406021
+ },
+ {
+ "id": 3068168069302533
+ },
+ {
+ "id": 3068166536087749
+ },
+ {
+ "id": 3068164968204421
+ },
+ {
+ "id": 3068160926992709
+ },
+ {
+ "id": 3068156135868741
+ },
+ {
+ "id": 3068154759743749
+ },
+ {
+ "id": 3068148319062213
+ },
+ {
+ "id": 3068146395908357
+ },
+ {
+ "id": 3068144802646213
+ },
+ {
+ "id": 3068143756839239
+ },
+ {
+ "id": 3068143756839238
+ },
+ {
+ "id": 3068143756839237
+ },
+ {
+ "id": 3068136318617733
+ },
+ {
+ "id": 3068128340887877
+ },
+ {
+ "id": 3068121241585925
+ },
+ {
+ "id": 3068118919940421
+ },
+ {
+ "id": 3068118229600453
+ },
+ {
+ "id": 3068113712285957
+ },
+ {
+ "id": 3068091996113029
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 8,
+ "missing_samples": [
+ {
+ "id": 3068195181201285
+ },
+ {
+ "id": 3068195094923525
+ },
+ {
+ "id": 3068193229965573
+ },
+ {
+ "id": 3068189902866629
+ },
+ {
+ "id": 3068173051381893
+ },
+ {
+ "id": 3068172404426885
+ },
+ {
+ "id": 3068161260423301
+ },
+ {
+ "id": 3068156519303493
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 54,
+ "records_with_pk": 54,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8174,
+ "records_with_pk": 8174,
+ "missing": 13,
+ "missing_samples": [
+ {
+ "id": 3068191316789573
+ },
+ {
+ "id": 3068187433306437
+ },
+ {
+ "id": 3068187433322821
+ },
+ {
+ "id": 3068178373445957
+ },
+ {
+ "id": 3068178324654277
+ },
+ {
+ "id": 3068176796911749
+ },
+ {
+ "id": 3068147084724357
+ },
+ {
+ "id": 3068137884977413
+ },
+ {
+ "id": 3068137497528517
+ },
+ {
+ "id": 3068116744390917
+ },
+ {
+ "id": 3068116692404357
+ },
+ {
+ "id": 3068111489616069
+ },
+ {
+ "id": 3068092242643141
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 4853,
+ "records_with_pk": 4853,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 27,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068195100772613
+ },
+ {
+ "id": 3068173057591429
+ },
+ {
+ "id": 3068173057542277
+ },
+ {
+ "id": 3068172411242629
+ },
+ {
+ "id": 3068172411193477
+ },
+ {
+ "id": 3068165923555589
+ },
+ {
+ "id": 3068144683387141
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 3828,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 3828,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 103,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T21:12:19.753870+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18387,
+ "diff": -18386
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1264,
+ "diff": -1264
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 11,
+ "ods": 11,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1264,
+ "ods": 1264,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 11020.51,
+ "ods_sum": 11020.51,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 73893.75,
+ "ods_sum": 73893.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 137203.92,
+ "ods_sum": 137203.92,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 15685.02,
+ "ods_sum": 15685.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 52340.33,
+ "ods_sum": 52340.33,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18387,
+ "diff": -1
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1449,
+ "ods": 1449,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1.41,
+ "ods_sum": 1.41,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 24706.9,
+ "ods_sum": 24706.9,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 23874.4,
+ "ods_sum": 23874.4,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 654,
+ "ods": 654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 781.44,
+ "ods_sum": 781.44,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 192541.75,
+ "ods_sum": 192541.75,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1173,
+ "ods": 1173,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 75824.0,
+ "ods_sum": 75824.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 73843.08,
+ "ods_sum": 73843.08,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11428,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 184722.0,
+ "ods_sum": 184722.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16981,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1544,
+ "ods": 1544,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 108880.0,
+ "ods_sum": 108880.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -1011.0,
+ "ods_sum": -1011.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19639
+ },
+ "generated_at": "2026-01-26T21:12:23.721895+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-10-01T00:00:00+08:00",
+ "end": "2025-11-01T00:00:00+08:00",
+ "label": "month_2025-10-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-09-30T22:00:00+08:00",
+ "end": "2025-11-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 607,
+ "records_with_pk": 607,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9965,
+ "records_with_pk": 9965,
+ "missing": 25,
+ "missing_samples": [
+ {
+ "id": 3068195098511621
+ },
+ {
+ "id": 3068191315953989
+ },
+ {
+ "id": 3068189905504453
+ },
+ {
+ "id": 3068187432765765
+ },
+ {
+ "id": 3068178372888901
+ },
+ {
+ "id": 3068178323785925
+ },
+ {
+ "id": 3068176796108933
+ },
+ {
+ "id": 3068173055166597
+ },
+ {
+ "id": 3068173055182981
+ },
+ {
+ "id": 3068173055199365
+ },
+ {
+ "id": 3068172409112709
+ },
+ {
+ "id": 3068172409145477
+ },
+ {
+ "id": 3068172409161861
+ },
+ {
+ "id": 3068165922326789
+ },
+ {
+ "id": 3068161263093893
+ },
+ {
+ "id": 3068147084101765
+ },
+ {
+ "id": 3068144682748165
+ },
+ {
+ "id": 3068137883715845
+ },
+ {
+ "id": 3068137496643781
+ },
+ {
+ "id": 3068136781121733
+ },
+ {
+ "id": 3068136781088965
+ },
+ {
+ "id": 3068116743686405
+ },
+ {
+ "id": 3068116691830917
+ },
+ {
+ "id": 3068111488747717
+ },
+ {
+ "id": 3068092242069701
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 136,
+ "records_with_pk": 136,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4,
+ "records_with_pk": 4,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11794,
+ "records_with_pk": 11794,
+ "missing": 23,
+ "missing_samples": [
+ {
+ "id": 3068195094317317
+ },
+ {
+ "id": 3068193228065029
+ },
+ {
+ "id": 3068191313217861
+ },
+ {
+ "id": 3068189902260421
+ },
+ {
+ "id": 3068187430504773
+ },
+ {
+ "id": 3068178370578757
+ },
+ {
+ "id": 3068178321377477
+ },
+ {
+ "id": 3068176793585797
+ },
+ {
+ "id": 3068173815810309
+ },
+ {
+ "id": 3068173050710149
+ },
+ {
+ "id": 3068172403804293
+ },
+ {
+ "id": 3068165919459589
+ },
+ {
+ "id": 3068161259849861
+ },
+ {
+ "id": 3068156518615365
+ },
+ {
+ "id": 3068147081676933
+ },
+ {
+ "id": 3068144680323333
+ },
+ {
+ "id": 3068137880373509
+ },
+ {
+ "id": 3068137493563589
+ },
+ {
+ "id": 3068136777763013
+ },
+ {
+ "id": 3068116741064965
+ },
+ {
+ "id": 3068116689406085
+ },
+ {
+ "id": 3068111485782213
+ },
+ {
+ "id": 3068092239743173
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17008,
+ "records_with_pk": 17008,
+ "missing": 27,
+ "missing_samples": [
+ {
+ "id": 3068193998768325
+ },
+ {
+ "id": 3068188476033349
+ },
+ {
+ "id": 3068183718152325
+ },
+ {
+ "id": 3068182719219909
+ },
+ {
+ "id": 3068180288719109
+ },
+ {
+ "id": 3068179623479493
+ },
+ {
+ "id": 3068171775248517
+ },
+ {
+ "id": 3068171587406021
+ },
+ {
+ "id": 3068168069302533
+ },
+ {
+ "id": 3068166536087749
+ },
+ {
+ "id": 3068164968204421
+ },
+ {
+ "id": 3068160926992709
+ },
+ {
+ "id": 3068156135868741
+ },
+ {
+ "id": 3068154759743749
+ },
+ {
+ "id": 3068148319062213
+ },
+ {
+ "id": 3068146395908357
+ },
+ {
+ "id": 3068144802646213
+ },
+ {
+ "id": 3068143756839239
+ },
+ {
+ "id": 3068143756839238
+ },
+ {
+ "id": 3068143756839237
+ },
+ {
+ "id": 3068136318617733
+ },
+ {
+ "id": 3068128340887877
+ },
+ {
+ "id": 3068121241585925
+ },
+ {
+ "id": 3068118919940421
+ },
+ {
+ "id": 3068118229600453
+ },
+ {
+ "id": 3068113712285957
+ },
+ {
+ "id": 3068091996113029
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 8,
+ "missing_samples": [
+ {
+ "id": 3068195181201285
+ },
+ {
+ "id": 3068195094923525
+ },
+ {
+ "id": 3068193229965573
+ },
+ {
+ "id": 3068189902866629
+ },
+ {
+ "id": 3068173051381893
+ },
+ {
+ "id": 3068172404426885
+ },
+ {
+ "id": 3068161260423301
+ },
+ {
+ "id": 3068156519303493
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11,
+ "records_with_pk": 11,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8174,
+ "records_with_pk": 8174,
+ "missing": 13,
+ "missing_samples": [
+ {
+ "id": 3068191316789573
+ },
+ {
+ "id": 3068187433306437
+ },
+ {
+ "id": 3068187433322821
+ },
+ {
+ "id": 3068178373445957
+ },
+ {
+ "id": 3068178324654277
+ },
+ {
+ "id": 3068176796911749
+ },
+ {
+ "id": 3068147084724357
+ },
+ {
+ "id": 3068137884977413
+ },
+ {
+ "id": 3068137497528517
+ },
+ {
+ "id": 3068116744390917
+ },
+ {
+ "id": 3068116692404357
+ },
+ {
+ "id": 3068111489616069
+ },
+ {
+ "id": 3068092242643141
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 997,
+ "records_with_pk": 997,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068195100772613
+ },
+ {
+ "id": 3068173057591429
+ },
+ {
+ "id": 3068173057542277
+ },
+ {
+ "id": 3068172411242629
+ },
+ {
+ "id": 3068172411193477
+ },
+ {
+ "id": 3068165923555589
+ },
+ {
+ "id": 3068144683387141
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 619,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 619,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 103,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T21:14:46.668961+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18387,
+ "diff": -18386
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2824,
+ "diff": -2824
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 21,
+ "ods": 21,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2824,
+ "ods": 2824,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 40394.85,
+ "ods_sum": 40394.85,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 310789.49,
+ "ods_sum": 310789.49,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33315.15,
+ "ods_sum": 33315.15,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 116393.37,
+ "ods_sum": 116393.37,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18387,
+ "diff": -1
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3475,
+ "ods": 3475,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1319.49,
+ "ods_sum": 1319.49,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 66216.8,
+ "ods_sum": 66216.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 64234.0,
+ "ods_sum": 64234.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 573,
+ "ods": 573,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 2143.56,
+ "ods_sum": 2143.56,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 172536.78,
+ "ods_sum": 172536.78,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2490,
+ "ods": 2490,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160988.0,
+ "ods_sum": 160988.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11428,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2489,
+ "ods": 2489,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160076.0,
+ "ods_sum": 160076.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16981,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3616,
+ "ods": 3616,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 286088.0,
+ "ods_sum": 286088.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -47020.0,
+ "ods_sum": -47020.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -21199
+ },
+ "generated_at": "2026-01-26T21:14:50.516471+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-11-01T00:00:00+08:00",
+ "end": "2025-12-01T00:00:00+08:00",
+ "label": "month_2025-11-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-10-31T22:00:00+08:00",
+ "end": "2025-12-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3927,
+ "records_with_pk": 3927,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9965,
+ "records_with_pk": 9965,
+ "missing": 25,
+ "missing_samples": [
+ {
+ "id": 3068195098511621
+ },
+ {
+ "id": 3068191315953989
+ },
+ {
+ "id": 3068189905504453
+ },
+ {
+ "id": 3068187432765765
+ },
+ {
+ "id": 3068178372888901
+ },
+ {
+ "id": 3068178323785925
+ },
+ {
+ "id": 3068176796108933
+ },
+ {
+ "id": 3068173055166597
+ },
+ {
+ "id": 3068173055182981
+ },
+ {
+ "id": 3068173055199365
+ },
+ {
+ "id": 3068172409112709
+ },
+ {
+ "id": 3068172409145477
+ },
+ {
+ "id": 3068172409161861
+ },
+ {
+ "id": 3068165922326789
+ },
+ {
+ "id": 3068161263093893
+ },
+ {
+ "id": 3068147084101765
+ },
+ {
+ "id": 3068144682748165
+ },
+ {
+ "id": 3068137883715845
+ },
+ {
+ "id": 3068137496643781
+ },
+ {
+ "id": 3068136781121733
+ },
+ {
+ "id": 3068136781088965
+ },
+ {
+ "id": 3068116743686405
+ },
+ {
+ "id": 3068116691830917
+ },
+ {
+ "id": 3068111488747717
+ },
+ {
+ "id": 3068092242069701
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 890,
+ "records_with_pk": 890,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 12,
+ "records_with_pk": 12,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11794,
+ "records_with_pk": 11794,
+ "missing": 23,
+ "missing_samples": [
+ {
+ "id": 3068195094317317
+ },
+ {
+ "id": 3068193228065029
+ },
+ {
+ "id": 3068191313217861
+ },
+ {
+ "id": 3068189902260421
+ },
+ {
+ "id": 3068187430504773
+ },
+ {
+ "id": 3068178370578757
+ },
+ {
+ "id": 3068178321377477
+ },
+ {
+ "id": 3068176793585797
+ },
+ {
+ "id": 3068173815810309
+ },
+ {
+ "id": 3068173050710149
+ },
+ {
+ "id": 3068172403804293
+ },
+ {
+ "id": 3068165919459589
+ },
+ {
+ "id": 3068161259849861
+ },
+ {
+ "id": 3068156518615365
+ },
+ {
+ "id": 3068147081676933
+ },
+ {
+ "id": 3068144680323333
+ },
+ {
+ "id": 3068137880373509
+ },
+ {
+ "id": 3068137493563589
+ },
+ {
+ "id": 3068136777763013
+ },
+ {
+ "id": 3068116741064965
+ },
+ {
+ "id": 3068116689406085
+ },
+ {
+ "id": 3068111485782213
+ },
+ {
+ "id": 3068092239743173
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17009,
+ "records_with_pk": 17009,
+ "missing": 28,
+ "missing_samples": [
+ {
+ "id": 3068199835715909
+ },
+ {
+ "id": 3068193998768325
+ },
+ {
+ "id": 3068188476033349
+ },
+ {
+ "id": 3068183718152325
+ },
+ {
+ "id": 3068182719219909
+ },
+ {
+ "id": 3068180288719109
+ },
+ {
+ "id": 3068179623479493
+ },
+ {
+ "id": 3068171775248517
+ },
+ {
+ "id": 3068171587406021
+ },
+ {
+ "id": 3068168069302533
+ },
+ {
+ "id": 3068166536087749
+ },
+ {
+ "id": 3068164968204421
+ },
+ {
+ "id": 3068160926992709
+ },
+ {
+ "id": 3068156135868741
+ },
+ {
+ "id": 3068154759743749
+ },
+ {
+ "id": 3068148319062213
+ },
+ {
+ "id": 3068146395908357
+ },
+ {
+ "id": 3068144802646213
+ },
+ {
+ "id": 3068143756839239
+ },
+ {
+ "id": 3068143756839238
+ },
+ {
+ "id": 3068143756839237
+ },
+ {
+ "id": 3068136318617733
+ },
+ {
+ "id": 3068128340887877
+ },
+ {
+ "id": 3068121241585925
+ },
+ {
+ "id": 3068118919940421
+ },
+ {
+ "id": 3068118229600453
+ },
+ {
+ "id": 3068113712285957
+ },
+ {
+ "id": 3068091996113029
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 8,
+ "missing_samples": [
+ {
+ "id": 3068195181201285
+ },
+ {
+ "id": 3068195094923525
+ },
+ {
+ "id": 3068193229965573
+ },
+ {
+ "id": 3068189902866629
+ },
+ {
+ "id": 3068173051381893
+ },
+ {
+ "id": 3068172404426885
+ },
+ {
+ "id": 3068161260423301
+ },
+ {
+ "id": 3068156519303493
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 80,
+ "records_with_pk": 80,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8174,
+ "records_with_pk": 8174,
+ "missing": 13,
+ "missing_samples": [
+ {
+ "id": 3068191316789573
+ },
+ {
+ "id": 3068187433306437
+ },
+ {
+ "id": 3068187433322821
+ },
+ {
+ "id": 3068178373445957
+ },
+ {
+ "id": 3068178324654277
+ },
+ {
+ "id": 3068176796911749
+ },
+ {
+ "id": 3068147084724357
+ },
+ {
+ "id": 3068137884977413
+ },
+ {
+ "id": 3068137497528517
+ },
+ {
+ "id": 3068116744390917
+ },
+ {
+ "id": 3068116692404357
+ },
+ {
+ "id": 3068111489616069
+ },
+ {
+ "id": 3068092242643141
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5561,
+ "records_with_pk": 5561,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 30,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068195100772613
+ },
+ {
+ "id": 3068173057591429
+ },
+ {
+ "id": 3068173057542277
+ },
+ {
+ "id": 3068172411242629
+ },
+ {
+ "id": 3068172411193477
+ },
+ {
+ "id": 3068165923555589
+ },
+ {
+ "id": 3068144683387141
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4052,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 4052,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 104,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T21:17:52.264245+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18387,
+ "diff": -18386
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3336,
+ "diff": -3336
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 12,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 40,
+ "ods": 40,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 80,
+ "ods": 80,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3336,
+ "ods": 3336,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71642.8,
+ "ods_sum": 71642.8,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 394705.62,
+ "ods_sum": 394705.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33307.25,
+ "ods_sum": 33307.25,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 156623.79,
+ "ods_sum": 156623.79,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18387,
+ "diff": -1
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4134,
+ "ods": 4134,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1544.05,
+ "ods_sum": 1544.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 98139.8,
+ "ods_sum": 98139.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 87610.8,
+ "ods_sum": 87610.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 884,
+ "ods": 884,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1437.75,
+ "ods_sum": 1437.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 281102.62,
+ "ods_sum": 281102.62,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2838,
+ "ods": 2838,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 172860.0,
+ "ods_sum": 172860.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11428,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2843,
+ "ods": 2843,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 173800.0,
+ "ods_sum": 173800.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16981,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3999,
+ "ods": 3999,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 457185.0,
+ "ods_sum": 457185.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 17,
+ "ods": 17,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -16567.0,
+ "ods_sum": -16567.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -21711
+ },
+ "generated_at": "2026-01-26T21:17:56.037437+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-12-01T00:00:00+08:00",
+ "end": "2026-01-01T00:00:00+08:00",
+ "label": "month_2025-12-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-11-30T22:00:00+08:00",
+ "end": "2026-01-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4044,
+ "records_with_pk": 4044,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 23,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9965,
+ "records_with_pk": 9965,
+ "missing": 25,
+ "missing_samples": [
+ {
+ "id": 3068195098511621
+ },
+ {
+ "id": 3068191315953989
+ },
+ {
+ "id": 3068189905504453
+ },
+ {
+ "id": 3068187432765765
+ },
+ {
+ "id": 3068178372888901
+ },
+ {
+ "id": 3068178323785925
+ },
+ {
+ "id": 3068176796108933
+ },
+ {
+ "id": 3068173055166597
+ },
+ {
+ "id": 3068173055182981
+ },
+ {
+ "id": 3068173055199365
+ },
+ {
+ "id": 3068172409112709
+ },
+ {
+ "id": 3068172409145477
+ },
+ {
+ "id": 3068172409161861
+ },
+ {
+ "id": 3068165922326789
+ },
+ {
+ "id": 3068161263093893
+ },
+ {
+ "id": 3068147084101765
+ },
+ {
+ "id": 3068144682748165
+ },
+ {
+ "id": 3068137883715845
+ },
+ {
+ "id": 3068137496643781
+ },
+ {
+ "id": 3068136781121733
+ },
+ {
+ "id": 3068136781088965
+ },
+ {
+ "id": 3068116743686405
+ },
+ {
+ "id": 3068116691830917
+ },
+ {
+ "id": 3068111488747717
+ },
+ {
+ "id": 3068092242069701
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 984,
+ "records_with_pk": 984,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 35,
+ "records_with_pk": 35,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11795,
+ "records_with_pk": 11795,
+ "missing": 24,
+ "missing_samples": [
+ {
+ "id": 3068204085283013
+ },
+ {
+ "id": 3068195094317317
+ },
+ {
+ "id": 3068193228065029
+ },
+ {
+ "id": 3068191313217861
+ },
+ {
+ "id": 3068189902260421
+ },
+ {
+ "id": 3068187430504773
+ },
+ {
+ "id": 3068178370578757
+ },
+ {
+ "id": 3068178321377477
+ },
+ {
+ "id": 3068176793585797
+ },
+ {
+ "id": 3068173815810309
+ },
+ {
+ "id": 3068173050710149
+ },
+ {
+ "id": 3068172403804293
+ },
+ {
+ "id": 3068165919459589
+ },
+ {
+ "id": 3068161259849861
+ },
+ {
+ "id": 3068156518615365
+ },
+ {
+ "id": 3068147081676933
+ },
+ {
+ "id": 3068144680323333
+ },
+ {
+ "id": 3068137880373509
+ },
+ {
+ "id": 3068137493563589
+ },
+ {
+ "id": 3068136777763013
+ },
+ {
+ "id": 3068116741064965
+ },
+ {
+ "id": 3068116689406085
+ },
+ {
+ "id": 3068111485782213
+ },
+ {
+ "id": 3068092239743173
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17009,
+ "records_with_pk": 17009,
+ "missing": 28,
+ "missing_samples": [
+ {
+ "id": 3068199835715909
+ },
+ {
+ "id": 3068193998768325
+ },
+ {
+ "id": 3068188476033349
+ },
+ {
+ "id": 3068183718152325
+ },
+ {
+ "id": 3068182719219909
+ },
+ {
+ "id": 3068180288719109
+ },
+ {
+ "id": 3068179623479493
+ },
+ {
+ "id": 3068171775248517
+ },
+ {
+ "id": 3068171587406021
+ },
+ {
+ "id": 3068168069302533
+ },
+ {
+ "id": 3068166536087749
+ },
+ {
+ "id": 3068164968204421
+ },
+ {
+ "id": 3068160926992709
+ },
+ {
+ "id": 3068156135868741
+ },
+ {
+ "id": 3068154759743749
+ },
+ {
+ "id": 3068148319062213
+ },
+ {
+ "id": 3068146395908357
+ },
+ {
+ "id": 3068144802646213
+ },
+ {
+ "id": 3068143756839239
+ },
+ {
+ "id": 3068143756839238
+ },
+ {
+ "id": 3068143756839237
+ },
+ {
+ "id": 3068136318617733
+ },
+ {
+ "id": 3068128340887877
+ },
+ {
+ "id": 3068121241585925
+ },
+ {
+ "id": 3068118919940421
+ },
+ {
+ "id": 3068118229600453
+ },
+ {
+ "id": 3068113712285957
+ },
+ {
+ "id": 3068091996113029
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 8,
+ "missing_samples": [
+ {
+ "id": 3068195181201285
+ },
+ {
+ "id": 3068195094923525
+ },
+ {
+ "id": 3068193229965573
+ },
+ {
+ "id": 3068189902866629
+ },
+ {
+ "id": 3068173051381893
+ },
+ {
+ "id": 3068172404426885
+ },
+ {
+ "id": 3068161260423301
+ },
+ {
+ "id": 3068156519303493
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 70,
+ "records_with_pk": 70,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8176,
+ "records_with_pk": 8176,
+ "missing": 15,
+ "missing_samples": [
+ {
+ "id": 3068205069404357
+ },
+ {
+ "id": 3068204090689733
+ },
+ {
+ "id": 3068191316789573
+ },
+ {
+ "id": 3068187433306437
+ },
+ {
+ "id": 3068187433322821
+ },
+ {
+ "id": 3068178373445957
+ },
+ {
+ "id": 3068178324654277
+ },
+ {
+ "id": 3068176796911749
+ },
+ {
+ "id": 3068147084724357
+ },
+ {
+ "id": 3068137884977413
+ },
+ {
+ "id": 3068137497528517
+ },
+ {
+ "id": 3068116744390917
+ },
+ {
+ "id": 3068116692404357
+ },
+ {
+ "id": 3068111489616069
+ },
+ {
+ "id": 3068092242643141
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5490,
+ "records_with_pk": 5490,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 30,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068195100772613
+ },
+ {
+ "id": 3068173057591429
+ },
+ {
+ "id": 3068173057542277
+ },
+ {
+ "id": 3068172411242629
+ },
+ {
+ "id": 3068172411193477
+ },
+ {
+ "id": 3068165923555589
+ },
+ {
+ "id": 3068144683387141
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4151,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 23,
+ "skipped_missing_pk": 4151,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 107,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T21:20:56.597878+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18387,
+ "diff": -18386
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3479,
+ "diff": -3479
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 12,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3479,
+ "ods": 3479,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71445.57,
+ "ods_sum": 71445.57,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 432220.76,
+ "ods_sum": 432220.76,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 34544.63,
+ "ods_sum": 34544.63,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 189974.44,
+ "ods_sum": 189974.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18387,
+ "diff": -1
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2625,
+ "ods": 2625,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 190.1,
+ "ods_sum": 190.1,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 65814.4,
+ "ods_sum": 65814.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 63275.9,
+ "ods_sum": 63275.9,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 975,
+ "ods": 975,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 3190.05,
+ "ods_sum": 3190.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 322183.69,
+ "ods_sum": 322183.69,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2816,
+ "ods": 2816,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 179652.0,
+ "ods_sum": 179652.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11428,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2827,
+ "ods": 2827,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 180232.0,
+ "ods_sum": 180232.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16981,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4118,
+ "ods": 4118,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 472999.0,
+ "ods_sum": 472999.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -4314.0,
+ "ods_sum": -4314.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -21854
+ },
+ "generated_at": "2026-01-26T21:21:01.287237+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-01T00:00:00+08:00",
+ "end": "2026-01-08T00:00:00+08:00",
+ "label": "week_2026-01-01",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-12-31T22:00:00+08:00",
+ "end": "2026-01-08T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 138,
+ "records_with_pk": 138,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 827,
+ "records_with_pk": 827,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 27,
+ "missing_samples": [
+ {
+ "id": 3068205068568773
+ },
+ {
+ "id": 3068204090067141
+ },
+ {
+ "id": 3068195098511621
+ },
+ {
+ "id": 3068191315953989
+ },
+ {
+ "id": 3068189905504453
+ },
+ {
+ "id": 3068187432765765
+ },
+ {
+ "id": 3068178372888901
+ },
+ {
+ "id": 3068178323785925
+ },
+ {
+ "id": 3068176796108933
+ },
+ {
+ "id": 3068173055166597
+ },
+ {
+ "id": 3068173055182981
+ },
+ {
+ "id": 3068173055199365
+ },
+ {
+ "id": 3068172409112709
+ },
+ {
+ "id": 3068172409145477
+ },
+ {
+ "id": 3068172409161861
+ },
+ {
+ "id": 3068165922326789
+ },
+ {
+ "id": 3068161263093893
+ },
+ {
+ "id": 3068147084101765
+ },
+ {
+ "id": 3068144682748165
+ },
+ {
+ "id": 3068137883715845
+ },
+ {
+ "id": 3068137496643781
+ },
+ {
+ "id": 3068136781121733
+ },
+ {
+ "id": 3068136781088965
+ },
+ {
+ "id": 3068116743686405
+ },
+ {
+ "id": 3068116691830917
+ },
+ {
+ "id": 3068111488747717
+ },
+ {
+ "id": 3068092242069701
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 167,
+ "records_with_pk": 167,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10,
+ "records_with_pk": 10,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11796,
+ "records_with_pk": 11796,
+ "missing": 25,
+ "missing_samples": [
+ {
+ "id": 3068205065799877
+ },
+ {
+ "id": 3068204085283013
+ },
+ {
+ "id": 3068195094317317
+ },
+ {
+ "id": 3068193228065029
+ },
+ {
+ "id": 3068191313217861
+ },
+ {
+ "id": 3068189902260421
+ },
+ {
+ "id": 3068187430504773
+ },
+ {
+ "id": 3068178370578757
+ },
+ {
+ "id": 3068178321377477
+ },
+ {
+ "id": 3068176793585797
+ },
+ {
+ "id": 3068173815810309
+ },
+ {
+ "id": 3068173050710149
+ },
+ {
+ "id": 3068172403804293
+ },
+ {
+ "id": 3068165919459589
+ },
+ {
+ "id": 3068161259849861
+ },
+ {
+ "id": 3068156518615365
+ },
+ {
+ "id": 3068147081676933
+ },
+ {
+ "id": 3068144680323333
+ },
+ {
+ "id": 3068137880373509
+ },
+ {
+ "id": 3068137493563589
+ },
+ {
+ "id": 3068136777763013
+ },
+ {
+ "id": 3068116741064965
+ },
+ {
+ "id": 3068116689406085
+ },
+ {
+ "id": 3068111485782213
+ },
+ {
+ "id": 3068092239743173
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17009,
+ "records_with_pk": 17009,
+ "missing": 28,
+ "missing_samples": [
+ {
+ "id": 3068199835715909
+ },
+ {
+ "id": 3068193998768325
+ },
+ {
+ "id": 3068188476033349
+ },
+ {
+ "id": 3068183718152325
+ },
+ {
+ "id": 3068182719219909
+ },
+ {
+ "id": 3068180288719109
+ },
+ {
+ "id": 3068179623479493
+ },
+ {
+ "id": 3068171775248517
+ },
+ {
+ "id": 3068171587406021
+ },
+ {
+ "id": 3068168069302533
+ },
+ {
+ "id": 3068166536087749
+ },
+ {
+ "id": 3068164968204421
+ },
+ {
+ "id": 3068160926992709
+ },
+ {
+ "id": 3068156135868741
+ },
+ {
+ "id": 3068154759743749
+ },
+ {
+ "id": 3068148319062213
+ },
+ {
+ "id": 3068146395908357
+ },
+ {
+ "id": 3068144802646213
+ },
+ {
+ "id": 3068143756839239
+ },
+ {
+ "id": 3068143756839238
+ },
+ {
+ "id": 3068143756839237
+ },
+ {
+ "id": 3068136318617733
+ },
+ {
+ "id": 3068128340887877
+ },
+ {
+ "id": 3068121241585925
+ },
+ {
+ "id": 3068118919940421
+ },
+ {
+ "id": 3068118229600453
+ },
+ {
+ "id": 3068113712285957
+ },
+ {
+ "id": 3068091996113029
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 8,
+ "missing_samples": [
+ {
+ "id": 3068195181201285
+ },
+ {
+ "id": 3068195094923525
+ },
+ {
+ "id": 3068193229965573
+ },
+ {
+ "id": 3068189902866629
+ },
+ {
+ "id": 3068173051381893
+ },
+ {
+ "id": 3068172404426885
+ },
+ {
+ "id": 3068161260423301
+ },
+ {
+ "id": 3068156519303493
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8176,
+ "records_with_pk": 8176,
+ "missing": 15,
+ "missing_samples": [
+ {
+ "id": 3068205069404357
+ },
+ {
+ "id": 3068204090689733
+ },
+ {
+ "id": 3068191316789573
+ },
+ {
+ "id": 3068187433306437
+ },
+ {
+ "id": 3068187433322821
+ },
+ {
+ "id": 3068178373445957
+ },
+ {
+ "id": 3068178324654277
+ },
+ {
+ "id": 3068176796911749
+ },
+ {
+ "id": 3068147084724357
+ },
+ {
+ "id": 3068137884977413
+ },
+ {
+ "id": 3068137497528517
+ },
+ {
+ "id": 3068116744390917
+ },
+ {
+ "id": 3068116692404357
+ },
+ {
+ "id": 3068111489616069
+ },
+ {
+ "id": 3068092242643141
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 880,
+ "records_with_pk": 880,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068195100772613
+ },
+ {
+ "id": 3068173057591429
+ },
+ {
+ "id": 3068173057542277
+ },
+ {
+ "id": 3068172411242629
+ },
+ {
+ "id": 3068172411193477
+ },
+ {
+ "id": 3068165923555589
+ },
+ {
+ "id": 3068144683387141
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 851,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 851,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 110,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T21:23:35.041502+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18387,
+ "diff": -18386
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 699,
+ "diff": -699
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 699,
+ "ods": 699,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 8896.03,
+ "ods_sum": 8896.03,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 74693.62,
+ "ods_sum": 74693.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6587.39,
+ "ods_sum": 6587.39,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30138.48,
+ "ods_sum": 30138.48,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18387,
+ "diff": -1
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 157,
+ "ods": 157,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 46522.68,
+ "ods_sum": 46522.68,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 569,
+ "ods": 569,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37392.0,
+ "ods_sum": 37392.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11428,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 566,
+ "ods": 566,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37228.0,
+ "ods_sum": 37228.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16981,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 823,
+ "ods": 823,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 78730.0,
+ "ods_sum": 78730.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -7.0,
+ "ods_sum": -7.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19074
+ },
+ "generated_at": "2026-01-26T21:23:38.763155+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-08T00:00:00+08:00",
+ "end": "2026-01-15T00:00:00+08:00",
+ "label": "week_2026-01-08",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-07T22:00:00+08:00",
+ "end": "2026-01-15T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 790,
+ "records_with_pk": 790,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9967,
+ "records_with_pk": 9967,
+ "missing": 27,
+ "missing_samples": [
+ {
+ "id": 3068205068568773
+ },
+ {
+ "id": 3068204090067141
+ },
+ {
+ "id": 3068195098511621
+ },
+ {
+ "id": 3068191315953989
+ },
+ {
+ "id": 3068189905504453
+ },
+ {
+ "id": 3068187432765765
+ },
+ {
+ "id": 3068178372888901
+ },
+ {
+ "id": 3068178323785925
+ },
+ {
+ "id": 3068176796108933
+ },
+ {
+ "id": 3068173055166597
+ },
+ {
+ "id": 3068173055182981
+ },
+ {
+ "id": 3068173055199365
+ },
+ {
+ "id": 3068172409112709
+ },
+ {
+ "id": 3068172409145477
+ },
+ {
+ "id": 3068172409161861
+ },
+ {
+ "id": 3068165922326789
+ },
+ {
+ "id": 3068161263093893
+ },
+ {
+ "id": 3068147084101765
+ },
+ {
+ "id": 3068144682748165
+ },
+ {
+ "id": 3068137883715845
+ },
+ {
+ "id": 3068137496643781
+ },
+ {
+ "id": 3068136781121733
+ },
+ {
+ "id": 3068136781088965
+ },
+ {
+ "id": 3068116743686405
+ },
+ {
+ "id": 3068116691830917
+ },
+ {
+ "id": 3068111488747717
+ },
+ {
+ "id": 3068092242069701
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 195,
+ "records_with_pk": 195,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 22,
+ "records_with_pk": 22,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11796,
+ "records_with_pk": 11796,
+ "missing": 25,
+ "missing_samples": [
+ {
+ "id": 3068205065799877
+ },
+ {
+ "id": 3068204085283013
+ },
+ {
+ "id": 3068195094317317
+ },
+ {
+ "id": 3068193228065029
+ },
+ {
+ "id": 3068191313217861
+ },
+ {
+ "id": 3068189902260421
+ },
+ {
+ "id": 3068187430504773
+ },
+ {
+ "id": 3068178370578757
+ },
+ {
+ "id": 3068178321377477
+ },
+ {
+ "id": 3068176793585797
+ },
+ {
+ "id": 3068173815810309
+ },
+ {
+ "id": 3068173050710149
+ },
+ {
+ "id": 3068172403804293
+ },
+ {
+ "id": 3068165919459589
+ },
+ {
+ "id": 3068161259849861
+ },
+ {
+ "id": 3068156518615365
+ },
+ {
+ "id": 3068147081676933
+ },
+ {
+ "id": 3068144680323333
+ },
+ {
+ "id": 3068137880373509
+ },
+ {
+ "id": 3068137493563589
+ },
+ {
+ "id": 3068136777763013
+ },
+ {
+ "id": 3068116741064965
+ },
+ {
+ "id": 3068116689406085
+ },
+ {
+ "id": 3068111485782213
+ },
+ {
+ "id": 3068092239743173
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17010,
+ "records_with_pk": 17010,
+ "missing": 29,
+ "missing_samples": [
+ {
+ "id": 3068208146909445
+ },
+ {
+ "id": 3068199835715909
+ },
+ {
+ "id": 3068193998768325
+ },
+ {
+ "id": 3068188476033349
+ },
+ {
+ "id": 3068183718152325
+ },
+ {
+ "id": 3068182719219909
+ },
+ {
+ "id": 3068180288719109
+ },
+ {
+ "id": 3068179623479493
+ },
+ {
+ "id": 3068171775248517
+ },
+ {
+ "id": 3068171587406021
+ },
+ {
+ "id": 3068168069302533
+ },
+ {
+ "id": 3068166536087749
+ },
+ {
+ "id": 3068164968204421
+ },
+ {
+ "id": 3068160926992709
+ },
+ {
+ "id": 3068156135868741
+ },
+ {
+ "id": 3068154759743749
+ },
+ {
+ "id": 3068148319062213
+ },
+ {
+ "id": 3068146395908357
+ },
+ {
+ "id": 3068144802646213
+ },
+ {
+ "id": 3068143756839239
+ },
+ {
+ "id": 3068143756839238
+ },
+ {
+ "id": 3068143756839237
+ },
+ {
+ "id": 3068136318617733
+ },
+ {
+ "id": 3068128340887877
+ },
+ {
+ "id": 3068121241585925
+ },
+ {
+ "id": 3068118919940421
+ },
+ {
+ "id": 3068118229600453
+ },
+ {
+ "id": 3068113712285957
+ },
+ {
+ "id": 3068091996113029
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 8,
+ "missing_samples": [
+ {
+ "id": 3068195181201285
+ },
+ {
+ "id": 3068195094923525
+ },
+ {
+ "id": 3068193229965573
+ },
+ {
+ "id": 3068189902866629
+ },
+ {
+ "id": 3068173051381893
+ },
+ {
+ "id": 3068172404426885
+ },
+ {
+ "id": 3068161260423301
+ },
+ {
+ "id": 3068156519303493
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 15,
+ "records_with_pk": 15,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8178,
+ "records_with_pk": 8178,
+ "missing": 17,
+ "missing_samples": [
+ {
+ "id": 3068210315135301
+ },
+ {
+ "id": 3068210315135302
+ },
+ {
+ "id": 3068205069404357
+ },
+ {
+ "id": 3068204090689733
+ },
+ {
+ "id": 3068191316789573
+ },
+ {
+ "id": 3068187433306437
+ },
+ {
+ "id": 3068187433322821
+ },
+ {
+ "id": 3068178373445957
+ },
+ {
+ "id": 3068178324654277
+ },
+ {
+ "id": 3068176796911749
+ },
+ {
+ "id": 3068147084724357
+ },
+ {
+ "id": 3068137884977413
+ },
+ {
+ "id": 3068137497528517
+ },
+ {
+ "id": 3068116744390917
+ },
+ {
+ "id": 3068116692404357
+ },
+ {
+ "id": 3068111489616069
+ },
+ {
+ "id": 3068092242643141
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1241,
+ "records_with_pk": 1241,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068195100772613
+ },
+ {
+ "id": 3068173057591429
+ },
+ {
+ "id": 3068173057542277
+ },
+ {
+ "id": 3068172411242629
+ },
+ {
+ "id": 3068172411193477
+ },
+ {
+ "id": 3068165923555589
+ },
+ {
+ "id": 3068144683387141
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 814,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 814,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 113,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T21:26:03.247914+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18387,
+ "diff": -18386
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 672,
+ "diff": -672
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 672,
+ "ods": 672,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 16159.12,
+ "ods_sum": 16159.12,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 82416.19,
+ "ods_sum": 82416.19,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6098.02,
+ "ods_sum": 6098.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30731.98,
+ "ods_sum": 30731.98,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18387,
+ "diff": -1
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 188,
+ "ods": 188,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 190.72,
+ "ods_sum": 190.72,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 54584.19,
+ "ods_sum": 54584.19,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 572,
+ "ods": 572,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37214.0,
+ "ods_sum": 37214.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11428,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 575,
+ "ods": 575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37262.0,
+ "ods_sum": 37262.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16981,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 790,
+ "ods": 790,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 86381.0,
+ "ods_sum": 86381.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -39.0,
+ "ods_sum": -39.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19047
+ },
+ "generated_at": "2026-01-26T21:26:07.020272+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-15T00:00:00+08:00",
+ "end": "2026-01-22T00:00:00+08:00",
+ "label": "week_2026-01-15",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-14T22:00:00+08:00",
+ "end": "2026-01-22T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 899,
+ "records_with_pk": 899,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9968,
+ "records_with_pk": 9968,
+ "missing": 28,
+ "missing_samples": [
+ {
+ "id": 3068210314332485
+ },
+ {
+ "id": 3068205068568773
+ },
+ {
+ "id": 3068204090067141
+ },
+ {
+ "id": 3068195098511621
+ },
+ {
+ "id": 3068191315953989
+ },
+ {
+ "id": 3068189905504453
+ },
+ {
+ "id": 3068187432765765
+ },
+ {
+ "id": 3068178372888901
+ },
+ {
+ "id": 3068178323785925
+ },
+ {
+ "id": 3068176796108933
+ },
+ {
+ "id": 3068173055166597
+ },
+ {
+ "id": 3068173055182981
+ },
+ {
+ "id": 3068173055199365
+ },
+ {
+ "id": 3068172409112709
+ },
+ {
+ "id": 3068172409145477
+ },
+ {
+ "id": 3068172409161861
+ },
+ {
+ "id": 3068165922326789
+ },
+ {
+ "id": 3068161263093893
+ },
+ {
+ "id": 3068147084101765
+ },
+ {
+ "id": 3068144682748165
+ },
+ {
+ "id": 3068137883715845
+ },
+ {
+ "id": 3068137496643781
+ },
+ {
+ "id": 3068136781121733
+ },
+ {
+ "id": 3068136781088965
+ },
+ {
+ "id": 3068116743686405
+ },
+ {
+ "id": 3068116691830917
+ },
+ {
+ "id": 3068111488747717
+ },
+ {
+ "id": 3068092242069701
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 216,
+ "records_with_pk": 216,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 6,
+ "records_with_pk": 6,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11797,
+ "records_with_pk": 11797,
+ "missing": 26,
+ "missing_samples": [
+ {
+ "id": 3068210312022341
+ },
+ {
+ "id": 3068205065799877
+ },
+ {
+ "id": 3068204085283013
+ },
+ {
+ "id": 3068195094317317
+ },
+ {
+ "id": 3068193228065029
+ },
+ {
+ "id": 3068191313217861
+ },
+ {
+ "id": 3068189902260421
+ },
+ {
+ "id": 3068187430504773
+ },
+ {
+ "id": 3068178370578757
+ },
+ {
+ "id": 3068178321377477
+ },
+ {
+ "id": 3068176793585797
+ },
+ {
+ "id": 3068173815810309
+ },
+ {
+ "id": 3068173050710149
+ },
+ {
+ "id": 3068172403804293
+ },
+ {
+ "id": 3068165919459589
+ },
+ {
+ "id": 3068161259849861
+ },
+ {
+ "id": 3068156518615365
+ },
+ {
+ "id": 3068147081676933
+ },
+ {
+ "id": 3068144680323333
+ },
+ {
+ "id": 3068137880373509
+ },
+ {
+ "id": 3068137493563589
+ },
+ {
+ "id": 3068136777763013
+ },
+ {
+ "id": 3068116741064965
+ },
+ {
+ "id": 3068116689406085
+ },
+ {
+ "id": 3068111485782213
+ },
+ {
+ "id": 3068092239743173
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17012,
+ "records_with_pk": 17012,
+ "missing": 31,
+ "missing_samples": [
+ {
+ "id": 3068211546622085
+ },
+ {
+ "id": 3068210794449157
+ },
+ {
+ "id": 3068208146909445
+ },
+ {
+ "id": 3068199835715909
+ },
+ {
+ "id": 3068193998768325
+ },
+ {
+ "id": 3068188476033349
+ },
+ {
+ "id": 3068183718152325
+ },
+ {
+ "id": 3068182719219909
+ },
+ {
+ "id": 3068180288719109
+ },
+ {
+ "id": 3068179623479493
+ },
+ {
+ "id": 3068171775248517
+ },
+ {
+ "id": 3068171587406021
+ },
+ {
+ "id": 3068168069302533
+ },
+ {
+ "id": 3068166536087749
+ },
+ {
+ "id": 3068164968204421
+ },
+ {
+ "id": 3068160926992709
+ },
+ {
+ "id": 3068156135868741
+ },
+ {
+ "id": 3068154759743749
+ },
+ {
+ "id": 3068148319062213
+ },
+ {
+ "id": 3068146395908357
+ },
+ {
+ "id": 3068144802646213
+ },
+ {
+ "id": 3068143756839239
+ },
+ {
+ "id": 3068143756839238
+ },
+ {
+ "id": 3068143756839237
+ },
+ {
+ "id": 3068136318617733
+ },
+ {
+ "id": 3068128340887877
+ },
+ {
+ "id": 3068121241585925
+ },
+ {
+ "id": 3068118919940421
+ },
+ {
+ "id": 3068118229600453
+ },
+ {
+ "id": 3068113712285957
+ },
+ {
+ "id": 3068091996113029
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 8,
+ "missing_samples": [
+ {
+ "id": 3068195181201285
+ },
+ {
+ "id": 3068195094923525
+ },
+ {
+ "id": 3068193229965573
+ },
+ {
+ "id": 3068189902866629
+ },
+ {
+ "id": 3068173051381893
+ },
+ {
+ "id": 3068172404426885
+ },
+ {
+ "id": 3068161260423301
+ },
+ {
+ "id": 3068156519303493
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 21,
+ "records_with_pk": 21,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8178,
+ "records_with_pk": 8178,
+ "missing": 17,
+ "missing_samples": [
+ {
+ "id": 3068210315135301
+ },
+ {
+ "id": 3068210315135302
+ },
+ {
+ "id": 3068205069404357
+ },
+ {
+ "id": 3068204090689733
+ },
+ {
+ "id": 3068191316789573
+ },
+ {
+ "id": 3068187433306437
+ },
+ {
+ "id": 3068187433322821
+ },
+ {
+ "id": 3068178373445957
+ },
+ {
+ "id": 3068178324654277
+ },
+ {
+ "id": 3068176796911749
+ },
+ {
+ "id": 3068147084724357
+ },
+ {
+ "id": 3068137884977413
+ },
+ {
+ "id": 3068137497528517
+ },
+ {
+ "id": 3068116744390917
+ },
+ {
+ "id": 3068116692404357
+ },
+ {
+ "id": 3068111489616069
+ },
+ {
+ "id": 3068092242643141
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1181,
+ "records_with_pk": 1181,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068195100772613
+ },
+ {
+ "id": 3068173057591429
+ },
+ {
+ "id": 3068173057542277
+ },
+ {
+ "id": 3068172411242629
+ },
+ {
+ "id": 3068172411193477
+ },
+ {
+ "id": 3068165923555589
+ },
+ {
+ "id": 3068144683387141
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 932,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 932,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 117,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T21:28:30.386946+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18387,
+ "diff": -18386
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 776,
+ "diff": -776
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 776,
+ "ods": 776,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 16959.34,
+ "ods_sum": 16959.34,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 38520.64,
+ "ods_sum": 38520.64,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 93110.51,
+ "ods_sum": 93110.51,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 5009.13,
+ "ods_sum": 5009.13,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 40591.34,
+ "ods_sum": 40591.34,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18387,
+ "diff": -1
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 212,
+ "ods": 212,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 191.21,
+ "ods_sum": 191.21,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 70610.77,
+ "ods_sum": 70610.77,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 613,
+ "ods": 613,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 40100.0,
+ "ods_sum": 40100.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 38520.64,
+ "ods_sum": 38520.64,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11428,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 616,
+ "ods": 616,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 40456.0,
+ "ods_sum": 40456.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16981,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 896,
+ "ods": 896,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 123718.0,
+ "ods_sum": 123718.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -34.0,
+ "ods_sum": -34.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19151
+ },
+ "generated_at": "2026-01-26T21:28:34.665626+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-22T00:00:00+08:00",
+ "end": "2026-01-26T00:00:00+08:00",
+ "label": "week_2026-01-22",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-21T22:00:00+08:00",
+ "end": "2026-01-26T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 4,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 540,
+ "records_with_pk": 540,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9968,
+ "records_with_pk": 9968,
+ "missing": 28,
+ "missing_samples": [
+ {
+ "id": 3068210314332485
+ },
+ {
+ "id": 3068205068568773
+ },
+ {
+ "id": 3068204090067141
+ },
+ {
+ "id": 3068195098511621
+ },
+ {
+ "id": 3068191315953989
+ },
+ {
+ "id": 3068189905504453
+ },
+ {
+ "id": 3068187432765765
+ },
+ {
+ "id": 3068178372888901
+ },
+ {
+ "id": 3068178323785925
+ },
+ {
+ "id": 3068176796108933
+ },
+ {
+ "id": 3068173055166597
+ },
+ {
+ "id": 3068173055182981
+ },
+ {
+ "id": 3068173055199365
+ },
+ {
+ "id": 3068172409112709
+ },
+ {
+ "id": 3068172409145477
+ },
+ {
+ "id": 3068172409161861
+ },
+ {
+ "id": 3068165922326789
+ },
+ {
+ "id": 3068161263093893
+ },
+ {
+ "id": 3068147084101765
+ },
+ {
+ "id": 3068144682748165
+ },
+ {
+ "id": 3068137883715845
+ },
+ {
+ "id": 3068137496643781
+ },
+ {
+ "id": 3068136781121733
+ },
+ {
+ "id": 3068136781088965
+ },
+ {
+ "id": 3068116743686405
+ },
+ {
+ "id": 3068116691830917
+ },
+ {
+ "id": 3068111488747717
+ },
+ {
+ "id": 3068092242069701
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 147,
+ "records_with_pk": 147,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 5,
+ "records_with_pk": 5,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11797,
+ "records_with_pk": 11797,
+ "missing": 26,
+ "missing_samples": [
+ {
+ "id": 3068210312022341
+ },
+ {
+ "id": 3068205065799877
+ },
+ {
+ "id": 3068204085283013
+ },
+ {
+ "id": 3068195094317317
+ },
+ {
+ "id": 3068193228065029
+ },
+ {
+ "id": 3068191313217861
+ },
+ {
+ "id": 3068189902260421
+ },
+ {
+ "id": 3068187430504773
+ },
+ {
+ "id": 3068178370578757
+ },
+ {
+ "id": 3068178321377477
+ },
+ {
+ "id": 3068176793585797
+ },
+ {
+ "id": 3068173815810309
+ },
+ {
+ "id": 3068173050710149
+ },
+ {
+ "id": 3068172403804293
+ },
+ {
+ "id": 3068165919459589
+ },
+ {
+ "id": 3068161259849861
+ },
+ {
+ "id": 3068156518615365
+ },
+ {
+ "id": 3068147081676933
+ },
+ {
+ "id": 3068144680323333
+ },
+ {
+ "id": 3068137880373509
+ },
+ {
+ "id": 3068137493563589
+ },
+ {
+ "id": 3068136777763013
+ },
+ {
+ "id": 3068116741064965
+ },
+ {
+ "id": 3068116689406085
+ },
+ {
+ "id": 3068111485782213
+ },
+ {
+ "id": 3068092239743173
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17012,
+ "records_with_pk": 17012,
+ "missing": 31,
+ "missing_samples": [
+ {
+ "id": 3068211546622085
+ },
+ {
+ "id": 3068210794449157
+ },
+ {
+ "id": 3068208146909445
+ },
+ {
+ "id": 3068199835715909
+ },
+ {
+ "id": 3068193998768325
+ },
+ {
+ "id": 3068188476033349
+ },
+ {
+ "id": 3068183718152325
+ },
+ {
+ "id": 3068182719219909
+ },
+ {
+ "id": 3068180288719109
+ },
+ {
+ "id": 3068179623479493
+ },
+ {
+ "id": 3068171775248517
+ },
+ {
+ "id": 3068171587406021
+ },
+ {
+ "id": 3068168069302533
+ },
+ {
+ "id": 3068166536087749
+ },
+ {
+ "id": 3068164968204421
+ },
+ {
+ "id": 3068160926992709
+ },
+ {
+ "id": 3068156135868741
+ },
+ {
+ "id": 3068154759743749
+ },
+ {
+ "id": 3068148319062213
+ },
+ {
+ "id": 3068146395908357
+ },
+ {
+ "id": 3068144802646213
+ },
+ {
+ "id": 3068143756839239
+ },
+ {
+ "id": 3068143756839238
+ },
+ {
+ "id": 3068143756839237
+ },
+ {
+ "id": 3068136318617733
+ },
+ {
+ "id": 3068128340887877
+ },
+ {
+ "id": 3068121241585925
+ },
+ {
+ "id": 3068118919940421
+ },
+ {
+ "id": 3068118229600453
+ },
+ {
+ "id": 3068113712285957
+ },
+ {
+ "id": 3068091996113029
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 8,
+ "missing_samples": [
+ {
+ "id": 3068195181201285
+ },
+ {
+ "id": 3068195094923525
+ },
+ {
+ "id": 3068193229965573
+ },
+ {
+ "id": 3068189902866629
+ },
+ {
+ "id": 3068173051381893
+ },
+ {
+ "id": 3068172404426885
+ },
+ {
+ "id": 3068161260423301
+ },
+ {
+ "id": 3068156519303493
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 6,
+ "records_with_pk": 6,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8178,
+ "records_with_pk": 8178,
+ "missing": 17,
+ "missing_samples": [
+ {
+ "id": 3068210315135301
+ },
+ {
+ "id": 3068210315135302
+ },
+ {
+ "id": 3068205069404357
+ },
+ {
+ "id": 3068204090689733
+ },
+ {
+ "id": 3068191316789573
+ },
+ {
+ "id": 3068187433306437
+ },
+ {
+ "id": 3068187433322821
+ },
+ {
+ "id": 3068178373445957
+ },
+ {
+ "id": 3068178324654277
+ },
+ {
+ "id": 3068176796911749
+ },
+ {
+ "id": 3068147084724357
+ },
+ {
+ "id": 3068137884977413
+ },
+ {
+ "id": 3068137497528517
+ },
+ {
+ "id": 3068116744390917
+ },
+ {
+ "id": 3068116692404357
+ },
+ {
+ "id": 3068111489616069
+ },
+ {
+ "id": 3068092242643141
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 953,
+ "records_with_pk": 953,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068195100772613
+ },
+ {
+ "id": 3068173057591429
+ },
+ {
+ "id": 3068173057542277
+ },
+ {
+ "id": 3068172411242629
+ },
+ {
+ "id": 3068172411193477
+ },
+ {
+ "id": 3068165923555589
+ },
+ {
+ "id": 3068144683387141
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 551,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 551,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 117,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T21:30:53.629320+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18387,
+ "diff": -18386
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 465,
+ "diff": -465
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 465,
+ "ods": 465,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 9264.7,
+ "ods_sum": 9264.7,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 21930.18,
+ "ods_sum": 21930.18,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 61454.19,
+ "ods_sum": 61454.19,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 1649.19,
+ "ods_sum": 1649.19,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 28610.12,
+ "ods_sum": 28610.12,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18387,
+ "diff": -1
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 329604.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 138,
+ "ods": 138,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 40013.33,
+ "ods_sum": 40013.33,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 331,
+ "ods": 331,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 22654.0,
+ "ods_sum": 22654.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 21930.18,
+ "ods_sum": 21930.18,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11428,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 330,
+ "ods": 330,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 22452.0,
+ "ods_sum": 22452.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16981,
+ "diff": -4
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 524,
+ "ods": 524,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 59984.0,
+ "ods_sum": 59984.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -7.0,
+ "ods_sum": -7.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18840
+ },
+ "generated_at": "2026-01-26T21:30:58.013020+08:00"
+ }
+ ],
+ "total_missing": 1060,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T21:30:58.013039+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_history_20260126_220521.json b/etl_billiards/reports/data_integrity_history_20260126_220521.json
new file mode 100644
index 0000000..bb42b9e
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_history_20260126_220521.json
@@ -0,0 +1,12264 @@
+{
+ "mode": "history",
+ "start": "2025-07-01T00:00:00+08:00",
+ "end": "2026-01-26T20:34:55.893505+08:00",
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-07-01T00:00:00+08:00",
+ "end": "2025-08-01T00:00:00+08:00",
+ "label": "month_2025-07-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-06-30T22:00:00+08:00",
+ "end": "2025-08-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1798,
+ "records_with_pk": 1798,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 11,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9970,
+ "records_with_pk": 9970,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068222447274181
+ },
+ {
+ "id": 3068219466008773
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 355,
+ "records_with_pk": 355,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11799,
+ "records_with_pk": 11799,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068222444570821
+ },
+ {
+ "id": 3068219463567557
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17012,
+ "records_with_pk": 17012,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 44,
+ "records_with_pk": 44,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8179,
+ "records_with_pk": 8179,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068222448126149
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 2578,
+ "records_with_pk": 2578,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 15,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 1867,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 12,
+ "skipped_missing_pk": 1867,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 5,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T21:41:09.504385+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18415,
+ "diff": -18414
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1246,
+ "diff": -1246
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 23,
+ "ods": 23,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 466,
+ "ods": 466,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 751,
+ "ods": 751,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 149,
+ "ods": 149,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 14,
+ "ods": 14,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1246,
+ "ods": 1246,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 18607.65,
+ "ods_sum": 18607.65,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 68759.8,
+ "ods_sum": 68759.8,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 133842.45,
+ "ods_sum": 133842.45,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 10234.83,
+ "ods_sum": 10234.83,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 46883.63,
+ "ods_sum": 46883.63,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18415,
+ "diff": -29
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1575,
+ "ods": 1575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 14.25,
+ "ods_sum": 14.25,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 31186.8,
+ "ods_sum": 31186.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 29160.8,
+ "ods_sum": 29160.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 351,
+ "ods": 351,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1261.59,
+ "ods_sum": 1261.59,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 113232.99,
+ "ods_sum": 113232.99,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4753,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4753,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11445,
+ "diff": -18
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1007,
+ "ods": 1007,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 72348.0,
+ "ods_sum": 72348.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17012,
+ "diff": -35
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1833,
+ "ods": 1833,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 178060.0,
+ "ods_sum": 178060.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19755
+ },
+ "generated_at": "2026-01-26T21:41:13.229803+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-08-01T00:00:00+08:00",
+ "end": "2025-09-01T00:00:00+08:00",
+ "label": "month_2025-08-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-07-31T22:00:00+08:00",
+ "end": "2025-09-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4653,
+ "records_with_pk": 4653,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 26,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9970,
+ "records_with_pk": 9970,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068222447274181
+ },
+ {
+ "id": 3068219466008773
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 867,
+ "records_with_pk": 867,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11799,
+ "records_with_pk": 11799,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068222444570821
+ },
+ {
+ "id": 3068219463567557
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17012,
+ "records_with_pk": 17012,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 96,
+ "records_with_pk": 96,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8179,
+ "records_with_pk": 8179,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068222448126149
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5271,
+ "records_with_pk": 5271,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 28,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4817,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 26,
+ "skipped_missing_pk": 4817,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 5,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T21:44:08.151349+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18415,
+ "diff": -18414
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3587,
+ "diff": -3587
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 18,
+ "ods": 18,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 51,
+ "ods": 51,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3587,
+ "ods": 3587,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 54919.33,
+ "ods_sum": 54919.33,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 186359.95,
+ "ods_sum": 186359.95,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 383097.96,
+ "ods_sum": 383097.96,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 44840.88,
+ "ods_sum": 44840.88,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 145513.13,
+ "ods_sum": 145513.13,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18415,
+ "diff": -29
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4305,
+ "ods": 4305,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 47.45,
+ "ods_sum": 47.45,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 87523.4,
+ "ods_sum": 87523.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 83759.0,
+ "ods_sum": 83759.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 859,
+ "ods": 859,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1874.75,
+ "ods_sum": 1874.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 268501.57,
+ "ods_sum": 268501.57,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4753,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4753,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11445,
+ "diff": -18
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2850,
+ "ods": 2850,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 189960.0,
+ "ods_sum": 189960.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17012,
+ "diff": -35
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4763,
+ "ods": 4763,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 381598.0,
+ "ods_sum": 381598.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -22096
+ },
+ "generated_at": "2026-01-26T21:44:12.218788+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-09-01T00:00:00+08:00",
+ "end": "2025-10-01T00:00:00+08:00",
+ "label": "month_2025-09-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-08-31T22:00:00+08:00",
+ "end": "2025-10-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3738,
+ "records_with_pk": 3738,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 21,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9970,
+ "records_with_pk": 9970,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068222447274181
+ },
+ {
+ "id": 3068219466008773
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 655,
+ "records_with_pk": 655,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11799,
+ "records_with_pk": 11799,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068222444570821
+ },
+ {
+ "id": 3068219463567557
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17013,
+ "records_with_pk": 17013,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068229355096261
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 54,
+ "records_with_pk": 54,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8179,
+ "records_with_pk": 8179,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068222448126149
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 4853,
+ "records_with_pk": 4853,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 27,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 3828,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 3828,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 6,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T21:46:58.872006+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18415,
+ "diff": -18414
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1264,
+ "diff": -1264
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 11,
+ "ods": 11,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1264,
+ "ods": 1264,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 11020.51,
+ "ods_sum": 11020.51,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 73893.75,
+ "ods_sum": 73893.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 137203.92,
+ "ods_sum": 137203.92,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 15685.02,
+ "ods_sum": 15685.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 52340.33,
+ "ods_sum": 52340.33,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18415,
+ "diff": -29
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1449,
+ "ods": 1449,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1.41,
+ "ods_sum": 1.41,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 24706.9,
+ "ods_sum": 24706.9,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 23874.4,
+ "ods_sum": 23874.4,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 654,
+ "ods": 654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 781.44,
+ "ods_sum": 781.44,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 192541.75,
+ "ods_sum": 192541.75,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4753,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4753,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1173,
+ "ods": 1173,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 75824.0,
+ "ods_sum": 75824.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 73843.08,
+ "ods_sum": 73843.08,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11445,
+ "diff": -18
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 184722.0,
+ "ods_sum": 184722.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17012,
+ "diff": -35
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1544,
+ "ods": 1544,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 108880.0,
+ "ods_sum": 108880.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -1011.0,
+ "ods_sum": -1011.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19773
+ },
+ "generated_at": "2026-01-26T21:47:07.017111+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-10-01T00:00:00+08:00",
+ "end": "2025-11-01T00:00:00+08:00",
+ "label": "month_2025-10-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-09-30T22:00:00+08:00",
+ "end": "2025-11-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 607,
+ "records_with_pk": 607,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9970,
+ "records_with_pk": 9970,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068222447274181
+ },
+ {
+ "id": 3068219466008773
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 136,
+ "records_with_pk": 136,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4,
+ "records_with_pk": 4,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11799,
+ "records_with_pk": 11799,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068222444570821
+ },
+ {
+ "id": 3068219463567557
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17013,
+ "records_with_pk": 17013,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068229355096261
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11,
+ "records_with_pk": 11,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8179,
+ "records_with_pk": 8179,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068222448126149
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 997,
+ "records_with_pk": 997,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 619,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 619,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 6,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T21:49:28.375378+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18415,
+ "diff": -18414
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2824,
+ "diff": -2824
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 21,
+ "ods": 21,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2824,
+ "ods": 2824,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 40394.85,
+ "ods_sum": 40394.85,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 310789.49,
+ "ods_sum": 310789.49,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33315.15,
+ "ods_sum": 33315.15,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 116393.37,
+ "ods_sum": 116393.37,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18415,
+ "diff": -29
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3475,
+ "ods": 3475,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1319.49,
+ "ods_sum": 1319.49,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 66216.8,
+ "ods_sum": 66216.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 64234.0,
+ "ods_sum": 64234.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 573,
+ "ods": 573,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 2143.56,
+ "ods_sum": 2143.56,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 172536.78,
+ "ods_sum": 172536.78,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4753,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4753,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2490,
+ "ods": 2490,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160988.0,
+ "ods_sum": 160988.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11445,
+ "diff": -18
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2489,
+ "ods": 2489,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160076.0,
+ "ods_sum": 160076.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17012,
+ "diff": -35
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3616,
+ "ods": 3616,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 286088.0,
+ "ods_sum": 286088.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -47020.0,
+ "ods_sum": -47020.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -21333
+ },
+ "generated_at": "2026-01-26T21:49:32.142106+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-11-01T00:00:00+08:00",
+ "end": "2025-12-01T00:00:00+08:00",
+ "label": "month_2025-11-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-10-31T22:00:00+08:00",
+ "end": "2025-12-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3927,
+ "records_with_pk": 3927,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9970,
+ "records_with_pk": 9970,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068222447274181
+ },
+ {
+ "id": 3068219466008773
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 890,
+ "records_with_pk": 890,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 12,
+ "records_with_pk": 12,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11799,
+ "records_with_pk": 11799,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068222444570821
+ },
+ {
+ "id": 3068219463567557
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17013,
+ "records_with_pk": 17013,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068229355096261
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 80,
+ "records_with_pk": 80,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8179,
+ "records_with_pk": 8179,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068222448126149
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5561,
+ "records_with_pk": 5561,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 30,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4052,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 4052,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 6,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T21:52:24.403264+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18415,
+ "diff": -18414
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3336,
+ "diff": -3336
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 12,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 40,
+ "ods": 40,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 80,
+ "ods": 80,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3336,
+ "ods": 3336,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71642.8,
+ "ods_sum": 71642.8,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 394705.62,
+ "ods_sum": 394705.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33307.25,
+ "ods_sum": 33307.25,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 156623.79,
+ "ods_sum": 156623.79,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18415,
+ "diff": -29
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4134,
+ "ods": 4134,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1544.05,
+ "ods_sum": 1544.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 98139.8,
+ "ods_sum": 98139.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 87610.8,
+ "ods_sum": 87610.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 884,
+ "ods": 884,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1437.75,
+ "ods_sum": 1437.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 281102.62,
+ "ods_sum": 281102.62,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4753,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4753,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2838,
+ "ods": 2838,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 172860.0,
+ "ods_sum": 172860.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11445,
+ "diff": -18
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2843,
+ "ods": 2843,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 173800.0,
+ "ods_sum": 173800.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17012,
+ "diff": -35
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3999,
+ "ods": 3999,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 457185.0,
+ "ods_sum": 457185.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 17,
+ "ods": 17,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -16567.0,
+ "ods_sum": -16567.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -21845
+ },
+ "generated_at": "2026-01-26T21:52:28.247932+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-12-01T00:00:00+08:00",
+ "end": "2026-01-01T00:00:00+08:00",
+ "label": "month_2025-12-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-11-30T22:00:00+08:00",
+ "end": "2026-01-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4044,
+ "records_with_pk": 4044,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 23,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9970,
+ "records_with_pk": 9970,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068222447274181
+ },
+ {
+ "id": 3068219466008773
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 984,
+ "records_with_pk": 984,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 35,
+ "records_with_pk": 35,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11800,
+ "records_with_pk": 11800,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068222444570821
+ },
+ {
+ "id": 3068219463567557
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17013,
+ "records_with_pk": 17013,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068229355096261
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 70,
+ "records_with_pk": 70,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8180,
+ "records_with_pk": 8180,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068238205438213
+ },
+ {
+ "id": 3068222448126149
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5490,
+ "records_with_pk": 5490,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 30,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4151,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 23,
+ "skipped_missing_pk": 4151,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 7,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T21:55:28.924920+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18415,
+ "diff": -18414
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3479,
+ "diff": -3479
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 12,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3479,
+ "ods": 3479,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71445.57,
+ "ods_sum": 71445.57,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 432220.76,
+ "ods_sum": 432220.76,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 34544.63,
+ "ods_sum": 34544.63,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 189974.44,
+ "ods_sum": 189974.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18415,
+ "diff": -29
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2625,
+ "ods": 2625,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 190.1,
+ "ods_sum": 190.1,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 65814.4,
+ "ods_sum": 65814.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 63275.9,
+ "ods_sum": 63275.9,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 975,
+ "ods": 975,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 3190.05,
+ "ods_sum": 3190.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 322183.69,
+ "ods_sum": 322183.69,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4753,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4753,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2816,
+ "ods": 2816,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 179652.0,
+ "ods_sum": 179652.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11445,
+ "diff": -18
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2827,
+ "ods": 2827,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 180232.0,
+ "ods_sum": 180232.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17012,
+ "diff": -35
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4118,
+ "ods": 4118,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 472999.0,
+ "ods_sum": 472999.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -4314.0,
+ "ods_sum": -4314.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -21988
+ },
+ "generated_at": "2026-01-26T21:55:32.591657+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-01T00:00:00+08:00",
+ "end": "2026-01-08T00:00:00+08:00",
+ "label": "week_2026-01-01",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-12-31T22:00:00+08:00",
+ "end": "2026-01-08T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 138,
+ "records_with_pk": 138,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 827,
+ "records_with_pk": 827,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9971,
+ "records_with_pk": 9971,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3068238204815621
+ },
+ {
+ "id": 3068222447274181
+ },
+ {
+ "id": 3068219466008773
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 167,
+ "records_with_pk": 167,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10,
+ "records_with_pk": 10,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11801,
+ "records_with_pk": 11801,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3068238202161413
+ },
+ {
+ "id": 3068222444570821
+ },
+ {
+ "id": 3068219463567557
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17013,
+ "records_with_pk": 17013,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068229355096261
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8181,
+ "records_with_pk": 8181,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3068240798615749
+ },
+ {
+ "id": 3068238205438213
+ },
+ {
+ "id": 3068222448126149
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 880,
+ "records_with_pk": 880,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 851,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 851,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 10,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T21:58:00.135945+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18415,
+ "diff": -18414
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 699,
+ "diff": -699
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 699,
+ "ods": 699,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 8896.03,
+ "ods_sum": 8896.03,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 74693.62,
+ "ods_sum": 74693.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6587.39,
+ "ods_sum": 6587.39,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30138.48,
+ "ods_sum": 30138.48,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18415,
+ "diff": -29
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 157,
+ "ods": 157,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 46522.68,
+ "ods_sum": 46522.68,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4753,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4753,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 569,
+ "ods": 569,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37392.0,
+ "ods_sum": 37392.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11445,
+ "diff": -18
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 566,
+ "ods": 566,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37228.0,
+ "ods_sum": 37228.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17012,
+ "diff": -35
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 823,
+ "ods": 823,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 78730.0,
+ "ods_sum": 78730.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -7.0,
+ "ods_sum": -7.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19208
+ },
+ "generated_at": "2026-01-26T21:58:04.110876+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-08T00:00:00+08:00",
+ "end": "2026-01-15T00:00:00+08:00",
+ "label": "week_2026-01-08",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-07T22:00:00+08:00",
+ "end": "2026-01-15T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 790,
+ "records_with_pk": 790,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9972,
+ "records_with_pk": 9972,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3068240797878469
+ },
+ {
+ "id": 3068238204815621
+ },
+ {
+ "id": 3068222447274181
+ },
+ {
+ "id": 3068219466008773
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 195,
+ "records_with_pk": 195,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 22,
+ "records_with_pk": 22,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11801,
+ "records_with_pk": 11801,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3068240795322565
+ },
+ {
+ "id": 3068238202161413
+ },
+ {
+ "id": 3068222444570821
+ },
+ {
+ "id": 3068219463567557
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17013,
+ "records_with_pk": 17013,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068229355096261
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 15,
+ "records_with_pk": 15,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8182,
+ "records_with_pk": 8182,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3068244055787781
+ },
+ {
+ "id": 3068240798615749
+ },
+ {
+ "id": 3068238205438213
+ },
+ {
+ "id": 3068222448126149
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1241,
+ "records_with_pk": 1241,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 814,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 814,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 13,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T22:00:28.049208+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18415,
+ "diff": -18414
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 672,
+ "diff": -672
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 672,
+ "ods": 672,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 16159.12,
+ "ods_sum": 16159.12,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 82416.19,
+ "ods_sum": 82416.19,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6098.02,
+ "ods_sum": 6098.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30731.98,
+ "ods_sum": 30731.98,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18415,
+ "diff": -29
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 188,
+ "ods": 188,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 190.72,
+ "ods_sum": 190.72,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 54584.19,
+ "ods_sum": 54584.19,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4753,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4753,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 572,
+ "ods": 572,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37214.0,
+ "ods_sum": 37214.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11445,
+ "diff": -18
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 575,
+ "ods": 575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37262.0,
+ "ods_sum": 37262.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17012,
+ "diff": -35
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 790,
+ "ods": 790,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 86381.0,
+ "ods_sum": 86381.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -39.0,
+ "ods_sum": -39.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19181
+ },
+ "generated_at": "2026-01-26T22:00:31.811348+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-15T00:00:00+08:00",
+ "end": "2026-01-22T00:00:00+08:00",
+ "label": "week_2026-01-15",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-14T22:00:00+08:00",
+ "end": "2026-01-22T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 899,
+ "records_with_pk": 899,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9973,
+ "records_with_pk": 9973,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068244055197957
+ },
+ {
+ "id": 3068240797878469
+ },
+ {
+ "id": 3068238204815621
+ },
+ {
+ "id": 3068222447274181
+ },
+ {
+ "id": 3068219466008773
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 216,
+ "records_with_pk": 216,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 6,
+ "records_with_pk": 6,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11803,
+ "records_with_pk": 11803,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068244052953349
+ },
+ {
+ "id": 3068240795322565
+ },
+ {
+ "id": 3068238202161413
+ },
+ {
+ "id": 3068222444570821
+ },
+ {
+ "id": 3068219463567557
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17013,
+ "records_with_pk": 17013,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068229355096261
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 21,
+ "records_with_pk": 21,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8183,
+ "records_with_pk": 8183,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068245704181957
+ },
+ {
+ "id": 3068244055787781
+ },
+ {
+ "id": 3068240798615749
+ },
+ {
+ "id": 3068238205438213
+ },
+ {
+ "id": 3068222448126149
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1181,
+ "records_with_pk": 1181,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 932,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 932,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 16,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T22:02:54.079041+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18415,
+ "diff": -18414
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 776,
+ "diff": -776
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 776,
+ "ods": 776,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 16959.34,
+ "ods_sum": 16959.34,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 38520.64,
+ "ods_sum": 38520.64,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 93110.51,
+ "ods_sum": 93110.51,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 5009.13,
+ "ods_sum": 5009.13,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 40591.34,
+ "ods_sum": 40591.34,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18415,
+ "diff": -29
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 212,
+ "ods": 212,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 191.21,
+ "ods_sum": 191.21,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 70610.77,
+ "ods_sum": 70610.77,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4753,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4753,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 613,
+ "ods": 613,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 40100.0,
+ "ods_sum": 40100.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 38520.64,
+ "ods_sum": 38520.64,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11445,
+ "diff": -18
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 616,
+ "ods": 616,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 40456.0,
+ "ods_sum": 40456.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17012,
+ "diff": -35
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 896,
+ "ods": 896,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 123718.0,
+ "ods_sum": 123718.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -34.0,
+ "ods_sum": -34.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19285
+ },
+ "generated_at": "2026-01-26T22:02:57.848303+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-22T00:00:00+08:00",
+ "end": "2026-01-26T20:34:55.893505+08:00",
+ "label": "week_2026-01-22",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-21T22:00:00+08:00",
+ "end": "2026-01-26T22:34:55.893505+08:00",
+ "cutoff": null,
+ "window_days": 4,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 602,
+ "records_with_pk": 602,
+ "missing": 33,
+ "missing_samples": [
+ {
+ "id": 3068247587326149
+ },
+ {
+ "id": 3068245677574277
+ },
+ {
+ "id": 3068244005472389
+ },
+ {
+ "id": 3068240723380549
+ },
+ {
+ "id": 3068238181681285
+ },
+ {
+ "id": 3068222416193797
+ },
+ {
+ "id": 3068219408025861
+ },
+ {
+ "id": 3068210285201669
+ },
+ {
+ "id": 3068205015746821
+ },
+ {
+ "id": 3068204058937477
+ },
+ {
+ "id": 3068195036170501
+ },
+ {
+ "id": 3068191206459653
+ },
+ {
+ "id": 3068189824059589
+ },
+ {
+ "id": 3068187415611653
+ },
+ {
+ "id": 3068178355669125
+ },
+ {
+ "id": 3068178301192325
+ },
+ {
+ "id": 3068176777808133
+ },
+ {
+ "id": 3068173758433541
+ },
+ {
+ "id": 3068172788353285
+ },
+ {
+ "id": 3068172286822597
+ },
+ {
+ "id": 3068165730896197
+ },
+ {
+ "id": 3068161172441285
+ },
+ {
+ "id": 3068156440938821
+ },
+ {
+ "id": 3068147068373253
+ },
+ {
+ "id": 3068144643229829
+ },
+ {
+ "id": 3068137701460101
+ },
+ {
+ "id": 3068137475737733
+ },
+ {
+ "id": 3068136505919813
+ },
+ {
+ "id": 3068116726745285
+ },
+ {
+ "id": 3068116674398469
+ },
+ {
+ "id": 3068111450900741
+ },
+ {
+ "id": 3068092211972229
+ },
+ {
+ "id": 3068052938459333
+ }
+ ],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9975,
+ "records_with_pk": 9975,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068247602841925
+ },
+ {
+ "id": 3068245703362757
+ },
+ {
+ "id": 3068244055197957
+ },
+ {
+ "id": 3068240797878469
+ },
+ {
+ "id": 3068238204815621
+ },
+ {
+ "id": 3068222447274181
+ },
+ {
+ "id": 3068219466008773
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 163,
+ "records_with_pk": 163,
+ "missing": 9,
+ "missing_samples": [
+ {
+ "id": 3068195099363589
+ },
+ {
+ "id": 3068173056575621
+ },
+ {
+ "id": 3068173056116869
+ },
+ {
+ "id": 3068173055641733
+ },
+ {
+ "id": 3068172409686149
+ },
+ {
+ "id": 3068165922752773
+ },
+ {
+ "id": 3068161263503493
+ },
+ {
+ "id": 3068156522088773
+ },
+ {
+ "id": 3068137884190981
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 5,
+ "records_with_pk": 5,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11804,
+ "records_with_pk": 11804,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068247600548165
+ },
+ {
+ "id": 3068245698775237
+ },
+ {
+ "id": 3068244052953349
+ },
+ {
+ "id": 3068240795322565
+ },
+ {
+ "id": 3068238202161413
+ },
+ {
+ "id": 3068222444570821
+ },
+ {
+ "id": 3068219463567557
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17013,
+ "records_with_pk": 17013,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068229355096261
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8,
+ "records_with_pk": 8,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068193226131717
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8184,
+ "records_with_pk": 8184,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068247606249797
+ },
+ {
+ "id": 3068245704181957
+ },
+ {
+ "id": 3068244055787781
+ },
+ {
+ "id": 3068240798615749
+ },
+ {
+ "id": 3068238205438213
+ },
+ {
+ "id": 3068222448126149
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1034,
+ "records_with_pk": 1034,
+ "missing": 36,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3068245858044101
+ },
+ {
+ "sitegoodsstockid": 3068238403602693
+ },
+ {
+ "sitegoodsstockid": 3068238398638405
+ },
+ {
+ "sitegoodsstockid": 3068230906775685
+ },
+ {
+ "sitegoodsstockid": 3068230907365509
+ },
+ {
+ "sitegoodsstockid": 3068222972643653
+ },
+ {
+ "sitegoodsstockid": 3068212484425861
+ },
+ {
+ "sitegoodsstockid": 3068212393527493
+ },
+ {
+ "sitegoodsstockid": 3068211882658053
+ },
+ {
+ "sitegoodsstockid": 3068185293736197
+ },
+ {
+ "sitegoodsstockid": 3068173817415941
+ },
+ {
+ "sitegoodsstockid": 3068166835570885
+ },
+ {
+ "sitegoodsstockid": 3068165128079621
+ },
+ {
+ "sitegoodsstockid": 3068159660001413
+ },
+ {
+ "sitegoodsstockid": 3068158269720838
+ },
+ {
+ "sitegoodsstockid": 3068158132488389
+ },
+ {
+ "sitegoodsstockid": 3068143580711045
+ },
+ {
+ "sitegoodsstockid": 3068142510311621
+ },
+ {
+ "sitegoodsstockid": 3068142511032517
+ },
+ {
+ "sitegoodsstockid": 3068135950321861
+ },
+ {
+ "sitegoodsstockid": 3068135950846149
+ },
+ {
+ "sitegoodsstockid": 3068135276693829
+ },
+ {
+ "sitegoodsstockid": 3068135277218117
+ },
+ {
+ "sitegoodsstockid": 3068132803037509
+ },
+ {
+ "sitegoodsstockid": 3068126246095109
+ },
+ {
+ "sitegoodsstockid": 3068125658253573
+ },
+ {
+ "sitegoodsstockid": 3068096166971717
+ },
+ {
+ "sitegoodsstockid": 3068096166529349
+ },
+ {
+ "sitegoodsstockid": 3068090895648965
+ },
+ {
+ "sitegoodsstockid": 3068058833127621
+ },
+ {
+ "sitegoodsstockid": 3068045209585989
+ },
+ {
+ "sitegoodsstockid": 3068045210061125
+ },
+ {
+ "sitegoodsstockid": 3068033580435653
+ },
+ {
+ "sitegoodsstockid": 3068033136544069
+ },
+ {
+ "sitegoodsstockid": 3068032978126981
+ },
+ {
+ "sitegoodsstockid": 3068032978634885
+ }
+ ],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 616,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 616,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 100,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T22:05:18.017923+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18415,
+ "diff": -18414
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 514,
+ "diff": -514
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 503,
+ "ods": 514,
+ "diff": -11
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 10412.32,
+ "ods_sum": 10480.32,
+ "diff": -68.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 23440.18,
+ "ods_sum": 24162.18,
+ "diff": -722.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 66552.38,
+ "ods_sum": 67554.66,
+ "diff": -1002.2799999999988
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 1649.19,
+ "ods_sum": 1649.19,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 31050.69,
+ "ods_sum": 31262.97,
+ "diff": -212.28000000000247
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18415,
+ "diff": -29
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 150,
+ "ods": 150,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 45010.31,
+ "ods_sum": 45010.31,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4753,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4753,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 349,
+ "ods": 364,
+ "diff": -15
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 23828.0,
+ "ods_sum": 24982.0,
+ "diff": -1154.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 23104.18,
+ "ods_sum": 24162.18,
+ "diff": -1058.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11445,
+ "diff": -18
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 355,
+ "ods": 375,
+ "diff": -20
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 24424.0,
+ "ods_sum": 25974.0,
+ "diff": -1550.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17012,
+ "diff": -35
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 567,
+ "ods": 578,
+ "diff": -11
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 66836.0,
+ "ods_sum": 67261.0,
+ "diff": -425.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -7.0,
+ "ods_sum": -7.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19080
+ },
+ "generated_at": "2026-01-26T22:05:21.737201+08:00"
+ }
+ ],
+ "total_missing": 174,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T22:05:21.737221+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_history_20260126_225143.json b/etl_billiards/reports/data_integrity_history_20260126_225143.json
new file mode 100644
index 0000000..1c20168
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_history_20260126_225143.json
@@ -0,0 +1,12704 @@
+{
+ "mode": "history",
+ "start": "2025-07-01T00:00:00+08:00",
+ "end": "2026-01-26T20:34:55.893505+08:00",
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-07-01T00:00:00+08:00",
+ "end": "2025-08-01T00:00:00+08:00",
+ "label": "month_2025-07-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-06-30T22:00:00+08:00",
+ "end": "2025-08-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1798,
+ "records_with_pk": 1798,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 11,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9981,
+ "records_with_pk": 9981,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068266646079813
+ },
+ {
+ "id": 3068265469315205
+ },
+ {
+ "id": 3068260367649093
+ },
+ {
+ "id": 3068260212164869
+ },
+ {
+ "id": 3068254185769285
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 355,
+ "records_with_pk": 355,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11811,
+ "records_with_pk": 11811,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068266643687749
+ },
+ {
+ "id": 3068265466955909
+ },
+ {
+ "id": 3068260365519173
+ },
+ {
+ "id": 3068260209543429
+ },
+ {
+ "id": 3068254182918469
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17016,
+ "records_with_pk": 17016,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068261508647045
+ },
+ {
+ "id": 3068254532045125
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2469,
+ "records_with_pk": 2469,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 44,
+ "records_with_pk": 44,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8188,
+ "records_with_pk": 8188,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3068266646669637
+ },
+ {
+ "id": 3068265469970565
+ },
+ {
+ "id": 3068260368353605
+ },
+ {
+ "id": 3068260212705541
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 2578,
+ "records_with_pk": 2578,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 15,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 1867,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 12,
+ "skipped_missing_pk": 1867,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 16,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T22:25:25.984117+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18423,
+ "diff": -18422
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1246,
+ "diff": -1246
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 23,
+ "ods": 23,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 466,
+ "ods": 466,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 751,
+ "ods": 751,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 149,
+ "ods": 149,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 14,
+ "ods": 14,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1246,
+ "ods": 1246,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 18607.65,
+ "ods_sum": 18607.65,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 68759.8,
+ "ods_sum": 68759.8,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 133842.45,
+ "ods_sum": 133842.45,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 10234.83,
+ "ods_sum": 10234.83,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 46883.63,
+ "ods_sum": 46883.63,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18423,
+ "diff": -37
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1575,
+ "ods": 1575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 14.25,
+ "ods_sum": 14.25,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 31186.8,
+ "ods_sum": 31186.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 29160.8,
+ "ods_sum": 29160.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 351,
+ "ods": 351,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1261.59,
+ "ods_sum": 1261.59,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 113232.99,
+ "ods_sum": 113232.99,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5005,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11451,
+ "diff": -24
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1007,
+ "ods": 1007,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 72348.0,
+ "ods_sum": 72348.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17014,
+ "diff": -37
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1833,
+ "ods": 1833,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 178060.0,
+ "ods_sum": 178060.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19805
+ },
+ "generated_at": "2026-01-26T22:25:35.502207+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-08-01T00:00:00+08:00",
+ "end": "2025-09-01T00:00:00+08:00",
+ "label": "month_2025-08-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-07-31T22:00:00+08:00",
+ "end": "2025-09-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4653,
+ "records_with_pk": 4653,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 26,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9981,
+ "records_with_pk": 9981,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068266646079813
+ },
+ {
+ "id": 3068265469315205
+ },
+ {
+ "id": 3068260367649093
+ },
+ {
+ "id": 3068260212164869
+ },
+ {
+ "id": 3068254185769285
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 867,
+ "records_with_pk": 867,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11811,
+ "records_with_pk": 11811,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068266643687749
+ },
+ {
+ "id": 3068265466955909
+ },
+ {
+ "id": 3068260365519173
+ },
+ {
+ "id": 3068260209543429
+ },
+ {
+ "id": 3068254182918469
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17019,
+ "records_with_pk": 17019,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3068269539461381
+ },
+ {
+ "id": 3068268636555397
+ },
+ {
+ "id": 3068261508647045
+ },
+ {
+ "id": 3068254532045125
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2469,
+ "records_with_pk": 2469,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 96,
+ "records_with_pk": 96,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8188,
+ "records_with_pk": 8188,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3068266646669637
+ },
+ {
+ "id": 3068265469970565
+ },
+ {
+ "id": 3068260368353605
+ },
+ {
+ "id": 3068260212705541
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5271,
+ "records_with_pk": 5271,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 28,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4817,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 26,
+ "skipped_missing_pk": 4817,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 18,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T22:28:38.135178+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18423,
+ "diff": -18422
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3587,
+ "diff": -3587
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 18,
+ "ods": 18,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 51,
+ "ods": 51,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3587,
+ "ods": 3587,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 54919.33,
+ "ods_sum": 54919.33,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 186359.95,
+ "ods_sum": 186359.95,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 383097.96,
+ "ods_sum": 383097.96,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 44840.88,
+ "ods_sum": 44840.88,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 145513.13,
+ "ods_sum": 145513.13,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18423,
+ "diff": -37
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4305,
+ "ods": 4305,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 47.45,
+ "ods_sum": 47.45,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 87523.4,
+ "ods_sum": 87523.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 83759.0,
+ "ods_sum": 83759.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 859,
+ "ods": 859,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1874.75,
+ "ods_sum": 1874.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 268501.57,
+ "ods_sum": 268501.57,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5005,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11451,
+ "diff": -24
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2850,
+ "ods": 2850,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 189960.0,
+ "ods_sum": 189960.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17014,
+ "diff": -37
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4763,
+ "ods": 4763,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 381598.0,
+ "ods_sum": 381598.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -22146
+ },
+ "generated_at": "2026-01-26T22:28:47.377846+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-09-01T00:00:00+08:00",
+ "end": "2025-10-01T00:00:00+08:00",
+ "label": "month_2025-09-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-08-31T22:00:00+08:00",
+ "end": "2025-10-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3738,
+ "records_with_pk": 3738,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 21,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9981,
+ "records_with_pk": 9981,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068266646079813
+ },
+ {
+ "id": 3068265469315205
+ },
+ {
+ "id": 3068260367649093
+ },
+ {
+ "id": 3068260212164869
+ },
+ {
+ "id": 3068254185769285
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 655,
+ "records_with_pk": 655,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11811,
+ "records_with_pk": 11811,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068266643687749
+ },
+ {
+ "id": 3068265466955909
+ },
+ {
+ "id": 3068260365519173
+ },
+ {
+ "id": 3068260209543429
+ },
+ {
+ "id": 3068254182918469
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17020,
+ "records_with_pk": 17020,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068271374993733
+ },
+ {
+ "id": 3068269539461381
+ },
+ {
+ "id": 3068268636555397
+ },
+ {
+ "id": 3068261508647045
+ },
+ {
+ "id": 3068254532045125
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2469,
+ "records_with_pk": 2469,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 54,
+ "records_with_pk": 54,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8189,
+ "records_with_pk": 8189,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068274788403397
+ },
+ {
+ "id": 3068266646669637
+ },
+ {
+ "id": 3068265469970565
+ },
+ {
+ "id": 3068260368353605
+ },
+ {
+ "id": 3068260212705541
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 4853,
+ "records_with_pk": 4853,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 27,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 3828,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 3828,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 20,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T22:31:48.060101+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18423,
+ "diff": -18422
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1264,
+ "diff": -1264
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 11,
+ "ods": 11,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1264,
+ "ods": 1264,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 11020.51,
+ "ods_sum": 11020.51,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 73893.75,
+ "ods_sum": 73893.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 137203.92,
+ "ods_sum": 137203.92,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 15685.02,
+ "ods_sum": 15685.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 52340.33,
+ "ods_sum": 52340.33,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18423,
+ "diff": -37
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1449,
+ "ods": 1449,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1.41,
+ "ods_sum": 1.41,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 24706.9,
+ "ods_sum": 24706.9,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 23874.4,
+ "ods_sum": 23874.4,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 654,
+ "ods": 654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 781.44,
+ "ods_sum": 781.44,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 192541.75,
+ "ods_sum": 192541.75,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5005,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1173,
+ "ods": 1173,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 75824.0,
+ "ods_sum": 75824.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 73843.08,
+ "ods_sum": 73843.08,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11451,
+ "diff": -24
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 184722.0,
+ "ods_sum": 184722.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17014,
+ "diff": -37
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1544,
+ "ods": 1544,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 108880.0,
+ "ods_sum": 108880.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -1011.0,
+ "ods_sum": -1011.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19823
+ },
+ "generated_at": "2026-01-26T22:31:57.213589+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-10-01T00:00:00+08:00",
+ "end": "2025-11-01T00:00:00+08:00",
+ "label": "month_2025-10-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-09-30T22:00:00+08:00",
+ "end": "2025-11-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 607,
+ "records_with_pk": 607,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9982,
+ "records_with_pk": 9982,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068274787764421
+ },
+ {
+ "id": 3068266646079813
+ },
+ {
+ "id": 3068265469315205
+ },
+ {
+ "id": 3068260367649093
+ },
+ {
+ "id": 3068260212164869
+ },
+ {
+ "id": 3068254185769285
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 136,
+ "records_with_pk": 136,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4,
+ "records_with_pk": 4,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11812,
+ "records_with_pk": 11812,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068274782423237
+ },
+ {
+ "id": 3068266643687749
+ },
+ {
+ "id": 3068265466955909
+ },
+ {
+ "id": 3068260365519173
+ },
+ {
+ "id": 3068260209543429
+ },
+ {
+ "id": 3068254182918469
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17020,
+ "records_with_pk": 17020,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068274381588741
+ },
+ {
+ "id": 3068271374993733
+ },
+ {
+ "id": 3068269539461381
+ },
+ {
+ "id": 3068268636555397
+ },
+ {
+ "id": 3068261508647045
+ },
+ {
+ "id": 3068254532045125
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2469,
+ "records_with_pk": 2469,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11,
+ "records_with_pk": 11,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8189,
+ "records_with_pk": 8189,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068274788403397
+ },
+ {
+ "id": 3068266646669637
+ },
+ {
+ "id": 3068265469970565
+ },
+ {
+ "id": 3068260368353605
+ },
+ {
+ "id": 3068260212705541
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 997,
+ "records_with_pk": 997,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 619,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 619,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 23,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T22:34:28.080847+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18423,
+ "diff": -18422
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2824,
+ "diff": -2824
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 21,
+ "ods": 21,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2824,
+ "ods": 2824,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 40394.85,
+ "ods_sum": 40394.85,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 310789.49,
+ "ods_sum": 310789.49,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33315.15,
+ "ods_sum": 33315.15,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 116393.37,
+ "ods_sum": 116393.37,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18423,
+ "diff": -37
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3475,
+ "ods": 3475,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1319.49,
+ "ods_sum": 1319.49,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 66216.8,
+ "ods_sum": 66216.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 64234.0,
+ "ods_sum": 64234.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 573,
+ "ods": 573,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 2143.56,
+ "ods_sum": 2143.56,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 172536.78,
+ "ods_sum": 172536.78,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5005,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2490,
+ "ods": 2490,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160988.0,
+ "ods_sum": 160988.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11451,
+ "diff": -24
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2489,
+ "ods": 2489,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160076.0,
+ "ods_sum": 160076.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17014,
+ "diff": -37
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3616,
+ "ods": 3616,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 286088.0,
+ "ods_sum": 286088.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -47020.0,
+ "ods_sum": -47020.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -21383
+ },
+ "generated_at": "2026-01-26T22:34:37.417709+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-11-01T00:00:00+08:00",
+ "end": "2025-12-01T00:00:00+08:00",
+ "label": "month_2025-11-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-10-31T22:00:00+08:00",
+ "end": "2025-12-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3927,
+ "records_with_pk": 3927,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9982,
+ "records_with_pk": 9982,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068274787764421
+ },
+ {
+ "id": 3068266646079813
+ },
+ {
+ "id": 3068265469315205
+ },
+ {
+ "id": 3068260367649093
+ },
+ {
+ "id": 3068260212164869
+ },
+ {
+ "id": 3068254185769285
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 890,
+ "records_with_pk": 890,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 12,
+ "records_with_pk": 12,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11812,
+ "records_with_pk": 11812,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068274782423237
+ },
+ {
+ "id": 3068266643687749
+ },
+ {
+ "id": 3068265466955909
+ },
+ {
+ "id": 3068260365519173
+ },
+ {
+ "id": 3068260209543429
+ },
+ {
+ "id": 3068254182918469
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17020,
+ "records_with_pk": 17020,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068274381588741
+ },
+ {
+ "id": 3068271374993733
+ },
+ {
+ "id": 3068269539461381
+ },
+ {
+ "id": 3068268636555397
+ },
+ {
+ "id": 3068261508647045
+ },
+ {
+ "id": 3068254532045125
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2469,
+ "records_with_pk": 2469,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 80,
+ "records_with_pk": 80,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8189,
+ "records_with_pk": 8189,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068274788403397
+ },
+ {
+ "id": 3068266646669637
+ },
+ {
+ "id": 3068265469970565
+ },
+ {
+ "id": 3068260368353605
+ },
+ {
+ "id": 3068260212705541
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5561,
+ "records_with_pk": 5561,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 30,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4052,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 4052,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 23,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T22:37:41.485975+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18423,
+ "diff": -18422
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3336,
+ "diff": -3336
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 12,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 40,
+ "ods": 40,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 80,
+ "ods": 80,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3336,
+ "ods": 3336,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71642.8,
+ "ods_sum": 71642.8,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 394705.62,
+ "ods_sum": 394705.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33307.25,
+ "ods_sum": 33307.25,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 156623.79,
+ "ods_sum": 156623.79,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18423,
+ "diff": -37
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4134,
+ "ods": 4134,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1544.05,
+ "ods_sum": 1544.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 98139.8,
+ "ods_sum": 98139.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 87610.8,
+ "ods_sum": 87610.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 884,
+ "ods": 884,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1437.75,
+ "ods_sum": 1437.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 281102.62,
+ "ods_sum": 281102.62,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5005,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2838,
+ "ods": 2838,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 172860.0,
+ "ods_sum": 172860.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11451,
+ "diff": -24
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2843,
+ "ods": 2843,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 173800.0,
+ "ods_sum": 173800.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17014,
+ "diff": -37
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3999,
+ "ods": 3999,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 457185.0,
+ "ods_sum": 457185.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 17,
+ "ods": 17,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -16567.0,
+ "ods_sum": -16567.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -21895
+ },
+ "generated_at": "2026-01-26T22:37:50.690900+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-12-01T00:00:00+08:00",
+ "end": "2026-01-01T00:00:00+08:00",
+ "label": "month_2025-12-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-11-30T22:00:00+08:00",
+ "end": "2026-01-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4044,
+ "records_with_pk": 4044,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 23,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9982,
+ "records_with_pk": 9982,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068274787764421
+ },
+ {
+ "id": 3068266646079813
+ },
+ {
+ "id": 3068265469315205
+ },
+ {
+ "id": 3068260367649093
+ },
+ {
+ "id": 3068260212164869
+ },
+ {
+ "id": 3068254185769285
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 984,
+ "records_with_pk": 984,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 35,
+ "records_with_pk": 35,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11812,
+ "records_with_pk": 11812,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068274782423237
+ },
+ {
+ "id": 3068266643687749
+ },
+ {
+ "id": 3068265466955909
+ },
+ {
+ "id": 3068260365519173
+ },
+ {
+ "id": 3068260209543429
+ },
+ {
+ "id": 3068254182918469
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17020,
+ "records_with_pk": 17020,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068274381588741
+ },
+ {
+ "id": 3068271374993733
+ },
+ {
+ "id": 3068269539461381
+ },
+ {
+ "id": 3068268636555397
+ },
+ {
+ "id": 3068261508647045
+ },
+ {
+ "id": 3068254532045125
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2469,
+ "records_with_pk": 2469,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 70,
+ "records_with_pk": 70,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8189,
+ "records_with_pk": 8189,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068274788403397
+ },
+ {
+ "id": 3068266646669637
+ },
+ {
+ "id": 3068265469970565
+ },
+ {
+ "id": 3068260368353605
+ },
+ {
+ "id": 3068260212705541
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5490,
+ "records_with_pk": 5490,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 30,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4151,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 23,
+ "skipped_missing_pk": 4151,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 23,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T22:40:56.369171+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18423,
+ "diff": -18422
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3479,
+ "diff": -3479
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 12,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3479,
+ "ods": 3479,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71445.57,
+ "ods_sum": 71445.57,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 432220.76,
+ "ods_sum": 432220.76,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 34544.63,
+ "ods_sum": 34544.63,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 189974.44,
+ "ods_sum": 189974.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18423,
+ "diff": -37
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2625,
+ "ods": 2625,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 190.1,
+ "ods_sum": 190.1,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 65814.4,
+ "ods_sum": 65814.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 63275.9,
+ "ods_sum": 63275.9,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 975,
+ "ods": 975,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 3190.05,
+ "ods_sum": 3190.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 322183.69,
+ "ods_sum": 322183.69,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5005,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2816,
+ "ods": 2816,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 179652.0,
+ "ods_sum": 179652.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11451,
+ "diff": -24
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2827,
+ "ods": 2827,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 180232.0,
+ "ods_sum": 180232.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17014,
+ "diff": -37
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4118,
+ "ods": 4118,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 472999.0,
+ "ods_sum": 472999.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -4314.0,
+ "ods_sum": -4314.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -22038
+ },
+ "generated_at": "2026-01-26T22:41:05.591623+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-01T00:00:00+08:00",
+ "end": "2026-01-08T00:00:00+08:00",
+ "label": "week_2026-01-01",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-12-31T22:00:00+08:00",
+ "end": "2026-01-08T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 138,
+ "records_with_pk": 138,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 827,
+ "records_with_pk": 827,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9982,
+ "records_with_pk": 9982,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068274787764421
+ },
+ {
+ "id": 3068266646079813
+ },
+ {
+ "id": 3068265469315205
+ },
+ {
+ "id": 3068260367649093
+ },
+ {
+ "id": 3068260212164869
+ },
+ {
+ "id": 3068254185769285
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 167,
+ "records_with_pk": 167,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10,
+ "records_with_pk": 10,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11812,
+ "records_with_pk": 11812,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068274782423237
+ },
+ {
+ "id": 3068266643687749
+ },
+ {
+ "id": 3068265466955909
+ },
+ {
+ "id": 3068260365519173
+ },
+ {
+ "id": 3068260209543429
+ },
+ {
+ "id": 3068254182918469
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17021,
+ "records_with_pk": 17021,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068283901102341
+ },
+ {
+ "id": 3068274381588741
+ },
+ {
+ "id": 3068271374993733
+ },
+ {
+ "id": 3068269539461381
+ },
+ {
+ "id": 3068268636555397
+ },
+ {
+ "id": 3068261508647045
+ },
+ {
+ "id": 3068254532045125
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2469,
+ "records_with_pk": 2469,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8190,
+ "records_with_pk": 8190,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068286601333061
+ },
+ {
+ "id": 3068274788403397
+ },
+ {
+ "id": 3068266646669637
+ },
+ {
+ "id": 3068265469970565
+ },
+ {
+ "id": 3068260368353605
+ },
+ {
+ "id": 3068260212705541
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 880,
+ "records_with_pk": 880,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 851,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 851,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 25,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T22:43:39.052543+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18423,
+ "diff": -18422
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 699,
+ "diff": -699
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 699,
+ "ods": 699,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 8896.03,
+ "ods_sum": 8896.03,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 74693.62,
+ "ods_sum": 74693.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6587.39,
+ "ods_sum": 6587.39,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30138.48,
+ "ods_sum": 30138.48,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18423,
+ "diff": -37
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 157,
+ "ods": 157,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 46522.68,
+ "ods_sum": 46522.68,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5005,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 569,
+ "ods": 569,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37392.0,
+ "ods_sum": 37392.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11451,
+ "diff": -24
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 566,
+ "ods": 566,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37228.0,
+ "ods_sum": 37228.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17014,
+ "diff": -37
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 823,
+ "ods": 823,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 78730.0,
+ "ods_sum": 78730.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -7.0,
+ "ods_sum": -7.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19258
+ },
+ "generated_at": "2026-01-26T22:43:48.261023+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-08T00:00:00+08:00",
+ "end": "2026-01-15T00:00:00+08:00",
+ "label": "week_2026-01-08",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-07T22:00:00+08:00",
+ "end": "2026-01-15T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 790,
+ "records_with_pk": 790,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9984,
+ "records_with_pk": 9984,
+ "missing": 8,
+ "missing_samples": [
+ {
+ "id": 3068287557994693
+ },
+ {
+ "id": 3068286600710469
+ },
+ {
+ "id": 3068274787764421
+ },
+ {
+ "id": 3068266646079813
+ },
+ {
+ "id": 3068265469315205
+ },
+ {
+ "id": 3068260367649093
+ },
+ {
+ "id": 3068260212164869
+ },
+ {
+ "id": 3068254185769285
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 195,
+ "records_with_pk": 195,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 22,
+ "records_with_pk": 22,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11815,
+ "records_with_pk": 11815,
+ "missing": 9,
+ "missing_samples": [
+ {
+ "id": 3068287555635397
+ },
+ {
+ "id": 3068287473535237
+ },
+ {
+ "id": 3068286598154565
+ },
+ {
+ "id": 3068274782423237
+ },
+ {
+ "id": 3068266643687749
+ },
+ {
+ "id": 3068265466955909
+ },
+ {
+ "id": 3068260365519173
+ },
+ {
+ "id": 3068260209543429
+ },
+ {
+ "id": 3068254182918469
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17021,
+ "records_with_pk": 17021,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068283901102341
+ },
+ {
+ "id": 3068274381588741
+ },
+ {
+ "id": 3068271374993733
+ },
+ {
+ "id": 3068269539461381
+ },
+ {
+ "id": 3068268636555397
+ },
+ {
+ "id": 3068261508647045
+ },
+ {
+ "id": 3068254532045125
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2469,
+ "records_with_pk": 2469,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 15,
+ "records_with_pk": 15,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8192,
+ "records_with_pk": 8192,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068287558666437
+ },
+ {
+ "id": 3068286601333061
+ },
+ {
+ "id": 3068274788403397
+ },
+ {
+ "id": 3068266646669637
+ },
+ {
+ "id": 3068265469970565
+ },
+ {
+ "id": 3068260368353605
+ },
+ {
+ "id": 3068260212705541
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1241,
+ "records_with_pk": 1241,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 814,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 814,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 31,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T22:46:19.589435+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18423,
+ "diff": -18422
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 672,
+ "diff": -672
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 672,
+ "ods": 672,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 16159.12,
+ "ods_sum": 16159.12,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 82416.19,
+ "ods_sum": 82416.19,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6098.02,
+ "ods_sum": 6098.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30731.98,
+ "ods_sum": 30731.98,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18423,
+ "diff": -37
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 188,
+ "ods": 188,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 190.72,
+ "ods_sum": 190.72,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 54584.19,
+ "ods_sum": 54584.19,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5005,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 572,
+ "ods": 572,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37214.0,
+ "ods_sum": 37214.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11451,
+ "diff": -24
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 575,
+ "ods": 575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37262.0,
+ "ods_sum": 37262.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17014,
+ "diff": -37
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 790,
+ "ods": 790,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 86381.0,
+ "ods_sum": 86381.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -39.0,
+ "ods_sum": -39.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19231
+ },
+ "generated_at": "2026-01-26T22:46:28.856495+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-15T00:00:00+08:00",
+ "end": "2026-01-22T00:00:00+08:00",
+ "label": "week_2026-01-15",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-14T22:00:00+08:00",
+ "end": "2026-01-22T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 899,
+ "records_with_pk": 899,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9987,
+ "records_with_pk": 9987,
+ "missing": 11,
+ "missing_samples": [
+ {
+ "id": 3068290500462853
+ },
+ {
+ "id": 3068290141849733
+ },
+ {
+ "id": 3068290064632005
+ },
+ {
+ "id": 3068287557994693
+ },
+ {
+ "id": 3068286600710469
+ },
+ {
+ "id": 3068274787764421
+ },
+ {
+ "id": 3068266646079813
+ },
+ {
+ "id": 3068265469315205
+ },
+ {
+ "id": 3068260367649093
+ },
+ {
+ "id": 3068260212164869
+ },
+ {
+ "id": 3068254185769285
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 216,
+ "records_with_pk": 216,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 6,
+ "records_with_pk": 6,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11818,
+ "records_with_pk": 11818,
+ "missing": 12,
+ "missing_samples": [
+ {
+ "id": 3068290498054405
+ },
+ {
+ "id": 3068290139605125
+ },
+ {
+ "id": 3068290062371013
+ },
+ {
+ "id": 3068287555635397
+ },
+ {
+ "id": 3068287473535237
+ },
+ {
+ "id": 3068286598154565
+ },
+ {
+ "id": 3068274782423237
+ },
+ {
+ "id": 3068266643687749
+ },
+ {
+ "id": 3068265466955909
+ },
+ {
+ "id": 3068260365519173
+ },
+ {
+ "id": 3068260209543429
+ },
+ {
+ "id": 3068254182918469
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17021,
+ "records_with_pk": 17021,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3068283901102341
+ },
+ {
+ "id": 3068274381588741
+ },
+ {
+ "id": 3068271374993733
+ },
+ {
+ "id": 3068269539461381
+ },
+ {
+ "id": 3068268636555397
+ },
+ {
+ "id": 3068261508647045
+ },
+ {
+ "id": 3068254532045125
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2469,
+ "records_with_pk": 2469,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 21,
+ "records_with_pk": 21,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8194,
+ "records_with_pk": 8194,
+ "missing": 10,
+ "missing_samples": [
+ {
+ "id": 3068290501101829
+ },
+ {
+ "id": 3068290142537861
+ },
+ {
+ "id": 3068290065369285
+ },
+ {
+ "id": 3068287558666437
+ },
+ {
+ "id": 3068286601333061
+ },
+ {
+ "id": 3068274788403397
+ },
+ {
+ "id": 3068266646669637
+ },
+ {
+ "id": 3068265469970565
+ },
+ {
+ "id": 3068260368353605
+ },
+ {
+ "id": 3068260212705541
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1181,
+ "records_with_pk": 1181,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 932,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 932,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 40,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T22:48:56.922377+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18423,
+ "diff": -18422
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 776,
+ "diff": -776
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 776,
+ "ods": 776,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 16959.34,
+ "ods_sum": 16959.34,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 38520.64,
+ "ods_sum": 38520.64,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 93110.51,
+ "ods_sum": 93110.51,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 5009.13,
+ "ods_sum": 5009.13,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 40591.34,
+ "ods_sum": 40591.34,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18423,
+ "diff": -37
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 212,
+ "ods": 212,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 191.21,
+ "ods_sum": 191.21,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 70610.77,
+ "ods_sum": 70610.77,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5005,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 613,
+ "ods": 613,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 40100.0,
+ "ods_sum": 40100.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 38520.64,
+ "ods_sum": 38520.64,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11451,
+ "diff": -24
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 616,
+ "ods": 616,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 40456.0,
+ "ods_sum": 40456.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17014,
+ "diff": -37
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 896,
+ "ods": 896,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 123718.0,
+ "ods_sum": 123718.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -34.0,
+ "ods_sum": -34.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19335
+ },
+ "generated_at": "2026-01-26T22:49:06.110845+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-22T00:00:00+08:00",
+ "end": "2026-01-26T20:34:55.893505+08:00",
+ "label": "week_2026-01-22",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-21T22:00:00+08:00",
+ "end": "2026-01-26T22:34:55.893505+08:00",
+ "cutoff": null,
+ "window_days": 4,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 610,
+ "records_with_pk": 610,
+ "missing": 30,
+ "missing_samples": [
+ {
+ "id": 3068274759174405
+ },
+ {
+ "id": 3068266628860165
+ },
+ {
+ "id": 3068265453193477
+ },
+ {
+ "id": 3068260351953093
+ },
+ {
+ "id": 3068260196206917
+ },
+ {
+ "id": 3068253977921861
+ },
+ {
+ "id": 3068250782402757
+ },
+ {
+ "id": 3068248546969925
+ },
+ {
+ "id": 3068247587326149
+ },
+ {
+ "id": 3068245677574277
+ },
+ {
+ "id": 3068244005472389
+ },
+ {
+ "id": 3068240723380549
+ },
+ {
+ "id": 3068238181681285
+ },
+ {
+ "id": 3068222416193797
+ },
+ {
+ "id": 3068219408025861
+ },
+ {
+ "id": 3068210285201669
+ },
+ {
+ "id": 3068205015746821
+ },
+ {
+ "id": 3068204058937477
+ },
+ {
+ "id": 3068195036170501
+ },
+ {
+ "id": 3068191206459653
+ },
+ {
+ "id": 3068189824059589
+ },
+ {
+ "id": 3068187415611653
+ },
+ {
+ "id": 3068178355669125
+ },
+ {
+ "id": 3068178301192325
+ },
+ {
+ "id": 3068176777808133
+ },
+ {
+ "id": 3068173758433541
+ },
+ {
+ "id": 3068172788353285
+ },
+ {
+ "id": 3068172286822597
+ },
+ {
+ "id": 3068165730896197
+ },
+ {
+ "id": 3068161172441285
+ }
+ ],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9987,
+ "records_with_pk": 9987,
+ "missing": 11,
+ "missing_samples": [
+ {
+ "id": 3068290500462853
+ },
+ {
+ "id": 3068290141849733
+ },
+ {
+ "id": 3068290064632005
+ },
+ {
+ "id": 3068287557994693
+ },
+ {
+ "id": 3068286600710469
+ },
+ {
+ "id": 3068274787764421
+ },
+ {
+ "id": 3068266646079813
+ },
+ {
+ "id": 3068265469315205
+ },
+ {
+ "id": 3068260367649093
+ },
+ {
+ "id": 3068260212164869
+ },
+ {
+ "id": 3068254185769285
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 164,
+ "records_with_pk": 164,
+ "missing": 8,
+ "missing_samples": [
+ {
+ "id": 3068248572709125
+ },
+ {
+ "id": 3068195099363589
+ },
+ {
+ "id": 3068173056575621
+ },
+ {
+ "id": 3068173056116869
+ },
+ {
+ "id": 3068173055641733
+ },
+ {
+ "id": 3068172409686149
+ },
+ {
+ "id": 3068165922752773
+ },
+ {
+ "id": 3068161263503493
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 5,
+ "records_with_pk": 5,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11818,
+ "records_with_pk": 11818,
+ "missing": 12,
+ "missing_samples": [
+ {
+ "id": 3068290498054405
+ },
+ {
+ "id": 3068290139605125
+ },
+ {
+ "id": 3068290062371013
+ },
+ {
+ "id": 3068287555635397
+ },
+ {
+ "id": 3068287473535237
+ },
+ {
+ "id": 3068286598154565
+ },
+ {
+ "id": 3068274782423237
+ },
+ {
+ "id": 3068266643687749
+ },
+ {
+ "id": 3068265466955909
+ },
+ {
+ "id": 3068260365519173
+ },
+ {
+ "id": 3068260209543429
+ },
+ {
+ "id": 3068254182918469
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17022,
+ "records_with_pk": 17022,
+ "missing": 8,
+ "missing_samples": [
+ {
+ "id": 3068292445669573
+ },
+ {
+ "id": 3068283901102341
+ },
+ {
+ "id": 3068274381588741
+ },
+ {
+ "id": 3068271374993733
+ },
+ {
+ "id": 3068269539461381
+ },
+ {
+ "id": 3068268636555397
+ },
+ {
+ "id": 3068261508647045
+ },
+ {
+ "id": 3068254532045125
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2469,
+ "records_with_pk": 2469,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8,
+ "records_with_pk": 8,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068193226131717
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8194,
+ "records_with_pk": 8194,
+ "missing": 10,
+ "missing_samples": [
+ {
+ "id": 3068290501101829
+ },
+ {
+ "id": 3068290142537861
+ },
+ {
+ "id": 3068290065369285
+ },
+ {
+ "id": 3068287558666437
+ },
+ {
+ "id": 3068286601333061
+ },
+ {
+ "id": 3068274788403397
+ },
+ {
+ "id": 3068266646669637
+ },
+ {
+ "id": 3068265469970565
+ },
+ {
+ "id": 3068260368353605
+ },
+ {
+ "id": 3068260212705541
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1042,
+ "records_with_pk": 1042,
+ "missing": 21,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3068274887936325
+ },
+ {
+ "sitegoodsstockid": 3068274743986437
+ },
+ {
+ "sitegoodsstockid": 3068266527918213
+ },
+ {
+ "sitegoodsstockid": 3068264303184005
+ },
+ {
+ "sitegoodsstockid": 3068264302692485
+ },
+ {
+ "sitegoodsstockid": 3068260102326469
+ },
+ {
+ "sitegoodsstockid": 3068260102817989
+ },
+ {
+ "sitegoodsstockid": 3068251627522245
+ },
+ {
+ "sitegoodsstockid": 3068245858044101
+ },
+ {
+ "sitegoodsstockid": 3068238403602693
+ },
+ {
+ "sitegoodsstockid": 3068238398638405
+ },
+ {
+ "sitegoodsstockid": 3068230906775685
+ },
+ {
+ "sitegoodsstockid": 3068230907365509
+ },
+ {
+ "sitegoodsstockid": 3068222972643653
+ },
+ {
+ "sitegoodsstockid": 3068212484425861
+ },
+ {
+ "sitegoodsstockid": 3068212393527493
+ },
+ {
+ "sitegoodsstockid": 3068211882658053
+ },
+ {
+ "sitegoodsstockid": 3068185293736197
+ },
+ {
+ "sitegoodsstockid": 3068173817415941
+ },
+ {
+ "sitegoodsstockid": 3068166835570885
+ },
+ {
+ "sitegoodsstockid": 3068165128079621
+ }
+ ],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 623,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 623,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 101,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T22:51:34.507237+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18423,
+ "diff": -18422
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 514,
+ "diff": -514
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 503,
+ "ods": 514,
+ "diff": -11
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 10412.32,
+ "ods_sum": 10480.32,
+ "diff": -68.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 23440.18,
+ "ods_sum": 24162.18,
+ "diff": -722.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 66552.38,
+ "ods_sum": 67554.66,
+ "diff": -1002.2799999999988
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 1649.19,
+ "ods_sum": 1649.19,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 31050.69,
+ "ods_sum": 31262.97,
+ "diff": -212.28000000000247
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18423,
+ "diff": -37
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 150,
+ "ods": 152,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 45010.31,
+ "ods_sum": 45965.85,
+ "diff": -955.5400000000009
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5005,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 349,
+ "ods": 364,
+ "diff": -15
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 23828.0,
+ "ods_sum": 24982.0,
+ "diff": -1154.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 23104.18,
+ "ods_sum": 24162.18,
+ "diff": -1058.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11451,
+ "diff": -24
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 355,
+ "ods": 375,
+ "diff": -20
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 24424.0,
+ "ods_sum": 25974.0,
+ "diff": -1550.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17014,
+ "diff": -37
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 567,
+ "ods": 578,
+ "diff": -11
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 66836.0,
+ "ods_sum": 67261.0,
+ "diff": -425.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -7.0,
+ "ods_sum": -7.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19132
+ },
+ "generated_at": "2026-01-26T22:51:43.867285+08:00"
+ }
+ ],
+ "total_missing": 320,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T22:51:43.867306+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_history_20260126_234946.json b/etl_billiards/reports/data_integrity_history_20260126_234946.json
new file mode 100644
index 0000000..a748045
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_history_20260126_234946.json
@@ -0,0 +1,12989 @@
+{
+ "mode": "history",
+ "start": "2025-07-01T00:00:00+08:00",
+ "end": "2026-01-26T20:34:55.893505+08:00",
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-07-01T00:00:00+08:00",
+ "end": "2025-08-01T00:00:00+08:00",
+ "label": "month_2025-07-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-06-30T22:00:00+08:00",
+ "end": "2025-08-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1798,
+ "records_with_pk": 1798,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 11,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9992,
+ "records_with_pk": 9992,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068325674469573
+ },
+ {
+ "id": 3068325570955525
+ },
+ {
+ "id": 3068320107727109
+ },
+ {
+ "id": 3068303249115461
+ },
+ {
+ "id": 3068302178781381
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 355,
+ "records_with_pk": 355,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11823,
+ "records_with_pk": 11823,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068325671520453
+ },
+ {
+ "id": 3068325568678149
+ },
+ {
+ "id": 3068320105253125
+ },
+ {
+ "id": 3068303246281029
+ },
+ {
+ "id": 3068302176618693
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17026,
+ "records_with_pk": 17026,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3068319991449861
+ },
+ {
+ "id": 3068303788198214
+ },
+ {
+ "id": 3068303788198213
+ },
+ {
+ "id": 3068303397751109
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2469,
+ "records_with_pk": 2469,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 44,
+ "records_with_pk": 44,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8202,
+ "records_with_pk": 8202,
+ "missing": 8,
+ "missing_samples": [
+ {
+ "id": 3068327642089605
+ },
+ {
+ "id": 3068325675239621
+ },
+ {
+ "id": 3068325675256005
+ },
+ {
+ "id": 3068325675256006
+ },
+ {
+ "id": 3068325571528965
+ },
+ {
+ "id": 3068320108431621
+ },
+ {
+ "id": 3068320108431622
+ },
+ {
+ "id": 3068302179305669
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 2578,
+ "records_with_pk": 2578,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 15,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 1867,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 12,
+ "skipped_missing_pk": 1867,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 22,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T23:25:23.126672+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18434,
+ "diff": -18433
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1246,
+ "diff": -1246
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 23,
+ "ods": 23,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 466,
+ "ods": 466,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 751,
+ "ods": 751,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 149,
+ "ods": 149,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 14,
+ "ods": 14,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1246,
+ "ods": 1246,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 18607.65,
+ "ods_sum": 18607.65,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 68759.8,
+ "ods_sum": 68759.8,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 133842.45,
+ "ods_sum": 133842.45,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 10234.83,
+ "ods_sum": 10234.83,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 46883.63,
+ "ods_sum": 46883.63,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18434,
+ "diff": -48
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1575,
+ "ods": 1575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 14.25,
+ "ods_sum": 14.25,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 31186.8,
+ "ods_sum": 31186.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 29160.8,
+ "ods_sum": 29160.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 351,
+ "ods": 351,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1261.59,
+ "ods_sum": 1261.59,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 113232.99,
+ "ods_sum": 113232.99,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5005,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11461,
+ "diff": -34
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1007,
+ "ods": 1007,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 72348.0,
+ "ods_sum": 72348.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17022,
+ "diff": -45
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1833,
+ "ods": 1833,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 178060.0,
+ "ods_sum": 178060.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19845
+ },
+ "generated_at": "2026-01-26T23:25:28.275880+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-08-01T00:00:00+08:00",
+ "end": "2025-09-01T00:00:00+08:00",
+ "label": "month_2025-08-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-07-31T22:00:00+08:00",
+ "end": "2025-09-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4653,
+ "records_with_pk": 4653,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 26,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9993,
+ "records_with_pk": 9993,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068327641483397
+ },
+ {
+ "id": 3068325674469573
+ },
+ {
+ "id": 3068325570955525
+ },
+ {
+ "id": 3068320107727109
+ },
+ {
+ "id": 3068303249115461
+ },
+ {
+ "id": 3068302178781381
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 867,
+ "records_with_pk": 867,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11824,
+ "records_with_pk": 11824,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068327639173253
+ },
+ {
+ "id": 3068325671520453
+ },
+ {
+ "id": 3068325568678149
+ },
+ {
+ "id": 3068320105253125
+ },
+ {
+ "id": 3068303246281029
+ },
+ {
+ "id": 3068302176618693
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17027,
+ "records_with_pk": 17027,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068327551846725
+ },
+ {
+ "id": 3068319991449861
+ },
+ {
+ "id": 3068303788198214
+ },
+ {
+ "id": 3068303788198213
+ },
+ {
+ "id": 3068303397751109
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2469,
+ "records_with_pk": 2469,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 96,
+ "records_with_pk": 96,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8202,
+ "records_with_pk": 8202,
+ "missing": 8,
+ "missing_samples": [
+ {
+ "id": 3068327642089605
+ },
+ {
+ "id": 3068325675239621
+ },
+ {
+ "id": 3068325675256005
+ },
+ {
+ "id": 3068325675256006
+ },
+ {
+ "id": 3068325571528965
+ },
+ {
+ "id": 3068320108431621
+ },
+ {
+ "id": 3068320108431622
+ },
+ {
+ "id": 3068302179305669
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5271,
+ "records_with_pk": 5271,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 28,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4817,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 26,
+ "skipped_missing_pk": 4817,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 25,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T23:28:29.582357+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18434,
+ "diff": -18433
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3587,
+ "diff": -3587
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 18,
+ "ods": 18,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 51,
+ "ods": 51,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3587,
+ "ods": 3587,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 54919.33,
+ "ods_sum": 54919.33,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 186359.95,
+ "ods_sum": 186359.95,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 383097.96,
+ "ods_sum": 383097.96,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 44840.88,
+ "ods_sum": 44840.88,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 145513.13,
+ "ods_sum": 145513.13,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18434,
+ "diff": -48
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4305,
+ "ods": 4305,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 47.45,
+ "ods_sum": 47.45,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 87523.4,
+ "ods_sum": 87523.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 83759.0,
+ "ods_sum": 83759.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 859,
+ "ods": 859,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1874.75,
+ "ods_sum": 1874.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 268501.57,
+ "ods_sum": 268501.57,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5005,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11461,
+ "diff": -34
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2850,
+ "ods": 2850,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 189960.0,
+ "ods_sum": 189960.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17022,
+ "diff": -45
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4763,
+ "ods": 4763,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 381598.0,
+ "ods_sum": 381598.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -22186
+ },
+ "generated_at": "2026-01-26T23:28:35.555328+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-09-01T00:00:00+08:00",
+ "end": "2025-10-01T00:00:00+08:00",
+ "label": "month_2025-09-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-08-31T22:00:00+08:00",
+ "end": "2025-10-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3738,
+ "records_with_pk": 3738,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 21,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9996,
+ "records_with_pk": 9996,
+ "missing": 9,
+ "missing_samples": [
+ {
+ "id": 3068331886758085
+ },
+ {
+ "id": 3068331829921989
+ },
+ {
+ "id": 3068331775887493
+ },
+ {
+ "id": 3068327641483397
+ },
+ {
+ "id": 3068325674469573
+ },
+ {
+ "id": 3068325570955525
+ },
+ {
+ "id": 3068320107727109
+ },
+ {
+ "id": 3068303249115461
+ },
+ {
+ "id": 3068302178781381
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 655,
+ "records_with_pk": 655,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11827,
+ "records_with_pk": 11827,
+ "missing": 9,
+ "missing_samples": [
+ {
+ "id": 3068331884513477
+ },
+ {
+ "id": 3068331827660997
+ },
+ {
+ "id": 3068331773233285
+ },
+ {
+ "id": 3068327639173253
+ },
+ {
+ "id": 3068325671520453
+ },
+ {
+ "id": 3068325568678149
+ },
+ {
+ "id": 3068320105253125
+ },
+ {
+ "id": 3068303246281029
+ },
+ {
+ "id": 3068302176618693
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17027,
+ "records_with_pk": 17027,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068327551846725
+ },
+ {
+ "id": 3068319991449861
+ },
+ {
+ "id": 3068303788198214
+ },
+ {
+ "id": 3068303788198213
+ },
+ {
+ "id": 3068303397751109
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2469,
+ "records_with_pk": 2469,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 54,
+ "records_with_pk": 54,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8205,
+ "records_with_pk": 8205,
+ "missing": 11,
+ "missing_samples": [
+ {
+ "id": 3068331887364293
+ },
+ {
+ "id": 3068331830560965
+ },
+ {
+ "id": 3068331776444549
+ },
+ {
+ "id": 3068327642089605
+ },
+ {
+ "id": 3068325675239621
+ },
+ {
+ "id": 3068325675256005
+ },
+ {
+ "id": 3068325675256006
+ },
+ {
+ "id": 3068325571528965
+ },
+ {
+ "id": 3068320108431621
+ },
+ {
+ "id": 3068320108431622
+ },
+ {
+ "id": 3068302179305669
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 4853,
+ "records_with_pk": 4853,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 27,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 3828,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 3828,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 34,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T23:31:28.553534+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18434,
+ "diff": -18433
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1264,
+ "diff": -1264
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 11,
+ "ods": 11,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1264,
+ "ods": 1264,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 11020.51,
+ "ods_sum": 11020.51,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 73893.75,
+ "ods_sum": 73893.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 137203.92,
+ "ods_sum": 137203.92,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 15685.02,
+ "ods_sum": 15685.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 52340.33,
+ "ods_sum": 52340.33,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18434,
+ "diff": -48
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1449,
+ "ods": 1449,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1.41,
+ "ods_sum": 1.41,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 24706.9,
+ "ods_sum": 24706.9,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 23874.4,
+ "ods_sum": 23874.4,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 654,
+ "ods": 654,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 781.44,
+ "ods_sum": 781.44,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 192541.75,
+ "ods_sum": 192541.75,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5005,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1173,
+ "ods": 1173,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 75824.0,
+ "ods_sum": 75824.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 73843.08,
+ "ods_sum": 73843.08,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11461,
+ "diff": -34
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2849,
+ "ods": 2849,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 184722.0,
+ "ods_sum": 184722.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17022,
+ "diff": -45
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1544,
+ "ods": 1544,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 108880.0,
+ "ods_sum": 108880.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -1011.0,
+ "ods_sum": -1011.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19863
+ },
+ "generated_at": "2026-01-26T23:31:35.401181+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-10-01T00:00:00+08:00",
+ "end": "2025-11-01T00:00:00+08:00",
+ "label": "month_2025-10-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-09-30T22:00:00+08:00",
+ "end": "2025-11-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 607,
+ "records_with_pk": 607,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9996,
+ "records_with_pk": 9996,
+ "missing": 9,
+ "missing_samples": [
+ {
+ "id": 3068331886758085
+ },
+ {
+ "id": 3068331829921989
+ },
+ {
+ "id": 3068331775887493
+ },
+ {
+ "id": 3068327641483397
+ },
+ {
+ "id": 3068325674469573
+ },
+ {
+ "id": 3068325570955525
+ },
+ {
+ "id": 3068320107727109
+ },
+ {
+ "id": 3068303249115461
+ },
+ {
+ "id": 3068302178781381
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 136,
+ "records_with_pk": 136,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4,
+ "records_with_pk": 4,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11827,
+ "records_with_pk": 11827,
+ "missing": 9,
+ "missing_samples": [
+ {
+ "id": 3068331884513477
+ },
+ {
+ "id": 3068331827660997
+ },
+ {
+ "id": 3068331773233285
+ },
+ {
+ "id": 3068327639173253
+ },
+ {
+ "id": 3068325671520453
+ },
+ {
+ "id": 3068325568678149
+ },
+ {
+ "id": 3068320105253125
+ },
+ {
+ "id": 3068303246281029
+ },
+ {
+ "id": 3068302176618693
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17027,
+ "records_with_pk": 17027,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068327551846725
+ },
+ {
+ "id": 3068319991449861
+ },
+ {
+ "id": 3068303788198214
+ },
+ {
+ "id": 3068303788198213
+ },
+ {
+ "id": 3068303397751109
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2469,
+ "records_with_pk": 2469,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11,
+ "records_with_pk": 11,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8205,
+ "records_with_pk": 8205,
+ "missing": 11,
+ "missing_samples": [
+ {
+ "id": 3068331887364293
+ },
+ {
+ "id": 3068331830560965
+ },
+ {
+ "id": 3068331776444549
+ },
+ {
+ "id": 3068327642089605
+ },
+ {
+ "id": 3068325675239621
+ },
+ {
+ "id": 3068325675256005
+ },
+ {
+ "id": 3068325675256006
+ },
+ {
+ "id": 3068325571528965
+ },
+ {
+ "id": 3068320108431621
+ },
+ {
+ "id": 3068320108431622
+ },
+ {
+ "id": 3068302179305669
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 997,
+ "records_with_pk": 997,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 619,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 619,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 34,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T23:34:00.922320+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18434,
+ "diff": -18433
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2824,
+ "diff": -2824
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 21,
+ "ods": 21,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2824,
+ "ods": 2824,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 40394.85,
+ "ods_sum": 40394.85,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 310789.49,
+ "ods_sum": 310789.49,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33315.15,
+ "ods_sum": 33315.15,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 116393.37,
+ "ods_sum": 116393.37,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18434,
+ "diff": -48
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3475,
+ "ods": 3475,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1319.49,
+ "ods_sum": 1319.49,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 66216.8,
+ "ods_sum": 66216.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 64234.0,
+ "ods_sum": 64234.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 573,
+ "ods": 573,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 2143.56,
+ "ods_sum": 2143.56,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 172536.78,
+ "ods_sum": 172536.78,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5005,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2490,
+ "ods": 2490,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160988.0,
+ "ods_sum": 160988.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 154001.27,
+ "ods_sum": 154001.27,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11461,
+ "diff": -34
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2489,
+ "ods": 2489,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 160076.0,
+ "ods_sum": 160076.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17022,
+ "diff": -45
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3616,
+ "ods": 3616,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 286088.0,
+ "ods_sum": 286088.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -47020.0,
+ "ods_sum": -47020.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -21423
+ },
+ "generated_at": "2026-01-26T23:34:06.630898+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-11-01T00:00:00+08:00",
+ "end": "2025-12-01T00:00:00+08:00",
+ "label": "month_2025-11-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-10-31T22:00:00+08:00",
+ "end": "2025-12-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 30,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3927,
+ "records_with_pk": 3927,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9996,
+ "records_with_pk": 9996,
+ "missing": 9,
+ "missing_samples": [
+ {
+ "id": 3068331886758085
+ },
+ {
+ "id": 3068331829921989
+ },
+ {
+ "id": 3068331775887493
+ },
+ {
+ "id": 3068327641483397
+ },
+ {
+ "id": 3068325674469573
+ },
+ {
+ "id": 3068325570955525
+ },
+ {
+ "id": 3068320107727109
+ },
+ {
+ "id": 3068303249115461
+ },
+ {
+ "id": 3068302178781381
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 890,
+ "records_with_pk": 890,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 12,
+ "records_with_pk": 12,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11827,
+ "records_with_pk": 11827,
+ "missing": 9,
+ "missing_samples": [
+ {
+ "id": 3068331884513477
+ },
+ {
+ "id": 3068331827660997
+ },
+ {
+ "id": 3068331773233285
+ },
+ {
+ "id": 3068327639173253
+ },
+ {
+ "id": 3068325671520453
+ },
+ {
+ "id": 3068325568678149
+ },
+ {
+ "id": 3068320105253125
+ },
+ {
+ "id": 3068303246281029
+ },
+ {
+ "id": 3068302176618693
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17027,
+ "records_with_pk": 17027,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068327551846725
+ },
+ {
+ "id": 3068319991449861
+ },
+ {
+ "id": 3068303788198214
+ },
+ {
+ "id": 3068303788198213
+ },
+ {
+ "id": 3068303397751109
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2469,
+ "records_with_pk": 2469,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 80,
+ "records_with_pk": 80,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8205,
+ "records_with_pk": 8205,
+ "missing": 11,
+ "missing_samples": [
+ {
+ "id": 3068331887364293
+ },
+ {
+ "id": 3068331830560965
+ },
+ {
+ "id": 3068331776444549
+ },
+ {
+ "id": 3068327642089605
+ },
+ {
+ "id": 3068325675239621
+ },
+ {
+ "id": 3068325675256005
+ },
+ {
+ "id": 3068325675256006
+ },
+ {
+ "id": 3068325571528965
+ },
+ {
+ "id": 3068320108431621
+ },
+ {
+ "id": 3068320108431622
+ },
+ {
+ "id": 3068302179305669
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5561,
+ "records_with_pk": 5561,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 30,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4052,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 22,
+ "skipped_missing_pk": 4052,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 34,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T23:36:58.962277+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18434,
+ "diff": -18433
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3336,
+ "diff": -3336
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 12,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 40,
+ "ods": 40,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 80,
+ "ods": 80,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3336,
+ "ods": 3336,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71642.8,
+ "ods_sum": 71642.8,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 394705.62,
+ "ods_sum": 394705.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 33307.25,
+ "ods_sum": 33307.25,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 156623.79,
+ "ods_sum": 156623.79,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18434,
+ "diff": -48
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4134,
+ "ods": 4134,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 1544.05,
+ "ods_sum": 1544.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 98139.8,
+ "ods_sum": 98139.8,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 87610.8,
+ "ods_sum": 87610.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 884,
+ "ods": 884,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 1437.75,
+ "ods_sum": 1437.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 281102.62,
+ "ods_sum": 281102.62,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5005,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2838,
+ "ods": 2838,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 172860.0,
+ "ods_sum": 172860.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 166439.03,
+ "ods_sum": 166439.03,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11461,
+ "diff": -34
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2843,
+ "ods": 2843,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 173800.0,
+ "ods_sum": 173800.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17022,
+ "diff": -45
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3999,
+ "ods": 3999,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 457185.0,
+ "ods_sum": 457185.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 17,
+ "ods": 17,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -16567.0,
+ "ods_sum": -16567.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -21935
+ },
+ "generated_at": "2026-01-26T23:37:04.627972+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2025-12-01T00:00:00+08:00",
+ "end": "2026-01-01T00:00:00+08:00",
+ "label": "month_2025-12-01",
+ "granularity": "month"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-11-30T22:00:00+08:00",
+ "end": "2026-01-01T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 31,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 207,
+ "records_with_pk": 207,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4044,
+ "records_with_pk": 4044,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 23,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9997,
+ "records_with_pk": 9997,
+ "missing": 10,
+ "missing_samples": [
+ {
+ "id": 3068338353047749
+ },
+ {
+ "id": 3068331886758085
+ },
+ {
+ "id": 3068331829921989
+ },
+ {
+ "id": 3068331775887493
+ },
+ {
+ "id": 3068327641483397
+ },
+ {
+ "id": 3068325674469573
+ },
+ {
+ "id": 3068325570955525
+ },
+ {
+ "id": 3068320107727109
+ },
+ {
+ "id": 3068303249115461
+ },
+ {
+ "id": 3068302178781381
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 984,
+ "records_with_pk": 984,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 35,
+ "records_with_pk": 35,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11828,
+ "records_with_pk": 11828,
+ "missing": 10,
+ "missing_samples": [
+ {
+ "id": 3068338350475461
+ },
+ {
+ "id": 3068331884513477
+ },
+ {
+ "id": 3068331827660997
+ },
+ {
+ "id": 3068331773233285
+ },
+ {
+ "id": 3068327639173253
+ },
+ {
+ "id": 3068325671520453
+ },
+ {
+ "id": 3068325568678149
+ },
+ {
+ "id": 3068320105253125
+ },
+ {
+ "id": 3068303246281029
+ },
+ {
+ "id": 3068302176618693
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17027,
+ "records_with_pk": 17027,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068327551846725
+ },
+ {
+ "id": 3068319991449861
+ },
+ {
+ "id": 3068303788198214
+ },
+ {
+ "id": 3068303788198213
+ },
+ {
+ "id": 3068303397751109
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2469,
+ "records_with_pk": 2469,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 70,
+ "records_with_pk": 70,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8205,
+ "records_with_pk": 8205,
+ "missing": 11,
+ "missing_samples": [
+ {
+ "id": 3068331887364293
+ },
+ {
+ "id": 3068331830560965
+ },
+ {
+ "id": 3068331776444549
+ },
+ {
+ "id": 3068327642089605
+ },
+ {
+ "id": 3068325675239621
+ },
+ {
+ "id": 3068325675256005
+ },
+ {
+ "id": 3068325675256006
+ },
+ {
+ "id": 3068325571528965
+ },
+ {
+ "id": 3068320108431621
+ },
+ {
+ "id": 3068320108431622
+ },
+ {
+ "id": 3068302179305669
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5490,
+ "records_with_pk": 5490,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 30,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4151,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 23,
+ "skipped_missing_pk": 4151,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 36,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T23:39:55.805472+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18434,
+ "diff": -18433
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3479,
+ "diff": -3479
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 5,
+ "ods": 5,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 6,
+ "ods": 6,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 12,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3479,
+ "ods": 3479,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 71445.57,
+ "ods_sum": 71445.57,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 432220.76,
+ "ods_sum": 432220.76,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 34544.63,
+ "ods_sum": 34544.63,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 189974.44,
+ "ods_sum": 189974.44,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18434,
+ "diff": -48
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2625,
+ "ods": 2625,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 190.1,
+ "ods_sum": 190.1,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 65814.4,
+ "ods_sum": 65814.4,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 63275.9,
+ "ods_sum": 63275.9,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 975,
+ "ods": 975,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 3190.05,
+ "ods_sum": 3190.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 322183.69,
+ "ods_sum": 322183.69,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5005,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2816,
+ "ods": 2816,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 179652.0,
+ "ods_sum": 179652.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 170800.75,
+ "ods_sum": 170800.75,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11461,
+ "diff": -34
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2827,
+ "ods": 2827,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 180232.0,
+ "ods_sum": 180232.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17022,
+ "diff": -45
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 4118,
+ "ods": 4118,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 472999.0,
+ "ods_sum": 472999.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 13,
+ "ods": 13,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -4314.0,
+ "ods_sum": -4314.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -22078
+ },
+ "generated_at": "2026-01-26T23:40:01.540276+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-01T00:00:00+08:00",
+ "end": "2026-01-08T00:00:00+08:00",
+ "label": "week_2026-01-01",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2025-12-31T22:00:00+08:00",
+ "end": "2026-01-08T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 138,
+ "records_with_pk": 138,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 827,
+ "records_with_pk": 827,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9998,
+ "records_with_pk": 9998,
+ "missing": 11,
+ "missing_samples": [
+ {
+ "id": 3068342767175813
+ },
+ {
+ "id": 3068338353047749
+ },
+ {
+ "id": 3068331886758085
+ },
+ {
+ "id": 3068331829921989
+ },
+ {
+ "id": 3068331775887493
+ },
+ {
+ "id": 3068327641483397
+ },
+ {
+ "id": 3068325674469573
+ },
+ {
+ "id": 3068325570955525
+ },
+ {
+ "id": 3068320107727109
+ },
+ {
+ "id": 3068303249115461
+ },
+ {
+ "id": 3068302178781381
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 167,
+ "records_with_pk": 167,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10,
+ "records_with_pk": 10,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11829,
+ "records_with_pk": 11829,
+ "missing": 11,
+ "missing_samples": [
+ {
+ "id": 3068342764128389
+ },
+ {
+ "id": 3068338350475461
+ },
+ {
+ "id": 3068331884513477
+ },
+ {
+ "id": 3068331827660997
+ },
+ {
+ "id": 3068331773233285
+ },
+ {
+ "id": 3068327639173253
+ },
+ {
+ "id": 3068325671520453
+ },
+ {
+ "id": 3068325568678149
+ },
+ {
+ "id": 3068320105253125
+ },
+ {
+ "id": 3068303246281029
+ },
+ {
+ "id": 3068302176618693
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17027,
+ "records_with_pk": 17027,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068327551846725
+ },
+ {
+ "id": 3068319991449861
+ },
+ {
+ "id": 3068303788198214
+ },
+ {
+ "id": 3068303788198213
+ },
+ {
+ "id": 3068303397751109
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2469,
+ "records_with_pk": 2469,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8207,
+ "records_with_pk": 8207,
+ "missing": 13,
+ "missing_samples": [
+ {
+ "id": 3068342768208005
+ },
+ {
+ "id": 3068342768208006
+ },
+ {
+ "id": 3068331887364293
+ },
+ {
+ "id": 3068331830560965
+ },
+ {
+ "id": 3068331776444549
+ },
+ {
+ "id": 3068327642089605
+ },
+ {
+ "id": 3068325675239621
+ },
+ {
+ "id": 3068325675256005
+ },
+ {
+ "id": 3068325675256006
+ },
+ {
+ "id": 3068325571528965
+ },
+ {
+ "id": 3068320108431621
+ },
+ {
+ "id": 3068320108431622
+ },
+ {
+ "id": 3068302179305669
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 880,
+ "records_with_pk": 880,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 851,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 851,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 40,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T23:42:26.585247+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18434,
+ "diff": -18433
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 699,
+ "diff": -699
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 699,
+ "ods": 699,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 8896.03,
+ "ods_sum": 8896.03,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 74693.62,
+ "ods_sum": 74693.62,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6587.39,
+ "ods_sum": 6587.39,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30138.48,
+ "ods_sum": 30138.48,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18434,
+ "diff": -48
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 157,
+ "ods": 157,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 46522.68,
+ "ods_sum": 46522.68,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5005,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 569,
+ "ods": 569,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37392.0,
+ "ods_sum": 37392.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35659.11,
+ "ods_sum": 35659.11,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11461,
+ "diff": -34
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 566,
+ "ods": 566,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37228.0,
+ "ods_sum": 37228.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17022,
+ "diff": -45
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 823,
+ "ods": 823,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 78730.0,
+ "ods_sum": 78730.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -7.0,
+ "ods_sum": -7.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19298
+ },
+ "generated_at": "2026-01-26T23:42:31.972383+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-08T00:00:00+08:00",
+ "end": "2026-01-15T00:00:00+08:00",
+ "label": "week_2026-01-08",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-07T22:00:00+08:00",
+ "end": "2026-01-15T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 790,
+ "records_with_pk": 790,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9998,
+ "records_with_pk": 9998,
+ "missing": 11,
+ "missing_samples": [
+ {
+ "id": 3068342767175813
+ },
+ {
+ "id": 3068338353047749
+ },
+ {
+ "id": 3068331886758085
+ },
+ {
+ "id": 3068331829921989
+ },
+ {
+ "id": 3068331775887493
+ },
+ {
+ "id": 3068327641483397
+ },
+ {
+ "id": 3068325674469573
+ },
+ {
+ "id": 3068325570955525
+ },
+ {
+ "id": 3068320107727109
+ },
+ {
+ "id": 3068303249115461
+ },
+ {
+ "id": 3068302178781381
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 195,
+ "records_with_pk": 195,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 22,
+ "records_with_pk": 22,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11829,
+ "records_with_pk": 11829,
+ "missing": 11,
+ "missing_samples": [
+ {
+ "id": 3068342764128389
+ },
+ {
+ "id": 3068338350475461
+ },
+ {
+ "id": 3068331884513477
+ },
+ {
+ "id": 3068331827660997
+ },
+ {
+ "id": 3068331773233285
+ },
+ {
+ "id": 3068327639173253
+ },
+ {
+ "id": 3068325671520453
+ },
+ {
+ "id": 3068325568678149
+ },
+ {
+ "id": 3068320105253125
+ },
+ {
+ "id": 3068303246281029
+ },
+ {
+ "id": 3068302176618693
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17027,
+ "records_with_pk": 17027,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068327551846725
+ },
+ {
+ "id": 3068319991449861
+ },
+ {
+ "id": 3068303788198214
+ },
+ {
+ "id": 3068303788198213
+ },
+ {
+ "id": 3068303397751109
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2469,
+ "records_with_pk": 2469,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 15,
+ "records_with_pk": 15,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8207,
+ "records_with_pk": 8207,
+ "missing": 13,
+ "missing_samples": [
+ {
+ "id": 3068342768208005
+ },
+ {
+ "id": 3068342768208006
+ },
+ {
+ "id": 3068331887364293
+ },
+ {
+ "id": 3068331830560965
+ },
+ {
+ "id": 3068331776444549
+ },
+ {
+ "id": 3068327642089605
+ },
+ {
+ "id": 3068325675239621
+ },
+ {
+ "id": 3068325675256005
+ },
+ {
+ "id": 3068325675256006
+ },
+ {
+ "id": 3068325571528965
+ },
+ {
+ "id": 3068320108431621
+ },
+ {
+ "id": 3068320108431622
+ },
+ {
+ "id": 3068302179305669
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1241,
+ "records_with_pk": 1241,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 814,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 814,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 40,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T23:44:48.226506+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18434,
+ "diff": -18433
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 672,
+ "diff": -672
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 672,
+ "ods": 672,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 16159.12,
+ "ods_sum": 16159.12,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 82416.19,
+ "ods_sum": 82416.19,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 6098.02,
+ "ods_sum": 6098.02,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 30731.98,
+ "ods_sum": 30731.98,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18434,
+ "diff": -48
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 188,
+ "ods": 188,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 190.72,
+ "ods_sum": 190.72,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 54584.19,
+ "ods_sum": 54584.19,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5005,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 572,
+ "ods": 572,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37214.0,
+ "ods_sum": 37214.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 35525.09,
+ "ods_sum": 35525.09,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11461,
+ "diff": -34
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 575,
+ "ods": 575,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 37262.0,
+ "ods_sum": 37262.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17022,
+ "diff": -45
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 790,
+ "ods": 790,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 86381.0,
+ "ods_sum": 86381.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -39.0,
+ "ods_sum": -39.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19271
+ },
+ "generated_at": "2026-01-26T23:44:55.680428+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-15T00:00:00+08:00",
+ "end": "2026-01-22T00:00:00+08:00",
+ "label": "week_2026-01-15",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-14T22:00:00+08:00",
+ "end": "2026-01-22T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 7,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 899,
+ "records_with_pk": 899,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9999,
+ "records_with_pk": 9999,
+ "missing": 12,
+ "missing_samples": [
+ {
+ "id": 3068347773946117
+ },
+ {
+ "id": 3068342767175813
+ },
+ {
+ "id": 3068338353047749
+ },
+ {
+ "id": 3068331886758085
+ },
+ {
+ "id": 3068331829921989
+ },
+ {
+ "id": 3068331775887493
+ },
+ {
+ "id": 3068327641483397
+ },
+ {
+ "id": 3068325674469573
+ },
+ {
+ "id": 3068325570955525
+ },
+ {
+ "id": 3068320107727109
+ },
+ {
+ "id": 3068303249115461
+ },
+ {
+ "id": 3068302178781381
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 216,
+ "records_with_pk": 216,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 6,
+ "records_with_pk": 6,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11830,
+ "records_with_pk": 11830,
+ "missing": 12,
+ "missing_samples": [
+ {
+ "id": 3068347769456901
+ },
+ {
+ "id": 3068342764128389
+ },
+ {
+ "id": 3068338350475461
+ },
+ {
+ "id": 3068331884513477
+ },
+ {
+ "id": 3068331827660997
+ },
+ {
+ "id": 3068331773233285
+ },
+ {
+ "id": 3068327639173253
+ },
+ {
+ "id": 3068325671520453
+ },
+ {
+ "id": 3068325568678149
+ },
+ {
+ "id": 3068320105253125
+ },
+ {
+ "id": 3068303246281029
+ },
+ {
+ "id": 3068302176618693
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17028,
+ "records_with_pk": 17028,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068347514390789
+ },
+ {
+ "id": 3068327551846725
+ },
+ {
+ "id": 3068319991449861
+ },
+ {
+ "id": 3068303788198214
+ },
+ {
+ "id": 3068303788198213
+ },
+ {
+ "id": 3068303397751109
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2469,
+ "records_with_pk": 2469,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 21,
+ "records_with_pk": 21,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8209,
+ "records_with_pk": 8209,
+ "missing": 15,
+ "missing_samples": [
+ {
+ "id": 3068347774716165
+ },
+ {
+ "id": 3068347774716166
+ },
+ {
+ "id": 3068342768208005
+ },
+ {
+ "id": 3068342768208006
+ },
+ {
+ "id": 3068331887364293
+ },
+ {
+ "id": 3068331830560965
+ },
+ {
+ "id": 3068331776444549
+ },
+ {
+ "id": 3068327642089605
+ },
+ {
+ "id": 3068325675239621
+ },
+ {
+ "id": 3068325675256005
+ },
+ {
+ "id": 3068325675256006
+ },
+ {
+ "id": 3068325571528965
+ },
+ {
+ "id": 3068320108431621
+ },
+ {
+ "id": 3068320108431622
+ },
+ {
+ "id": 3068302179305669
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1181,
+ "records_with_pk": 1181,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 932,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 932,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 45,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T23:47:14.385605+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18434,
+ "diff": -18433
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 776,
+ "diff": -776
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 4,
+ "ods": 4,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 7,
+ "ods": 7,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 776,
+ "ods": 776,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 16959.34,
+ "ods_sum": 16959.34,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 38520.64,
+ "ods_sum": 38520.64,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 93110.51,
+ "ods_sum": 93110.51,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 5009.13,
+ "ods_sum": 5009.13,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 40591.34,
+ "ods_sum": 40591.34,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18434,
+ "diff": -48
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 212,
+ "ods": 212,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 191.21,
+ "ods_sum": 191.21,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 70610.77,
+ "ods_sum": 70610.77,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5005,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 613,
+ "ods": 613,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 40100.0,
+ "ods_sum": 40100.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 38520.64,
+ "ods_sum": 38520.64,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11461,
+ "diff": -34
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 616,
+ "ods": 616,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 40456.0,
+ "ods_sum": 40456.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17022,
+ "diff": -45
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 896,
+ "ods": 896,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 123718.0,
+ "ods_sum": 123718.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -34.0,
+ "ods_sum": -34.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19375
+ },
+ "generated_at": "2026-01-26T23:47:19.616551+08:00"
+ },
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-22T00:00:00+08:00",
+ "end": "2026-01-26T20:34:55.893505+08:00",
+ "label": "week_2026-01-22",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-21T22:00:00+08:00",
+ "end": "2026-01-26T22:34:55.893505+08:00",
+ "cutoff": null,
+ "window_days": 4,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 610,
+ "records_with_pk": 610,
+ "missing": 30,
+ "missing_samples": [
+ {
+ "id": 3068274759174405
+ },
+ {
+ "id": 3068266628860165
+ },
+ {
+ "id": 3068265453193477
+ },
+ {
+ "id": 3068260351953093
+ },
+ {
+ "id": 3068260196206917
+ },
+ {
+ "id": 3068253977921861
+ },
+ {
+ "id": 3068250782402757
+ },
+ {
+ "id": 3068248546969925
+ },
+ {
+ "id": 3068247587326149
+ },
+ {
+ "id": 3068245677574277
+ },
+ {
+ "id": 3068244005472389
+ },
+ {
+ "id": 3068240723380549
+ },
+ {
+ "id": 3068238181681285
+ },
+ {
+ "id": 3068222416193797
+ },
+ {
+ "id": 3068219408025861
+ },
+ {
+ "id": 3068210285201669
+ },
+ {
+ "id": 3068205015746821
+ },
+ {
+ "id": 3068204058937477
+ },
+ {
+ "id": 3068195036170501
+ },
+ {
+ "id": 3068191206459653
+ },
+ {
+ "id": 3068189824059589
+ },
+ {
+ "id": 3068187415611653
+ },
+ {
+ "id": 3068178355669125
+ },
+ {
+ "id": 3068178301192325
+ },
+ {
+ "id": 3068176777808133
+ },
+ {
+ "id": 3068173758433541
+ },
+ {
+ "id": 3068172788353285
+ },
+ {
+ "id": 3068172286822597
+ },
+ {
+ "id": 3068165730896197
+ },
+ {
+ "id": 3068161172441285
+ }
+ ],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9999,
+ "records_with_pk": 9999,
+ "missing": 12,
+ "missing_samples": [
+ {
+ "id": 3068347773946117
+ },
+ {
+ "id": 3068342767175813
+ },
+ {
+ "id": 3068338353047749
+ },
+ {
+ "id": 3068331886758085
+ },
+ {
+ "id": 3068331829921989
+ },
+ {
+ "id": 3068331775887493
+ },
+ {
+ "id": 3068327641483397
+ },
+ {
+ "id": 3068325674469573
+ },
+ {
+ "id": 3068325570955525
+ },
+ {
+ "id": 3068320107727109
+ },
+ {
+ "id": 3068303249115461
+ },
+ {
+ "id": 3068302178781381
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 164,
+ "records_with_pk": 164,
+ "missing": 8,
+ "missing_samples": [
+ {
+ "id": 3068248572709125
+ },
+ {
+ "id": 3068195099363589
+ },
+ {
+ "id": 3068173056575621
+ },
+ {
+ "id": 3068173056116869
+ },
+ {
+ "id": 3068173055641733
+ },
+ {
+ "id": 3068172409686149
+ },
+ {
+ "id": 3068165922752773
+ },
+ {
+ "id": 3068161263503493
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 5,
+ "records_with_pk": 5,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11830,
+ "records_with_pk": 11830,
+ "missing": 12,
+ "missing_samples": [
+ {
+ "id": 3068347769456901
+ },
+ {
+ "id": 3068342764128389
+ },
+ {
+ "id": 3068338350475461
+ },
+ {
+ "id": 3068331884513477
+ },
+ {
+ "id": 3068331827660997
+ },
+ {
+ "id": 3068331773233285
+ },
+ {
+ "id": 3068327639173253
+ },
+ {
+ "id": 3068325671520453
+ },
+ {
+ "id": 3068325568678149
+ },
+ {
+ "id": 3068320105253125
+ },
+ {
+ "id": 3068303246281029
+ },
+ {
+ "id": 3068302176618693
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17028,
+ "records_with_pk": 17028,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068347514390789
+ },
+ {
+ "id": 3068327551846725
+ },
+ {
+ "id": 3068319991449861
+ },
+ {
+ "id": 3068303788198214
+ },
+ {
+ "id": 3068303788198213
+ },
+ {
+ "id": 3068303397751109
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2469,
+ "records_with_pk": 2469,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8,
+ "records_with_pk": 8,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068193226131717
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8209,
+ "records_with_pk": 8209,
+ "missing": 15,
+ "missing_samples": [
+ {
+ "id": 3068347774716165
+ },
+ {
+ "id": 3068347774716166
+ },
+ {
+ "id": 3068342768208005
+ },
+ {
+ "id": 3068342768208006
+ },
+ {
+ "id": 3068331887364293
+ },
+ {
+ "id": 3068331830560965
+ },
+ {
+ "id": 3068331776444549
+ },
+ {
+ "id": 3068327642089605
+ },
+ {
+ "id": 3068325675239621
+ },
+ {
+ "id": 3068325675256005
+ },
+ {
+ "id": 3068325675256006
+ },
+ {
+ "id": 3068325571528965
+ },
+ {
+ "id": 3068320108431621
+ },
+ {
+ "id": 3068320108431622
+ },
+ {
+ "id": 3068302179305669
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1042,
+ "records_with_pk": 1042,
+ "missing": 21,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3068274887936325
+ },
+ {
+ "sitegoodsstockid": 3068274743986437
+ },
+ {
+ "sitegoodsstockid": 3068266527918213
+ },
+ {
+ "sitegoodsstockid": 3068264303184005
+ },
+ {
+ "sitegoodsstockid": 3068264302692485
+ },
+ {
+ "sitegoodsstockid": 3068260102326469
+ },
+ {
+ "sitegoodsstockid": 3068260102817989
+ },
+ {
+ "sitegoodsstockid": 3068251627522245
+ },
+ {
+ "sitegoodsstockid": 3068245858044101
+ },
+ {
+ "sitegoodsstockid": 3068238403602693
+ },
+ {
+ "sitegoodsstockid": 3068238398638405
+ },
+ {
+ "sitegoodsstockid": 3068230906775685
+ },
+ {
+ "sitegoodsstockid": 3068230907365509
+ },
+ {
+ "sitegoodsstockid": 3068222972643653
+ },
+ {
+ "sitegoodsstockid": 3068212484425861
+ },
+ {
+ "sitegoodsstockid": 3068212393527493
+ },
+ {
+ "sitegoodsstockid": 3068211882658053
+ },
+ {
+ "sitegoodsstockid": 3068185293736197
+ },
+ {
+ "sitegoodsstockid": 3068173817415941
+ },
+ {
+ "sitegoodsstockid": 3068166835570885
+ },
+ {
+ "sitegoodsstockid": 3068165128079621
+ }
+ ],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 623,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 4,
+ "skipped_missing_pk": 623,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 105,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T23:49:40.625876+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18434,
+ "diff": -18433
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 514,
+ "diff": -514
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 503,
+ "ods": 514,
+ "diff": -11
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 10412.32,
+ "ods_sum": 10480.32,
+ "diff": -68.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 23440.18,
+ "ods_sum": 24162.18,
+ "diff": -722.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 66552.38,
+ "ods_sum": 67554.66,
+ "diff": -1002.2799999999988
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 1649.19,
+ "ods_sum": 1649.19,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 31050.69,
+ "ods_sum": 31262.97,
+ "diff": -212.28000000000247
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18434,
+ "diff": -48
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 150,
+ "ods": 152,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 45010.31,
+ "ods_sum": 45965.85,
+ "diff": -955.5400000000009
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5005,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 349,
+ "ods": 364,
+ "diff": -15
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 23828.0,
+ "ods_sum": 24982.0,
+ "diff": -1154.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 23104.18,
+ "ods_sum": 24162.18,
+ "diff": -1058.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11461,
+ "diff": -34
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 355,
+ "ods": 375,
+ "diff": -20
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 24424.0,
+ "ods_sum": 25974.0,
+ "diff": -1550.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17022,
+ "diff": -45
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 567,
+ "ods": 578,
+ "diff": -11
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 66836.0,
+ "ods_sum": 67261.0,
+ "diff": -425.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -7.0,
+ "ods_sum": -7.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19172
+ },
+ "generated_at": "2026-01-26T23:49:46.864454+08:00"
+ }
+ ],
+ "total_missing": 415,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T23:49:46.864479+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_history_20260127_024335.json b/etl_billiards/reports/data_integrity_history_20260127_024335.json
new file mode 100644
index 0000000..03c7dc7
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_history_20260127_024335.json
@@ -0,0 +1,1690 @@
+{
+ "mode": "history",
+ "start": "2026-01-26T00:00:00+08:00",
+ "end": "2026-01-27T00:00:00+08:00",
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-26T00:00:00+08:00",
+ "end": "2026-01-27T00:00:00+08:00",
+ "label": "week_2026-01-26",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-25T22:00:00+08:00",
+ "end": "2026-01-27T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 1,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 137,
+ "records_with_pk": 137,
+ "missing": 63,
+ "missing_samples": [
+ {
+ "id": 3068478831069509
+ },
+ {
+ "id": 3068478749411461
+ },
+ {
+ "id": 3068449874594117
+ },
+ {
+ "id": 3068439717660805
+ },
+ {
+ "id": 3068425134852421
+ },
+ {
+ "id": 3068420801906885
+ },
+ {
+ "id": 3068419354937669
+ },
+ {
+ "id": 3068405527726341
+ },
+ {
+ "id": 3068391002802501
+ },
+ {
+ "id": 3068370869831877
+ },
+ {
+ "id": 3068368265578821
+ },
+ {
+ "id": 3068365252905221
+ },
+ {
+ "id": 3068364464179397
+ },
+ {
+ "id": 3068357511071941
+ },
+ {
+ "id": 3068352173721925
+ },
+ {
+ "id": 3068347572291717
+ },
+ {
+ "id": 3068342732884229
+ },
+ {
+ "id": 3068336770664773
+ },
+ {
+ "id": 3068331868358789
+ },
+ {
+ "id": 3068331813521541
+ },
+ {
+ "id": 3068331758766341
+ },
+ {
+ "id": 3068327625361669
+ },
+ {
+ "id": 3068325656512773
+ },
+ {
+ "id": 3068325554260293
+ },
+ {
+ "id": 3068320089016645
+ },
+ {
+ "id": 3068303100397701
+ },
+ {
+ "id": 3068302161676421
+ },
+ {
+ "id": 3068290483226949
+ },
+ {
+ "id": 3068290124695685
+ },
+ {
+ "id": 3068290044152069
+ },
+ {
+ "id": 3068287542610181
+ },
+ {
+ "id": 3068287442798725
+ },
+ {
+ "id": 3068286573627589
+ },
+ {
+ "id": 3068274759174405
+ },
+ {
+ "id": 3068266628860165
+ },
+ {
+ "id": 3068265453193477
+ },
+ {
+ "id": 3068260351953093
+ },
+ {
+ "id": 3068260196206917
+ },
+ {
+ "id": 3068253977921861
+ },
+ {
+ "id": 3068250782402757
+ },
+ {
+ "id": 3068248546969925
+ },
+ {
+ "id": 3068247587326149
+ },
+ {
+ "id": 3068245677574277
+ },
+ {
+ "id": 3068244005472389
+ },
+ {
+ "id": 3068240723380549
+ },
+ {
+ "id": 3068238181681285
+ },
+ {
+ "id": 3068222416193797
+ },
+ {
+ "id": 3068219408025861
+ },
+ {
+ "id": 3068210285201669
+ },
+ {
+ "id": 3068205015746821
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10017,
+ "records_with_pk": 10017,
+ "missing": 17,
+ "missing_samples": [
+ {
+ "id": 3068517744281861
+ },
+ {
+ "id": 3068516485728389
+ },
+ {
+ "id": 3068498428807429
+ },
+ {
+ "id": 3068490965305477
+ },
+ {
+ "id": 3068488957757765
+ },
+ {
+ "id": 3068478880729349
+ },
+ {
+ "id": 3068478791092357
+ },
+ {
+ "id": 3068439736813765
+ },
+ {
+ "id": 3068425153349893
+ },
+ {
+ "id": 3068420831496453
+ },
+ {
+ "id": 3068419381758085
+ },
+ {
+ "id": 3068391123650821
+ },
+ {
+ "id": 3068370907220229
+ },
+ {
+ "id": 3068368358410437
+ },
+ {
+ "id": 3068365298026821
+ },
+ {
+ "id": 3068364480170117
+ },
+ {
+ "id": 3068357527882053
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 29,
+ "records_with_pk": 29,
+ "missing": 12,
+ "missing_samples": [
+ {
+ "id": 3068405573077317
+ },
+ {
+ "id": 3068352477743301
+ },
+ {
+ "id": 3068342767585413
+ },
+ {
+ "id": 3068303249705285
+ },
+ {
+ "id": 3068248572709125
+ },
+ {
+ "id": 3068195099363589
+ },
+ {
+ "id": 3068173056575621
+ },
+ {
+ "id": 3068173056116869
+ },
+ {
+ "id": 3068173055641733
+ },
+ {
+ "id": 3068172409686149
+ },
+ {
+ "id": 3068165922752773
+ },
+ {
+ "id": 3068161263503493
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11850,
+ "records_with_pk": 11850,
+ "missing": 19,
+ "missing_samples": [
+ {
+ "id": 3068517741332741
+ },
+ {
+ "id": 3068516482271365
+ },
+ {
+ "id": 3068498426480901
+ },
+ {
+ "id": 3068490962798725
+ },
+ {
+ "id": 3068488953809221
+ },
+ {
+ "id": 3068478878402821
+ },
+ {
+ "id": 3068478788913285
+ },
+ {
+ "id": 3068449905166597
+ },
+ {
+ "id": 3068439734634693
+ },
+ {
+ "id": 3068425151170821
+ },
+ {
+ "id": 3068420828940549
+ },
+ {
+ "id": 3068419379562629
+ },
+ {
+ "id": 3068405569620293
+ },
+ {
+ "id": 3068391121193221
+ },
+ {
+ "id": 3068370904598789
+ },
+ {
+ "id": 3068368355690693
+ },
+ {
+ "id": 3068365295847749
+ },
+ {
+ "id": 3068364477696133
+ },
+ {
+ "id": 3068357525768517
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17031,
+ "records_with_pk": 17031,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068361285667077
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2475,
+ "records_with_pk": 2475,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3068517741889797
+ },
+ {
+ "id": 3068516482795653
+ },
+ {
+ "id": 3068488954612037
+ },
+ {
+ "id": 3068488954399045
+ },
+ {
+ "id": 3068405570210117
+ },
+ {
+ "id": 3068368356231365
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2,
+ "records_with_pk": 2,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068193226131717
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8222,
+ "records_with_pk": 8222,
+ "missing": 13,
+ "missing_samples": [
+ {
+ "id": 3068490965911685
+ },
+ {
+ "id": 3068478881253637
+ },
+ {
+ "id": 3068478791747717
+ },
+ {
+ "id": 3068439737370821
+ },
+ {
+ "id": 3068425153939717
+ },
+ {
+ "id": 3068425153939718
+ },
+ {
+ "id": 3068420832184581
+ },
+ {
+ "id": 3068420832200965
+ },
+ {
+ "id": 3068419382282373
+ },
+ {
+ "id": 3068391124306181
+ },
+ {
+ "id": 3068370908072197
+ },
+ {
+ "id": 3068364481104005
+ },
+ {
+ "id": 3068357528439109
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 151,
+ "records_with_pk": 151,
+ "missing": 43,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3068463611054277
+ },
+ {
+ "sitegoodsstockid": 3068463611513029
+ },
+ {
+ "sitegoodsstockid": 3068449906657541
+ },
+ {
+ "sitegoodsstockid": 3068447170857285
+ },
+ {
+ "sitegoodsstockid": 3068443071547525
+ },
+ {
+ "sitegoodsstockid": 3068443072022661
+ },
+ {
+ "sitegoodsstockid": 3068443072497798
+ },
+ {
+ "sitegoodsstockid": 3068405997390085
+ },
+ {
+ "sitegoodsstockid": 3068397306628293
+ },
+ {
+ "sitegoodsstockid": 3068396796938373
+ },
+ {
+ "sitegoodsstockid": 3068396797413509
+ },
+ {
+ "sitegoodsstockid": 3068387840166021
+ },
+ {
+ "sitegoodsstockid": 3068365194758341
+ },
+ {
+ "sitegoodsstockid": 3068364728027269
+ },
+ {
+ "sitegoodsstockid": 3068363747215621
+ },
+ {
+ "sitegoodsstockid": 3068305852975237
+ },
+ {
+ "sitegoodsstockid": 3068302319290501
+ },
+ {
+ "sitegoodsstockid": 3068299356686661
+ },
+ {
+ "sitegoodsstockid": 3068287475239173
+ },
+ {
+ "sitegoodsstockid": 3068285768239237
+ },
+ {
+ "sitegoodsstockid": 3068284328298757
+ },
+ {
+ "sitegoodsstockid": 3068284327807237
+ },
+ {
+ "sitegoodsstockid": 3068274887936325
+ },
+ {
+ "sitegoodsstockid": 3068274743986437
+ },
+ {
+ "sitegoodsstockid": 3068266527918213
+ },
+ {
+ "sitegoodsstockid": 3068264303184005
+ },
+ {
+ "sitegoodsstockid": 3068264302692485
+ },
+ {
+ "sitegoodsstockid": 3068260102326469
+ },
+ {
+ "sitegoodsstockid": 3068260102817989
+ },
+ {
+ "sitegoodsstockid": 3068251627522245
+ },
+ {
+ "sitegoodsstockid": 3068245858044101
+ },
+ {
+ "sitegoodsstockid": 3068238403602693
+ },
+ {
+ "sitegoodsstockid": 3068238398638405
+ },
+ {
+ "sitegoodsstockid": 3068230906775685
+ },
+ {
+ "sitegoodsstockid": 3068230907365509
+ },
+ {
+ "sitegoodsstockid": 3068222972643653
+ },
+ {
+ "sitegoodsstockid": 3068212484425861
+ },
+ {
+ "sitegoodsstockid": 3068212393527493
+ },
+ {
+ "sitegoodsstockid": 3068211882658053
+ },
+ {
+ "sitegoodsstockid": 3068185293736197
+ },
+ {
+ "sitegoodsstockid": 3068173817415941
+ },
+ {
+ "sitegoodsstockid": 3068166835570885
+ },
+ {
+ "sitegoodsstockid": 3068165128079621
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1747,
+ "records_with_pk": 1747,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068517745117445
+ },
+ {
+ "id": 3068516487399557
+ },
+ {
+ "id": 3068488959232325
+ },
+ {
+ "id": 3068368359033029
+ },
+ {
+ "id": 3068365298649413
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 139,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 139,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 180,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T02:43:29.763994+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18447,
+ "diff": -18446
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 99,
+ "diff": -99
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23377,
+ "diff": -11
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 38,
+ "ods": 99,
+ "diff": -61
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 1147.62,
+ "ods_sum": 2946.36,
+ "diff": -1798.7400000000002
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 1510.0,
+ "ods_sum": 5290.76,
+ "diff": -3780.76
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 5098.19,
+ "ods_sum": 18345.66,
+ "diff": -13247.470000000001
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 123.02,
+ "diff": -123.02
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 2440.57,
+ "ods_sum": 9985.52,
+ "diff": -7544.950000000001
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18447,
+ "diff": -61
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 331403.18,
+ "diff": -1798.7399999999907
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2856,
+ "diff": -7
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 14,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 4996.98,
+ "ods_sum": 5952.52,
+ "diff": -955.5400000000009
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5005,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4754,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 18,
+ "ods": 74,
+ "diff": -56
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 1174.0,
+ "ods_sum": 5400.0,
+ "diff": -4226.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 1174.0,
+ "ods_sum": 5290.76,
+ "diff": -4116.76
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11476,
+ "diff": -49
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 25,
+ "ods": 78,
+ "diff": -53
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 1972.0,
+ "ods_sum": 5986.0,
+ "diff": -4014.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17030,
+ "diff": -53
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 43,
+ "ods": 104,
+ "diff": -61
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 6852.0,
+ "ods_sum": 12985.0,
+ "diff": -6133.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18980
+ },
+ "generated_at": "2026-01-27T02:43:35.905375+08:00"
+ }
+ ],
+ "total_missing": 180,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T02:43:35.905402+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_history_20260127_031951.json b/etl_billiards/reports/data_integrity_history_20260127_031951.json
new file mode 100644
index 0000000..11a4ae3
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_history_20260127_031951.json
@@ -0,0 +1,1275 @@
+{
+ "mode": "history",
+ "start": "2026-01-26T00:00:00+08:00",
+ "end": "2026-01-27T00:00:00+08:00",
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-26T00:00:00+08:00",
+ "end": "2026-01-27T00:00:00+08:00",
+ "label": "week_2026-01-26",
+ "granularity": "week"
+ },
+ "api_to_ods": {
+ "window_split_unit": "month",
+ "window_compensation_hours": 2,
+ "start": "2026-01-25T22:00:00+08:00",
+ "end": "2026-01-27T02:00:00+08:00",
+ "cutoff": null,
+ "window_days": 1,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 137,
+ "records_with_pk": 137,
+ "missing": 11,
+ "missing_samples": [
+ {
+ "id": 3068449874594117
+ },
+ {
+ "id": 3068439717660805
+ },
+ {
+ "id": 3068425134852421
+ },
+ {
+ "id": 3068420801906885
+ },
+ {
+ "id": 3068419354937669
+ },
+ {
+ "id": 3068405527726341
+ },
+ {
+ "id": 3068391002802501
+ },
+ {
+ "id": 3068370869831877
+ },
+ {
+ "id": 3068368265578821
+ },
+ {
+ "id": 3068365252905221
+ },
+ {
+ "id": 3068364464179397
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10018,
+ "records_with_pk": 10018,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068550021253253
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 29,
+ "records_with_pk": 29,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068405573077317
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11851,
+ "records_with_pk": 11851,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068550018664581
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17031,
+ "records_with_pk": 17031,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2475,
+ "records_with_pk": 2475,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2,
+ "records_with_pk": 2,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8222,
+ "records_with_pk": 8222,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 151,
+ "records_with_pk": 151,
+ "missing": 15,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3068463611054277
+ },
+ {
+ "sitegoodsstockid": 3068463611513029
+ },
+ {
+ "sitegoodsstockid": 3068449906657541
+ },
+ {
+ "sitegoodsstockid": 3068447170857285
+ },
+ {
+ "sitegoodsstockid": 3068443071547525
+ },
+ {
+ "sitegoodsstockid": 3068443072022661
+ },
+ {
+ "sitegoodsstockid": 3068443072497798
+ },
+ {
+ "sitegoodsstockid": 3068405997390085
+ },
+ {
+ "sitegoodsstockid": 3068397306628293
+ },
+ {
+ "sitegoodsstockid": 3068396796938373
+ },
+ {
+ "sitegoodsstockid": 3068396797413509
+ },
+ {
+ "sitegoodsstockid": 3068387840166021
+ },
+ {
+ "sitegoodsstockid": 3068365194758341
+ },
+ {
+ "sitegoodsstockid": 3068364728027269
+ },
+ {
+ "sitegoodsstockid": 3068363747215621
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1748,
+ "records_with_pk": 1748,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068550022547589
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 139,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 139,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 30,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T03:19:45.808688+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18464,
+ "diff": -18463
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 100,
+ "diff": -100
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23434,
+ "diff": -68
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23434,
+ "diff": -68
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 38,
+ "ods": 100,
+ "diff": -62
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 1147.62,
+ "ods_sum": 2946.36,
+ "diff": -1798.7400000000002
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 1510.0,
+ "ods_sum": 5338.76,
+ "diff": -3828.76
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 5098.19,
+ "ods_sum": 18393.66,
+ "diff": -13295.470000000001
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 123.02,
+ "diff": -123.02
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 2440.57,
+ "ods_sum": 9985.52,
+ "diff": -7544.950000000001
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18464,
+ "diff": -78
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2861,
+ "diff": -12
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 332004.04,
+ "diff": -2399.5999999999767
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2861,
+ "diff": -12
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 12,
+ "ods": 25,
+ "diff": -13
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 4996.98,
+ "ods_sum": 10333.59,
+ "diff": -5336.610000000001
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5019,
+ "diff": -16
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4760,
+ "diff": -15
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4760,
+ "diff": -15
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 18,
+ "ods": 75,
+ "diff": -57
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 1174.0,
+ "ods_sum": 5448.0,
+ "diff": -4274.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 1174.0,
+ "ods_sum": 5338.76,
+ "diff": -4164.76
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11489,
+ "diff": -62
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 25,
+ "ods": 79,
+ "diff": -54
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 1972.0,
+ "ods_sum": 6102.0,
+ "diff": -4130.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17031,
+ "diff": -54
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 456,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 456,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 43,
+ "ods": 105,
+ "diff": -62
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 6852.0,
+ "ods_sum": 12985.0,
+ "diff": -6133.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19196
+ },
+ "generated_at": "2026-01-27T03:19:51.836973+08:00"
+ }
+ ],
+ "total_missing": 30,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T03:19:51.836997+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260119_222704.json b/etl_billiards/reports/data_integrity_window_20260119_222704.json
new file mode 100644
index 0000000..051b7f9
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260119_222704.json
@@ -0,0 +1,1980 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-17T19:23:56+08:00",
+ "end": "2026-01-20T00:23:56+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-17T19:23:56+08:00",
+ "end": "2026-01-20T00:23:56+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-17T19:23:56+08:00",
+ "end": "2026-01-20T00:23:56+08:00",
+ "cutoff": null,
+ "window_days": 2,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 136,
+ "records_with_pk": 136,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3058170108874053
+ }
+ ],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 286,
+ "records_with_pk": 286,
+ "missing": 67,
+ "missing_samples": [
+ {
+ "id": 3058182051252037
+ },
+ {
+ "id": 3058173240084357
+ },
+ {
+ "id": 3058171538753221
+ },
+ {
+ "id": 3058169110431429
+ },
+ {
+ "id": 3058167023896325
+ },
+ {
+ "id": 3058162035296133
+ },
+ {
+ "id": 3058161434216261
+ },
+ {
+ "id": 3058147379431301
+ },
+ {
+ "id": 3058146832598853
+ },
+ {
+ "id": 3058139319699333
+ },
+ {
+ "id": 3058135453108037
+ },
+ {
+ "id": 3058131059443589
+ },
+ {
+ "id": 3058123562878853
+ },
+ {
+ "id": 3058115682551685
+ },
+ {
+ "id": 3058114991687493
+ },
+ {
+ "id": 3058109980378949
+ },
+ {
+ "id": 3058109491381957
+ },
+ {
+ "id": 3058108377892741
+ },
+ {
+ "id": 3058107762394949
+ },
+ {
+ "id": 3058099553847045
+ },
+ {
+ "id": 3058086106400453
+ },
+ {
+ "id": 3058080098666245
+ },
+ {
+ "id": 3058077974349637
+ },
+ {
+ "id": 3058048453379909
+ },
+ {
+ "id": 3058048035342085
+ },
+ {
+ "id": 3058355401328453
+ },
+ {
+ "id": 3058353754277573
+ },
+ {
+ "id": 3058345646769925
+ },
+ {
+ "id": 3058337403520901
+ },
+ {
+ "id": 3058333255714629
+ },
+ {
+ "id": 3058333001533253
+ },
+ {
+ "id": 3058329773115205
+ },
+ {
+ "id": 3058328213751493
+ },
+ {
+ "id": 3058322441373573
+ },
+ {
+ "id": 3058318537869061
+ },
+ {
+ "id": 3058318188594949
+ },
+ {
+ "id": 3058314111092549
+ },
+ {
+ "id": 3058310941591365
+ },
+ {
+ "id": 3058307480274629
+ },
+ {
+ "id": 3058306308671301
+ },
+ {
+ "id": 3058305952237445
+ },
+ {
+ "id": 3058297604523909
+ },
+ {
+ "id": 3058295963961093
+ },
+ {
+ "id": 3058293400881029
+ },
+ {
+ "id": 3058293295007493
+ },
+ {
+ "id": 3058288670754694
+ },
+ {
+ "id": 3058288453257029
+ },
+ {
+ "id": 3058278030739269
+ },
+ {
+ "id": 3058265692653381
+ },
+ {
+ "id": 3058264531044229
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9901,
+ "records_with_pk": 9901,
+ "missing": 57,
+ "missing_samples": [
+ {
+ "id": 3058353772037829
+ },
+ {
+ "id": 3058345666463621
+ },
+ {
+ "id": 3058333274064773
+ },
+ {
+ "id": 3058333185312517
+ },
+ {
+ "id": 3058329851873157
+ },
+ {
+ "id": 3058328233346885
+ },
+ {
+ "id": 3058322463033093
+ },
+ {
+ "id": 3058318684915461
+ },
+ {
+ "id": 3058318297433989
+ },
+ {
+ "id": 3058314133325509
+ },
+ {
+ "id": 3058310958466949
+ },
+ {
+ "id": 3058307498067781
+ },
+ {
+ "id": 3058306326284165
+ },
+ {
+ "id": 3058297748064005
+ },
+ {
+ "id": 3058296864999237
+ },
+ {
+ "id": 3058293417723717
+ },
+ {
+ "id": 3058288686417669
+ },
+ {
+ "id": 3058288604628869
+ },
+ {
+ "id": 3058278080481157
+ },
+ {
+ "id": 3058265711249157
+ },
+ {
+ "id": 3058264548493125
+ },
+ {
+ "id": 3058263736223621
+ },
+ {
+ "id": 3058247691093829
+ },
+ {
+ "id": 3058243604842373
+ },
+ {
+ "id": 3058243526395781
+ },
+ {
+ "id": 3058243526363013
+ },
+ {
+ "id": 3058243526346629
+ },
+ {
+ "id": 3058236536833925
+ },
+ {
+ "id": 3058229193443141
+ },
+ {
+ "id": 3058229139408773
+ },
+ {
+ "id": 3058218392340165
+ },
+ {
+ "id": 3058215178815365
+ },
+ {
+ "id": 3058214301255493
+ },
+ {
+ "id": 3058214301288261
+ },
+ {
+ "id": 3058210811381445
+ },
+ {
+ "id": 3058207176312581
+ },
+ {
+ "id": 3058207121098629
+ },
+ {
+ "id": 3058201756452549
+ },
+ {
+ "id": 3058171555956549
+ },
+ {
+ "id": 3058167387637509
+ },
+ {
+ "id": 3058162054498053
+ },
+ {
+ "id": 3058161468622725
+ },
+ {
+ "id": 3058139340801797
+ },
+ {
+ "id": 3058135469508485
+ },
+ {
+ "id": 3058131094800133
+ },
+ {
+ "id": 3058131094783749
+ },
+ {
+ "id": 3058123580212997
+ },
+ {
+ "id": 3058116250175365
+ },
+ {
+ "id": 3058115009136389
+ },
+ {
+ "id": 3058110049371909
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 63,
+ "records_with_pk": 63,
+ "missing": 21,
+ "missing_samples": [
+ {
+ "id": 3058182126749509
+ },
+ {
+ "id": 3058131095406341
+ },
+ {
+ "id": 3058110050682629
+ },
+ {
+ "id": 3058110049814277
+ },
+ {
+ "id": 3058099614205701
+ },
+ {
+ "id": 3058048542803717
+ },
+ {
+ "id": 3058048070764293
+ },
+ {
+ "id": 3058333186787077
+ },
+ {
+ "id": 3058333186197253
+ },
+ {
+ "id": 3058318685308677
+ },
+ {
+ "id": 3058318298728325
+ },
+ {
+ "id": 3058318297909125
+ },
+ {
+ "id": 3058297748702981
+ },
+ {
+ "id": 3058243529328517
+ },
+ {
+ "id": 3058243528443781
+ },
+ {
+ "id": 3058243527624581
+ },
+ {
+ "id": 3058243527001989
+ },
+ {
+ "id": 3058236537292677
+ },
+ {
+ "id": 3058214302762821
+ },
+ {
+ "id": 3058214302304069
+ },
+ {
+ "id": 3058214301878085
+ }
+ ],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1,
+ "records_with_pk": 1,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11852,
+ "records_with_pk": 11852,
+ "missing": 67,
+ "missing_samples": [
+ {
+ "id": 3058355431311109
+ },
+ {
+ "id": 3058353769318085
+ },
+ {
+ "id": 3058345664038789
+ },
+ {
+ "id": 3058337430325061
+ },
+ {
+ "id": 3058333271803781
+ },
+ {
+ "id": 3058333181052677
+ },
+ {
+ "id": 3058329848792965
+ },
+ {
+ "id": 3058328231069509
+ },
+ {
+ "id": 3058322459707141
+ },
+ {
+ "id": 3058318682146565
+ },
+ {
+ "id": 3058318293813125
+ },
+ {
+ "id": 3058314130900677
+ },
+ {
+ "id": 3058310955992965
+ },
+ {
+ "id": 3058307495577413
+ },
+ {
+ "id": 3058306323810181
+ },
+ {
+ "id": 3058305998538501
+ },
+ {
+ "id": 3058297745426181
+ },
+ {
+ "id": 3058296862607173
+ },
+ {
+ "id": 3058293415331653
+ },
+ {
+ "id": 3058293324072645
+ },
+ {
+ "id": 3058288683943685
+ },
+ {
+ "id": 3058288602089349
+ },
+ {
+ "id": 3058278077695877
+ },
+ {
+ "id": 3058265709037317
+ },
+ {
+ "id": 3058264546182981
+ },
+ {
+ "id": 3058263734110085
+ },
+ {
+ "id": 3058254330955653
+ },
+ {
+ "id": 3058247688619845
+ },
+ {
+ "id": 3058243602564997
+ },
+ {
+ "id": 3058243522529157
+ },
+ {
+ "id": 3058237363455749
+ },
+ {
+ "id": 3058236533245829
+ },
+ {
+ "id": 3058229191182149
+ },
+ {
+ "id": 3058229136951173
+ },
+ {
+ "id": 3058220401379141
+ },
+ {
+ "id": 3058218389407429
+ },
+ {
+ "id": 3058215176144773
+ },
+ {
+ "id": 3058214294751046
+ },
+ {
+ "id": 3058210808940229
+ },
+ {
+ "id": 3058207173789445
+ },
+ {
+ "id": 3058207118559109
+ },
+ {
+ "id": 3058201754011333
+ },
+ {
+ "id": 3058182124226373
+ },
+ {
+ "id": 3058173286876997
+ },
+ {
+ "id": 3058171553449797
+ },
+ {
+ "id": 3058169137661829
+ },
+ {
+ "id": 3058167385442053
+ },
+ {
+ "id": 3058162050385669
+ },
+ {
+ "id": 3058161465935749
+ },
+ {
+ "id": 3058147404957445
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16473,
+ "records_with_pk": 16473,
+ "missing": 39,
+ "missing_samples": [
+ {
+ "id": 3058357269546821
+ },
+ {
+ "id": 3058340486399685
+ },
+ {
+ "id": 3058334753851077
+ },
+ {
+ "id": 3058315070801733
+ },
+ {
+ "id": 3058310101272261
+ },
+ {
+ "id": 3058307406661317
+ },
+ {
+ "id": 3058304732399365
+ },
+ {
+ "id": 3058294051030725
+ },
+ {
+ "id": 3058268992243525
+ },
+ {
+ "id": 3058254867122053
+ },
+ {
+ "id": 3058251820943045
+ },
+ {
+ "id": 3058248490174341
+ },
+ {
+ "id": 3058247410304837
+ },
+ {
+ "id": 3058244685153989
+ },
+ {
+ "id": 3058234190661381
+ },
+ {
+ "id": 3058229070808837
+ },
+ {
+ "id": 3058227741558469
+ },
+ {
+ "id": 3058213433755397
+ },
+ {
+ "id": 3058206743906181
+ },
+ {
+ "id": 3058205389883141
+ },
+ {
+ "id": 3058204746270405
+ },
+ {
+ "id": 3058203742455621
+ },
+ {
+ "id": 3058203649296133
+ },
+ {
+ "id": 3058202633766597
+ },
+ {
+ "id": 3058184008009541
+ },
+ {
+ "id": 3058170205570821
+ },
+ {
+ "id": 3058168235132805
+ },
+ {
+ "id": 3058159083030341
+ },
+ {
+ "id": 3058154363455301
+ },
+ {
+ "id": 3058151096371013
+ },
+ {
+ "id": 3058146679768837
+ },
+ {
+ "id": 3058146260977413
+ },
+ {
+ "id": 3058110979573445
+ },
+ {
+ "id": 3058097243064133
+ },
+ {
+ "id": 3058073669682885
+ },
+ {
+ "id": 3058055359563589
+ },
+ {
+ "id": 3058054921684805
+ },
+ {
+ "id": 3058053148886789
+ },
+ {
+ "id": 3058050554840901
+ }
+ ],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2462,
+ "records_with_pk": 2462,
+ "missing": 11,
+ "missing_samples": [
+ {
+ "id": 3058333181724421
+ },
+ {
+ "id": 3058318294419333
+ },
+ {
+ "id": 3058243010774853
+ },
+ {
+ "id": 3058243010529094
+ },
+ {
+ "id": 3058236533819269
+ },
+ {
+ "id": 3058218390030021
+ },
+ {
+ "id": 3058214295455557
+ },
+ {
+ "id": 3058182124734277
+ },
+ {
+ "id": 3058110047504133
+ },
+ {
+ "id": 3058099612026629
+ },
+ {
+ "id": 3058048539952901
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 5,
+ "records_with_pk": 5,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8267,
+ "records_with_pk": 8267,
+ "missing": 62,
+ "missing_samples": [
+ {
+ "id": 3058353772709573
+ },
+ {
+ "id": 3058345667741573
+ },
+ {
+ "id": 3058333274752901
+ },
+ {
+ "id": 3058329852659589
+ },
+ {
+ "id": 3058329852659590
+ },
+ {
+ "id": 3058328233854789
+ },
+ {
+ "id": 3058318686177029
+ },
+ {
+ "id": 3058314133898949
+ },
+ {
+ "id": 3058310959236997
+ },
+ {
+ "id": 3058307498706757
+ },
+ {
+ "id": 3058306326873989
+ },
+ {
+ "id": 3058296865638213
+ },
+ {
+ "id": 3058293418231621
+ },
+ {
+ "id": 3058288687056645
+ },
+ {
+ "id": 3058288605464453
+ },
+ {
+ "id": 3058288605480837
+ },
+ {
+ "id": 3058288605464454
+ },
+ {
+ "id": 3058288605464455
+ },
+ {
+ "id": 3058288605464456
+ },
+ {
+ "id": 3058278081152901
+ },
+ {
+ "id": 3058265711855365
+ },
+ {
+ "id": 3058264549656389
+ },
+ {
+ "id": 3058263736747909
+ },
+ {
+ "id": 3058247691962181
+ },
+ {
+ "id": 3058243605923717
+ },
+ {
+ "id": 3058229194262341
+ },
+ {
+ "id": 3058229140146053
+ },
+ {
+ "id": 3058215179405189
+ },
+ {
+ "id": 3058210812036805
+ },
+ {
+ "id": 3058207177033477
+ },
+ {
+ "id": 3058207121688453
+ },
+ {
+ "id": 3058201757140677
+ },
+ {
+ "id": 3058171556677445
+ },
+ {
+ "id": 3058171556693829
+ },
+ {
+ "id": 3058167388325637
+ },
+ {
+ "id": 3058167388325638
+ },
+ {
+ "id": 3058162055055109
+ },
+ {
+ "id": 3058161469245317
+ },
+ {
+ "id": 3058139341473541
+ },
+ {
+ "id": 3058139341473542
+ },
+ {
+ "id": 3058135470049157
+ },
+ {
+ "id": 3058123580983045
+ },
+ {
+ "id": 3058123580983046
+ },
+ {
+ "id": 3058116250814341
+ },
+ {
+ "id": 3058115009758981
+ },
+ {
+ "id": 3058109512632197
+ },
+ {
+ "id": 3058108394653445
+ },
+ {
+ "id": 3058107782285189
+ },
+ {
+ "id": 3058086123947845
+ },
+ {
+ "id": 3058080118032261
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 341,
+ "records_with_pk": 341,
+ "missing": 126,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3058173288646469
+ },
+ {
+ "sitegoodsstockid": 3058169139349381
+ },
+ {
+ "sitegoodsstockid": 3058153735833413
+ },
+ {
+ "sitegoodsstockid": 3058153653733061
+ },
+ {
+ "sitegoodsstockid": 3058152982710085
+ },
+ {
+ "sitegoodsstockid": 3058147406464773
+ },
+ {
+ "sitegoodsstockid": 3058146857027333
+ },
+ {
+ "sitegoodsstockid": 3058143716722565
+ },
+ {
+ "sitegoodsstockid": 3058136377722693
+ },
+ {
+ "sitegoodsstockid": 3058112244287301
+ },
+ {
+ "sitegoodsstockid": 3058110304143109
+ },
+ {
+ "sitegoodsstockid": 3058109840033541
+ },
+ {
+ "sitegoodsstockid": 3058090960586437
+ },
+ {
+ "sitegoodsstockid": 3058077998745477
+ },
+ {
+ "sitegoodsstockid": 3058064944367365
+ },
+ {
+ "sitegoodsstockid": 3058053009983173
+ },
+ {
+ "sitegoodsstockid": 3058053009491653
+ },
+ {
+ "sitegoodsstockid": 3058019621128069
+ },
+ {
+ "sitegoodsstockid": 3057970083939845
+ },
+ {
+ "sitegoodsstockid": 3057932420679557
+ },
+ {
+ "sitegoodsstockid": 3057932420237189
+ },
+ {
+ "sitegoodsstockid": 3057926094030661
+ },
+ {
+ "sitegoodsstockid": 3057925720311493
+ },
+ {
+ "sitegoodsstockid": 3057925720786629
+ },
+ {
+ "sitegoodsstockid": 3057925719836357
+ },
+ {
+ "sitegoodsstockid": 3057893627709189
+ },
+ {
+ "sitegoodsstockid": 3057843657230085
+ },
+ {
+ "sitegoodsstockid": 3057786863699781
+ },
+ {
+ "sitegoodsstockid": 3057735409518277
+ },
+ {
+ "sitegoodsstockid": 3057702194824965
+ },
+ {
+ "sitegoodsstockid": 3057689507858117
+ },
+ {
+ "sitegoodsstockid": 3057689507366597
+ },
+ {
+ "sitegoodsstockid": 3057552809871173
+ },
+ {
+ "sitegoodsstockid": 3057500130559749
+ },
+ {
+ "sitegoodsstockid": 3057464372889477
+ },
+ {
+ "sitegoodsstockid": 3057464372447109
+ },
+ {
+ "sitegoodsstockid": 3057449635743557
+ },
+ {
+ "sitegoodsstockid": 3057449150596869
+ },
+ {
+ "sitegoodsstockid": 3057449150105349
+ },
+ {
+ "sitegoodsstockid": 3057376085329669
+ },
+ {
+ "sitegoodsstockid": 3057370028885765
+ },
+ {
+ "sitegoodsstockid": 3057367488546629
+ },
+ {
+ "sitegoodsstockid": 3057334818457349
+ },
+ {
+ "sitegoodsstockid": 3057283158640389
+ },
+ {
+ "sitegoodsstockid": 3057283159115525
+ },
+ {
+ "sitegoodsstockid": 3057249985480517
+ },
+ {
+ "sitegoodsstockid": 3057238611035909
+ },
+ {
+ "sitegoodsstockid": 3057214401595269
+ },
+ {
+ "sitegoodsstockid": 3057193758230341
+ },
+ {
+ "sitegoodsstockid": 3057193758721861
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1676,
+ "records_with_pk": 1676,
+ "missing": 12,
+ "missing_samples": [
+ {
+ "id": 3058318300202885
+ },
+ {
+ "id": 3058297749505797
+ },
+ {
+ "id": 3058296865769285
+ },
+ {
+ "id": 3058243531163525
+ },
+ {
+ "id": 3058218393208517
+ },
+ {
+ "id": 3058214303958853
+ },
+ {
+ "id": 3058214303909701
+ },
+ {
+ "id": 3058110052189957
+ },
+ {
+ "id": 3058048543442693
+ },
+ {
+ "id": 3057979151484421
+ },
+ {
+ "id": 3057859470346117
+ },
+ {
+ "id": 3057795512338117
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 294,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 294,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 463,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T22:26:58.735784+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22514,
+ "ods": 22514,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22514,
+ "ods": 22514,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 196,
+ "ods": 196,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 5094.99,
+ "ods_sum": 5094.99,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 10380.83,
+ "ods_sum": 10380.83,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 24021.05,
+ "ods_sum": 24021.05,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 892.14,
+ "ods_sum": 892.14,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 9437.37,
+ "ods_sum": 9437.37,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17615,
+ "ods": 17615,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2710,
+ "ods": 2710,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 311771.56,
+ "ods_sum": 311771.56,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2710,
+ "ods": 2710,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 536840,
+ "ods": 17563,
+ "diff": 519277
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 658625.3,
+ "ods_sum": 21673.2,
+ "diff": 636952.1000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 46,
+ "ods": 46,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 19807.75,
+ "ods_sum": 19807.75,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4771,
+ "ods": 4771,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4592,
+ "ods": 4592,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4592,
+ "ods": 4592,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 152,
+ "ods": 152,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 10142.0,
+ "ods_sum": 10142.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 9832.83,
+ "ods_sum": 9832.83,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10861,
+ "ods": 10861,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 169,
+ "ods": 169,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 12018.0,
+ "ods_sum": 12018.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16434,
+ "ods": 16434,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 442,
+ "ods": 442,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 442,
+ "ods": 442,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 226,
+ "ods": 226,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 21838.0,
+ "ods_sum": 21838.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 43,
+ "ods": 43,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 519277
+ },
+ "generated_at": "2026-01-19T22:27:04.028446+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 463,
+ "total_errors": 0
+ },
+ "total_missing": 463,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T22:27:04.028467+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260119_233704.json b/etl_billiards/reports/data_integrity_window_20260119_233704.json
new file mode 100644
index 0000000..aba8ec2
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260119_233704.json
@@ -0,0 +1,1311 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-17T20:31:25+08:00",
+ "end": "2026-01-20T01:31:25+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-17T20:31:25+08:00",
+ "end": "2026-01-20T01:31:25+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-17T20:31:25+08:00",
+ "end": "2026-01-20T01:31:25+08:00",
+ "cutoff": null,
+ "window_days": 2,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 136,
+ "records_with_pk": 136,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 288,
+ "records_with_pk": 288,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9913,
+ "records_with_pk": 9913,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 65,
+ "records_with_pk": 65,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1,
+ "records_with_pk": 1,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11866,
+ "records_with_pk": 11866,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3058428623472325
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16477,
+ "records_with_pk": 16477,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2465,
+ "records_with_pk": 2465,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 6,
+ "records_with_pk": 6,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8275,
+ "records_with_pk": 8275,
+ "missing": 70,
+ "missing_samples": [
+ {
+ "id": 3058416406071045
+ },
+ {
+ "id": 3058405159372613
+ },
+ {
+ "id": 3058399523604293
+ },
+ {
+ "id": 3058374049761157
+ },
+ {
+ "id": 3058369719568261
+ },
+ {
+ "id": 3058366791796421
+ },
+ {
+ "id": 3058364256405381
+ },
+ {
+ "id": 3058364256405382
+ },
+ {
+ "id": 3058353772709573
+ },
+ {
+ "id": 3058345667741573
+ },
+ {
+ "id": 3058333274752901
+ },
+ {
+ "id": 3058329852659589
+ },
+ {
+ "id": 3058329852659590
+ },
+ {
+ "id": 3058328233854789
+ },
+ {
+ "id": 3058318686177029
+ },
+ {
+ "id": 3058314133898949
+ },
+ {
+ "id": 3058310959236997
+ },
+ {
+ "id": 3058307498706757
+ },
+ {
+ "id": 3058306326873989
+ },
+ {
+ "id": 3058296865638213
+ },
+ {
+ "id": 3058293418231621
+ },
+ {
+ "id": 3058288687056645
+ },
+ {
+ "id": 3058288605464453
+ },
+ {
+ "id": 3058288605480837
+ },
+ {
+ "id": 3058288605464454
+ },
+ {
+ "id": 3058288605464455
+ },
+ {
+ "id": 3058288605464456
+ },
+ {
+ "id": 3058278081152901
+ },
+ {
+ "id": 3058265711855365
+ },
+ {
+ "id": 3058264549656389
+ },
+ {
+ "id": 3058263736747909
+ },
+ {
+ "id": 3058247691962181
+ },
+ {
+ "id": 3058243605923717
+ },
+ {
+ "id": 3058229194262341
+ },
+ {
+ "id": 3058229140146053
+ },
+ {
+ "id": 3058215179405189
+ },
+ {
+ "id": 3058210812036805
+ },
+ {
+ "id": 3058207177033477
+ },
+ {
+ "id": 3058207121688453
+ },
+ {
+ "id": 3058201757140677
+ },
+ {
+ "id": 3058171556677445
+ },
+ {
+ "id": 3058171556693829
+ },
+ {
+ "id": 3058167388325637
+ },
+ {
+ "id": 3058167388325638
+ },
+ {
+ "id": 3058162055055109
+ },
+ {
+ "id": 3058161469245317
+ },
+ {
+ "id": 3058139341473541
+ },
+ {
+ "id": 3058139341473542
+ },
+ {
+ "id": 3058135470049157
+ },
+ {
+ "id": 3058123580983045
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 323,
+ "records_with_pk": 323,
+ "missing": 133,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3058248105920197
+ },
+ {
+ "sitegoodsstockid": 3058245559994117
+ },
+ {
+ "sitegoodsstockid": 3058245560600325
+ },
+ {
+ "sitegoodsstockid": 3058245414749893
+ },
+ {
+ "sitegoodsstockid": 3058245416519365
+ },
+ {
+ "sitegoodsstockid": 3058245415290565
+ },
+ {
+ "sitegoodsstockid": 3058245415880389
+ },
+ {
+ "sitegoodsstockid": 3058245414192837
+ },
+ {
+ "sitegoodsstockid": 3058237364979461
+ },
+ {
+ "sitegoodsstockid": 3058235144652549
+ },
+ {
+ "sitegoodsstockid": 3058232910006085
+ },
+ {
+ "sitegoodsstockid": 3058231257483141
+ },
+ {
+ "sitegoodsstockid": 3058229962933957
+ },
+ {
+ "sitegoodsstockid": 3058228258473733
+ },
+ {
+ "sitegoodsstockid": 3058220403083077
+ },
+ {
+ "sitegoodsstockid": 3058216641545926
+ },
+ {
+ "sitegoodsstockid": 3058216548861701
+ },
+ {
+ "sitegoodsstockid": 3058216042448645
+ },
+ {
+ "sitegoodsstockid": 3058215916619525
+ },
+ {
+ "sitegoodsstockid": 3058215917143813
+ },
+ {
+ "sitegoodsstockid": 3058215917700869
+ },
+ {
+ "sitegoodsstockid": 3058213697832709
+ },
+ {
+ "sitegoodsstockid": 3058213014423429
+ },
+ {
+ "sitegoodsstockid": 3058213014914949
+ },
+ {
+ "sitegoodsstockid": 3058208837617413
+ },
+ {
+ "sitegoodsstockid": 3058203817510597
+ },
+ {
+ "sitegoodsstockid": 3058201680774917
+ },
+ {
+ "sitegoodsstockid": 3058185142880133
+ },
+ {
+ "sitegoodsstockid": 3058185143371653
+ },
+ {
+ "sitegoodsstockid": 3058173288646469
+ },
+ {
+ "sitegoodsstockid": 3058169139349381
+ },
+ {
+ "sitegoodsstockid": 3058153735833413
+ },
+ {
+ "sitegoodsstockid": 3058153653733061
+ },
+ {
+ "sitegoodsstockid": 3058152982710085
+ },
+ {
+ "sitegoodsstockid": 3058147406464773
+ },
+ {
+ "sitegoodsstockid": 3058146857027333
+ },
+ {
+ "sitegoodsstockid": 3058143716722565
+ },
+ {
+ "sitegoodsstockid": 3058136377722693
+ },
+ {
+ "sitegoodsstockid": 3058112244287301
+ },
+ {
+ "sitegoodsstockid": 3058110304143109
+ },
+ {
+ "sitegoodsstockid": 3058109840033541
+ },
+ {
+ "sitegoodsstockid": 3058090960586437
+ },
+ {
+ "sitegoodsstockid": 3058077998745477
+ },
+ {
+ "sitegoodsstockid": 3058064944367365
+ },
+ {
+ "sitegoodsstockid": 3058053009983173
+ },
+ {
+ "sitegoodsstockid": 3058053009491653
+ },
+ {
+ "sitegoodsstockid": 3058019621128069
+ },
+ {
+ "sitegoodsstockid": 3057970083939845
+ },
+ {
+ "sitegoodsstockid": 3057932420679557
+ },
+ {
+ "sitegoodsstockid": 3057932420237189
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1676,
+ "records_with_pk": 1676,
+ "missing": 12,
+ "missing_samples": [
+ {
+ "id": 3058318300202885
+ },
+ {
+ "id": 3058297749505797
+ },
+ {
+ "id": 3058296865769285
+ },
+ {
+ "id": 3058243531163525
+ },
+ {
+ "id": 3058218393208517
+ },
+ {
+ "id": 3058214303958853
+ },
+ {
+ "id": 3058214303909701
+ },
+ {
+ "id": 3058110052189957
+ },
+ {
+ "id": 3058048543442693
+ },
+ {
+ "id": 3057979151484421
+ },
+ {
+ "id": 3057859470346117
+ },
+ {
+ "id": 3057795512338117
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 298,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 298,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 216,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T23:36:58.642196+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22594,
+ "ods": 22594,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22594,
+ "ods": 22594,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 257,
+ "ods": 257,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 6374.1,
+ "ods_sum": 6374.1,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 14029.53,
+ "ods_sum": 14029.53,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 31168.25,
+ "ods_sum": 31168.25,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 881.16,
+ "ods_sum": 881.16,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 11645.78,
+ "ods_sum": 11645.78,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17684,
+ "ods": 17684,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2710,
+ "ods": 2710,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 311771.56,
+ "ods_sum": 311771.56,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2710,
+ "ods": 2710,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 554403,
+ "ods": 17563,
+ "diff": 536840
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 680298.5,
+ "ods_sum": 21673.2,
+ "diff": 658625.3
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 26339.1,
+ "ods_sum": 26339.1,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4794,
+ "ods": 4794,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4606,
+ "ods": 4606,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4606,
+ "ods": 4606,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 144,
+ "ods": 144,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 9748.0,
+ "ods_sum": 9748.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 9438.83,
+ "ods_sum": 9438.83,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10861,
+ "ods": 10861,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 201,
+ "ods": 201,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 13526.0,
+ "ods_sum": 13526.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16477,
+ "ods": 16477,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 443,
+ "ods": 443,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 443,
+ "ods": 443,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 296,
+ "ods": 296,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 32690.0,
+ "ods_sum": 32690.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 43,
+ "ods": 43,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 536840
+ },
+ "generated_at": "2026-01-19T23:37:04.440573+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 216,
+ "total_errors": 0
+ },
+ "total_missing": 216,
+ "total_errors": 0,
+ "generated_at": "2026-01-19T23:37:04.440595+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260120_003547.json b/etl_billiards/reports/data_integrity_window_20260120_003547.json
new file mode 100644
index 0000000..51ed7d9
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260120_003547.json
@@ -0,0 +1,1096 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-09T21:21:28+08:00",
+ "end": "2026-01-20T02:21:28+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-09T21:21:28+08:00",
+ "end": "2026-01-20T02:21:28+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-09T21:21:28+08:00",
+ "end": "2026-01-20T02:21:28+08:00",
+ "cutoff": null,
+ "window_days": 10,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 136,
+ "records_with_pk": 136,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1245,
+ "records_with_pk": 1245,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3058483012732741
+ },
+ {
+ "id": 3058482606163717
+ }
+ ],
+ "pages": 8,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9922,
+ "records_with_pk": 9922,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3058483098863365
+ },
+ {
+ "id": 3058482682840837
+ },
+ {
+ "id": 3058482682824453
+ },
+ {
+ "id": 3058482682857221
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 292,
+ "records_with_pk": 292,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3058482685036293
+ },
+ {
+ "id": 3058482684462853
+ },
+ {
+ "id": 3058482683823877
+ },
+ {
+ "id": 3058482683381509
+ }
+ ],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11877,
+ "records_with_pk": 11877,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3058485277132549
+ },
+ {
+ "id": 3058483096176389
+ },
+ {
+ "id": 3058482678597381
+ },
+ {
+ "id": 3058475842094789
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16480,
+ "records_with_pk": 16480,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2467,
+ "records_with_pk": 2467,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3058483096749829
+ },
+ {
+ "id": 3058482679121669
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 27,
+ "records_with_pk": 27,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8278,
+ "records_with_pk": 8278,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3058475845404357
+ },
+ {
+ "id": 3058466194228933
+ },
+ {
+ "id": 3058437829232389
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1727,
+ "records_with_pk": 1727,
+ "missing": 17,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3058485278623493
+ },
+ {
+ "sitegoodsstockid": 3058465513735941
+ },
+ {
+ "sitegoodsstockid": 3058457516246853
+ },
+ {
+ "sitegoodsstockid": 3058454206695237
+ },
+ {
+ "sitegoodsstockid": 3058454206252869
+ },
+ {
+ "sitegoodsstockid": 3058454007760709
+ },
+ {
+ "sitegoodsstockid": 3058452731971269
+ },
+ {
+ "sitegoodsstockid": 3058452593346245
+ },
+ {
+ "sitegoodsstockid": 3058449180509893
+ },
+ {
+ "sitegoodsstockid": 3058446892353413
+ },
+ {
+ "sitegoodsstockid": 3058446799439621
+ },
+ {
+ "sitegoodsstockid": 3058440464910085
+ },
+ {
+ "sitegoodsstockid": 3058438043469573
+ },
+ {
+ "sitegoodsstockid": 3058433085507461
+ },
+ {
+ "sitegoodsstockid": 3058432235865861
+ },
+ {
+ "sitegoodsstockid": 3058429165078213
+ },
+ {
+ "sitegoodsstockid": 3058428628174533
+ }
+ ],
+ "pages": 10,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1682,
+ "records_with_pk": 1682,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3058483099567877
+ },
+ {
+ "id": 3058482686527237
+ },
+ {
+ "id": 3058482686478085
+ },
+ {
+ "id": 3058455038052101
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 1291,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 8,
+ "skipped_missing_pk": 1291,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 40,
+ "total_errors": 0,
+ "generated_at": "2026-01-20T00:35:42.277919+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22603,
+ "ods": 22603,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22603,
+ "ods": 22603,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1094,
+ "ods": 1094,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 25642.61,
+ "ods_sum": 25642.61,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 57942.9,
+ "ods_sum": 57942.9,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 132700.58,
+ "ods_sum": 132700.58,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 8020.96,
+ "ods_sum": 8020.96,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 52705.81,
+ "ods_sum": 52705.81,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17689,
+ "ods": 17689,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2722,
+ "ods": 2722,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 314293.85,
+ "ods_sum": 314293.85,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2722,
+ "ods": 2722,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 571966,
+ "ods": 17563,
+ "diff": 554403
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 701971.7,
+ "ods_sum": 21673.2,
+ "diff": 680298.5
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 292,
+ "ods": 292,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 190.72,
+ "ods_sum": 190.72,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 91164.82,
+ "ods_sum": 91164.82,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4795,
+ "ods": 4795,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4606,
+ "ods": 4606,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4606,
+ "ods": 4606,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 922,
+ "ods": 922,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 60018.0,
+ "ods_sum": 60018.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 57798.9,
+ "ods_sum": 57798.9,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10931,
+ "ods": 10931,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 918,
+ "ods": 918,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 59546.0,
+ "ods_sum": 59546.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16480,
+ "ods": 16480,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 443,
+ "ods": 443,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 443,
+ "ods": 443,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1286,
+ "ods": 1286,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 148923.0,
+ "ods_sum": 148923.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -43.0,
+ "ods_sum": -43.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 43,
+ "ods": 43,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 554403
+ },
+ "generated_at": "2026-01-20T00:35:47.490653+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 40,
+ "total_errors": 0
+ },
+ "total_missing": 40,
+ "total_errors": 0,
+ "generated_at": "2026-01-20T00:35:47.490693+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260120_023005.json b/etl_billiards/reports/data_integrity_window_20260120_023005.json
new file mode 100644
index 0000000..6c1f4f1
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260120_023005.json
@@ -0,0 +1,1041 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-09T23:24:45+08:00",
+ "end": "2026-01-20T04:24:45+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-09T23:24:45+08:00",
+ "end": "2026-01-20T04:24:45+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-09T23:24:45+08:00",
+ "end": "2026-01-20T04:24:45+08:00",
+ "cutoff": null,
+ "window_days": 10,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 136,
+ "records_with_pk": 136,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1238,
+ "records_with_pk": 1238,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 8,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 301,
+ "records_with_pk": 301,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11894,
+ "records_with_pk": 11894,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3058596368844613
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16480,
+ "records_with_pk": 16480,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2474,
+ "records_with_pk": 2474,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 28,
+ "records_with_pk": 28,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8282,
+ "records_with_pk": 8282,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3058553635129221
+ },
+ {
+ "id": 3058510524663493
+ },
+ {
+ "id": 3058510230161157
+ },
+ {
+ "id": 3058504497694469
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1707,
+ "records_with_pk": 1707,
+ "missing": 10,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3058582867199685
+ },
+ {
+ "sitegoodsstockid": 3058560300435269
+ },
+ {
+ "sitegoodsstockid": 3058535821920133
+ },
+ {
+ "sitegoodsstockid": 3058528979666693
+ },
+ {
+ "sitegoodsstockid": 3058528863651717
+ },
+ {
+ "sitegoodsstockid": 3058528765888325
+ },
+ {
+ "sitegoodsstockid": 3058528636077893
+ },
+ {
+ "sitegoodsstockid": 3058507817436933
+ },
+ {
+ "sitegoodsstockid": 3058500774905605
+ },
+ {
+ "sitegoodsstockid": 3058485278623493
+ }
+ ],
+ "pages": 10,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1690,
+ "records_with_pk": 1690,
+ "missing": 8,
+ "missing_samples": [
+ {
+ "id": 3058536031192773
+ },
+ {
+ "id": 3058529163675333
+ },
+ {
+ "id": 3058513988355781
+ },
+ {
+ "id": 3058513157326661
+ },
+ {
+ "id": 3058509258360645
+ },
+ {
+ "id": 3058509258409797
+ },
+ {
+ "id": 3058496802391941
+ },
+ {
+ "id": 3058496802359173
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 1283,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 8,
+ "skipped_missing_pk": 1283,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 23,
+ "total_errors": 0,
+ "generated_at": "2026-01-20T02:30:00.503232+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22622,
+ "ods": 22622,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22622,
+ "ods": 22622,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1095,
+ "ods": 1095,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 26529.01,
+ "ods_sum": 26529.01,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 57230.5,
+ "ods_sum": 57230.5,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 134105.34,
+ "ods_sum": 134105.34,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 7778.22,
+ "ods_sum": 7778.22,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 53936.57,
+ "ods_sum": 53936.57,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17711,
+ "ods": 17711,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2728,
+ "ods": 2728,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 314830.9,
+ "ods_sum": 314830.9,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2728,
+ "ods": 2728,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 589529,
+ "ods": 17563,
+ "diff": 571966
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 723644.9,
+ "ods_sum": 21673.2,
+ "diff": 701971.7000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 305,
+ "ods": 305,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 190.72,
+ "ods_sum": 190.72,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 93900.01,
+ "ods_sum": 93900.01,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4811,
+ "ods": 4811,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4615,
+ "ods": 4615,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4615,
+ "ods": 4615,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 910,
+ "ods": 910,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 59250.0,
+ "ods_sum": 59250.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 57038.5,
+ "ods_sum": 57038.5,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10934,
+ "ods": 10934,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 908,
+ "ods": 908,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 58814.0,
+ "ods_sum": 58814.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16480,
+ "ods": 16480,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 444,
+ "ods": 444,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 444,
+ "ods": 444,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1282,
+ "ods": 1282,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 153614.0,
+ "ods_sum": 153614.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -43.0,
+ "ods_sum": -43.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 43,
+ "ods": 43,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 571966
+ },
+ "generated_at": "2026-01-20T02:30:05.600935+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 23,
+ "total_errors": 0
+ },
+ "total_missing": 23,
+ "total_errors": 0,
+ "generated_at": "2026-01-20T02:30:05.600959+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260120_034306.json b/etl_billiards/reports/data_integrity_window_20260120_034306.json
new file mode 100644
index 0000000..27b3c2a
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260120_034306.json
@@ -0,0 +1,972 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-10T00:37:58+08:00",
+ "end": "2026-01-20T05:37:58+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-10T00:37:58+08:00",
+ "end": "2026-01-20T05:37:58+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-10T00:37:58+08:00",
+ "end": "2026-01-20T05:37:58+08:00",
+ "cutoff": null,
+ "window_days": 10,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 136,
+ "records_with_pk": 136,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1234,
+ "records_with_pk": 1234,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 8,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9940,
+ "records_with_pk": 9940,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 299,
+ "records_with_pk": 299,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11894,
+ "records_with_pk": 11894,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16480,
+ "records_with_pk": 16480,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2474,
+ "records_with_pk": 2474,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 28,
+ "records_with_pk": 28,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8282,
+ "records_with_pk": 8282,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1689,
+ "records_with_pk": 1689,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3058615392274245
+ }
+ ],
+ "pages": 10,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1690,
+ "records_with_pk": 1690,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 1279,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 8,
+ "skipped_missing_pk": 1279,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1,
+ "total_errors": 0,
+ "generated_at": "2026-01-20T03:43:01.888371+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22622,
+ "ods": 22622,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22622,
+ "ods": 22622,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 1091,
+ "ods": 1091,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 26391.76,
+ "ods_sum": 26391.76,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 56895.59,
+ "ods_sum": 56895.59,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 133626.16,
+ "ods_sum": 133626.16,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 7778.22,
+ "ods_sum": 7778.22,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 53929.55,
+ "ods_sum": 53929.55,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17711,
+ "ods": 17711,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 315562.38,
+ "ods_sum": 315562.38,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 607092,
+ "ods": 17563,
+ "diff": 589529
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 745318.1,
+ "ods_sum": 21673.2,
+ "diff": 723644.9
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 303,
+ "ods": 303,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 190.72,
+ "ods_sum": 190.72,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 93547.06,
+ "ods_sum": 93547.06,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4811,
+ "ods": 4811,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4615,
+ "ods": 4615,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4615,
+ "ods": 4615,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 910,
+ "ods": 910,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 59094.0,
+ "ods_sum": 59094.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 56895.59,
+ "ods_sum": 56895.59,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10938,
+ "ods": 10938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 905,
+ "ods": 905,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 58612.0,
+ "ods_sum": 58612.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16480,
+ "ods": 16480,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 444,
+ "ods": 444,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 444,
+ "ods": 444,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1279,
+ "ods": 1279,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 153388.0,
+ "ods_sum": 153388.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 3,
+ "ods": 3,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -43.0,
+ "ods_sum": -43.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 43,
+ "ods": 43,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 589529
+ },
+ "generated_at": "2026-01-20T03:43:06.774768+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 1,
+ "total_errors": 0
+ },
+ "total_missing": 1,
+ "total_errors": 0,
+ "generated_at": "2026-01-20T03:43:06.774790+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260120_162840.json b/etl_billiards/reports/data_integrity_window_20260120_162840.json
new file mode 100644
index 0000000..e6ac523
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260120_162840.json
@@ -0,0 +1,1048 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-19T13:22:34+08:00",
+ "end": "2026-01-20T18:22:34+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-19T13:22:34+08:00",
+ "end": "2026-01-20T18:22:34+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-19T13:22:34+08:00",
+ "end": "2026-01-20T18:22:34+08:00",
+ "cutoff": null,
+ "window_days": 1,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 136,
+ "records_with_pk": 136,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 135,
+ "records_with_pk": 135,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9838,
+ "records_with_pk": 9838,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 46,
+ "records_with_pk": 46,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11759,
+ "records_with_pk": 11759,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16495,
+ "records_with_pk": 16495,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 83,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 554,
+ "records_with_pk": 554,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 943,
+ "records_with_pk": 943,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2461,
+ "records_with_pk": 2461,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3,
+ "records_with_pk": 3,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8175,
+ "records_with_pk": 8175,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3059411450791813
+ },
+ {
+ "id": 3059348421445317
+ },
+ {
+ "id": 3059348361512709
+ },
+ {
+ "id": 3059281038296901
+ },
+ {
+ "id": 3059280986539717
+ },
+ {
+ "id": 3059280930342662
+ },
+ {
+ "id": 3059280930342661
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 135,
+ "records_with_pk": 135,
+ "missing": 19,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3059220582418181
+ },
+ {
+ "sitegoodsstockid": 3058856419280773
+ },
+ {
+ "sitegoodsstockid": 3058802400266053
+ },
+ {
+ "sitegoodsstockid": 3058778158368453
+ },
+ {
+ "sitegoodsstockid": 3058744894687045
+ },
+ {
+ "sitegoodsstockid": 3058744895145797
+ },
+ {
+ "sitegoodsstockid": 3058744894195525
+ },
+ {
+ "sitegoodsstockid": 3058698424371077
+ },
+ {
+ "sitegoodsstockid": 3058698424862597
+ },
+ {
+ "sitegoodsstockid": 3058686747543365
+ },
+ {
+ "sitegoodsstockid": 3058686747395909
+ },
+ {
+ "sitegoodsstockid": 3058680780457861
+ },
+ {
+ "sitegoodsstockid": 3059380517717765
+ },
+ {
+ "sitegoodsstockid": 3059380517275397
+ },
+ {
+ "sitegoodsstockid": 3059380516833029
+ },
+ {
+ "sitegoodsstockid": 3059380516374277
+ },
+ {
+ "sitegoodsstockid": 3059368663238341
+ },
+ {
+ "sitegoodsstockid": 3059330587133829
+ },
+ {
+ "sitegoodsstockid": 3059324970223493
+ }
+ ],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1685,
+ "records_with_pk": 1685,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 138,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 138,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 26,
+ "total_errors": 0,
+ "generated_at": "2026-01-20T16:28:33.150957+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22636,
+ "ods": 22636,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22636,
+ "ods": 22636,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 117,
+ "ods": 117,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 2966.82,
+ "ods_sum": 2966.82,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 5358.7,
+ "ods_sum": 5358.7,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 14259.68,
+ "ods_sum": 14259.68,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 251.56,
+ "ods_sum": 251.56,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 6185.72,
+ "ods_sum": 6185.72,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17721,
+ "ods": 17721,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 315562.38,
+ "ods_sum": 315562.38,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 624655,
+ "ods": 17563,
+ "diff": 607092
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "discount_money",
+ "dwd_sum": 766991.3,
+ "ods_sum": 21673.2,
+ "diff": 745318.1000000001
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 46,
+ "ods": 46,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 14396.05,
+ "ods_sum": 14396.05,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4814,
+ "ods": 4814,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 92,
+ "ods": 92,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4620,
+ "ods": 4620,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4620,
+ "ods": 4620,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 77,
+ "ods": 77,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 5290.0,
+ "ods_sum": 5290.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 4926.7,
+ "ods_sum": 4926.7,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10938,
+ "ods": 10938,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 90,
+ "ods": 90,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 6156.0,
+ "ods_sum": 6156.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16495,
+ "ods": 16495,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 445,
+ "ods": 445,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 445,
+ "ods": 445,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 138,
+ "ods": 138,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 19975.0,
+ "ods_sum": 19975.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 43,
+ "ods": 43,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 607092
+ },
+ "generated_at": "2026-01-20T16:28:40.403997+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 26,
+ "total_errors": 0
+ },
+ "total_missing": 26,
+ "total_errors": 0,
+ "generated_at": "2026-01-20T16:28:40.404020+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260122_235540.json b/etl_billiards/reports/data_integrity_window_20260122_235540.json
new file mode 100644
index 0000000..590bd1a
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260122_235540.json
@@ -0,0 +1,1412 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-17T20:49:49+08:00",
+ "end": "2026-01-23T01:49:49+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-17T20:49:49+08:00",
+ "end": "2026-01-23T01:49:49+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-17T20:49:49+08:00",
+ "end": "2026-01-23T01:49:49+08:00",
+ "cutoff": null,
+ "window_days": 5,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 136,
+ "records_with_pk": 136,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 622,
+ "records_with_pk": 622,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3062692637429381
+ }
+ ],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9951,
+ "records_with_pk": 9951,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3062692655173061
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 154,
+ "records_with_pk": 154,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 6,
+ "records_with_pk": 6,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11837,
+ "records_with_pk": 11837,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3062692652993989
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 37,
+ "records_with_pk": 37,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16707,
+ "records_with_pk": 16707,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 84,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 555,
+ "records_with_pk": 555,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 944,
+ "records_with_pk": 944,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16,
+ "records_with_pk": 16,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8239,
+ "records_with_pk": 8239,
+ "missing": 212,
+ "missing_samples": [
+ {
+ "id": 3062692656025029
+ },
+ {
+ "id": 3062674787831365
+ },
+ {
+ "id": 3062664923729477
+ },
+ {
+ "id": 3062652072480197
+ },
+ {
+ "id": 3062652072480198
+ },
+ {
+ "id": 3062632657374661
+ },
+ {
+ "id": 3062618836602437
+ },
+ {
+ "id": 3062611506695749
+ },
+ {
+ "id": 3062611506712133
+ },
+ {
+ "id": 3062602723872325
+ },
+ {
+ "id": 3062602664808005
+ },
+ {
+ "id": 3062599133335045
+ },
+ {
+ "id": 3062598651956869
+ },
+ {
+ "id": 3062597974085253
+ },
+ {
+ "id": 3062597325983237
+ },
+ {
+ "id": 3062591465049733
+ },
+ {
+ "id": 3062574558383685
+ },
+ {
+ "id": 3062572271553989
+ },
+ {
+ "id": 3062555998293637
+ },
+ {
+ "id": 3062552371498501
+ },
+ {
+ "id": 3062552314416773
+ },
+ {
+ "id": 3062542602030597
+ },
+ {
+ "id": 3062536547929733
+ },
+ {
+ "id": 3062530887110213
+ },
+ {
+ "id": 3062523678543493
+ },
+ {
+ "id": 3062523627048389
+ },
+ {
+ "id": 3062523627048390
+ },
+ {
+ "id": 3062523627048391
+ },
+ {
+ "id": 3062513470492229
+ },
+ {
+ "id": 3062513418931653
+ },
+ {
+ "id": 3062512330182213
+ },
+ {
+ "id": 3062507931880965
+ },
+ {
+ "id": 3062479559544325
+ },
+ {
+ "id": 3062476447518213
+ },
+ {
+ "id": 3062462698589701
+ },
+ {
+ "id": 3062449941220997
+ },
+ {
+ "id": 3062406698290821
+ },
+ {
+ "id": 3062405758471749
+ },
+ {
+ "id": 3062405758471750
+ },
+ {
+ "id": 3062395024903749
+ },
+ {
+ "id": 3062395024903750
+ },
+ {
+ "id": 3062390218837573
+ },
+ {
+ "id": 3062386556718533
+ },
+ {
+ "id": 3062381028396613
+ },
+ {
+ "id": 3062381028396614
+ },
+ {
+ "id": 3062368420204165
+ },
+ {
+ "id": 3062351233207813
+ },
+ {
+ "id": 3062335732649477
+ },
+ {
+ "id": 3062332036009605
+ },
+ {
+ "id": 3062332036009606
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 827,
+ "records_with_pk": 827,
+ "missing": 465,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3062510192938437
+ },
+ {
+ "sitegoodsstockid": 3062497709723141
+ },
+ {
+ "sitegoodsstockid": 3062495030250949
+ },
+ {
+ "sitegoodsstockid": 3062493529886149
+ },
+ {
+ "sitegoodsstockid": 3062492534705733
+ },
+ {
+ "sitegoodsstockid": 3062491449740741
+ },
+ {
+ "sitegoodsstockid": 3062491217989189
+ },
+ {
+ "sitegoodsstockid": 3062487503277573
+ },
+ {
+ "sitegoodsstockid": 3062479336951365
+ },
+ {
+ "sitegoodsstockid": 3062478763052549
+ },
+ {
+ "sitegoodsstockid": 3062478394265029
+ },
+ {
+ "sitegoodsstockid": 3062478078725637
+ },
+ {
+ "sitegoodsstockid": 3062468258188741
+ },
+ {
+ "sitegoodsstockid": 3062467463220741
+ },
+ {
+ "sitegoodsstockid": 3062461794897541
+ },
+ {
+ "sitegoodsstockid": 3062461795356293
+ },
+ {
+ "sitegoodsstockid": 3062449881189957
+ },
+ {
+ "sitegoodsstockid": 3062440914800197
+ },
+ {
+ "sitegoodsstockid": 3062440245350021
+ },
+ {
+ "sitegoodsstockid": 3062438795087365
+ },
+ {
+ "sitegoodsstockid": 3062437364174277
+ },
+ {
+ "sitegoodsstockid": 3062437363682757
+ },
+ {
+ "sitegoodsstockid": 3062436923870789
+ },
+ {
+ "sitegoodsstockid": 3062436924345925
+ },
+ {
+ "sitegoodsstockid": 3062414559350405
+ },
+ {
+ "sitegoodsstockid": 3062408446824005
+ },
+ {
+ "sitegoodsstockid": 3062406362369669
+ },
+ {
+ "sitegoodsstockid": 3062406361796229
+ },
+ {
+ "sitegoodsstockid": 3062405858823813
+ },
+ {
+ "sitegoodsstockid": 3062404478406085
+ },
+ {
+ "sitegoodsstockid": 3062402462993733
+ },
+ {
+ "sitegoodsstockid": 3062402462944581
+ },
+ {
+ "sitegoodsstockid": 3062378673589830
+ },
+ {
+ "sitegoodsstockid": 3062378457992773
+ },
+ {
+ "sitegoodsstockid": 3062378458975813
+ },
+ {
+ "sitegoodsstockid": 3062378455584325
+ },
+ {
+ "sitegoodsstockid": 3062378456043077
+ },
+ {
+ "sitegoodsstockid": 3062378456501829
+ },
+ {
+ "sitegoodsstockid": 3062378458467909
+ },
+ {
+ "sitegoodsstockid": 3062378456993349
+ },
+ {
+ "sitegoodsstockid": 3062378457517637
+ },
+ {
+ "sitegoodsstockid": 3062377537408453
+ },
+ {
+ "sitegoodsstockid": 3062377538407877
+ },
+ {
+ "sitegoodsstockid": 3062377538883013
+ },
+ {
+ "sitegoodsstockid": 3062377537916357
+ },
+ {
+ "sitegoodsstockid": 3062377533279685
+ },
+ {
+ "sitegoodsstockid": 3062377535376837
+ },
+ {
+ "sitegoodsstockid": 3062377536884165
+ },
+ {
+ "sitegoodsstockid": 3062377531182533
+ },
+ {
+ "sitegoodsstockid": 3062377531706821
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1706,
+ "records_with_pk": 1706,
+ "missing": 43,
+ "missing_samples": [
+ {
+ "id": 3062647002975685
+ },
+ {
+ "id": 3062626332675717
+ },
+ {
+ "id": 3062602558705221
+ },
+ {
+ "id": 3062466859535813
+ },
+ {
+ "id": 3062459259276869
+ },
+ {
+ "id": 3062367290527301
+ },
+ {
+ "id": 3062166829108805
+ },
+ {
+ "id": 3061791040327301
+ },
+ {
+ "id": 3061789721038469
+ },
+ {
+ "id": 3061771967483461
+ },
+ {
+ "id": 3061771967434309
+ },
+ {
+ "id": 3061740151590405
+ },
+ {
+ "id": 3061429638532613
+ },
+ {
+ "id": 3061429638499845
+ },
+ {
+ "id": 3061293033131525
+ },
+ {
+ "id": 3061293033082373
+ },
+ {
+ "id": 3061289629748805
+ },
+ {
+ "id": 3061266851810757
+ },
+ {
+ "id": 3061242697977349
+ },
+ {
+ "id": 3061241140039301
+ },
+ {
+ "id": 3061167280197189
+ },
+ {
+ "id": 3061069811256965
+ },
+ {
+ "id": 3061068943494789
+ },
+ {
+ "id": 3061068785127045
+ },
+ {
+ "id": 3060991466933893
+ },
+ {
+ "id": 3060990460775877
+ },
+ {
+ "id": 3060942519356869
+ },
+ {
+ "id": 3060695893296901
+ },
+ {
+ "id": 3060106497968965
+ },
+ {
+ "id": 3060091174046533
+ },
+ {
+ "id": 3060087559310149
+ },
+ {
+ "id": 3060087559277381
+ },
+ {
+ "id": 3060009548712965
+ },
+ {
+ "id": 3060006939020101
+ },
+ {
+ "id": 3059973952031749
+ },
+ {
+ "id": 3059966571449157
+ },
+ {
+ "id": 3059928272456517
+ },
+ {
+ "id": 3059879159171909
+ },
+ {
+ "id": 3059846913362949
+ },
+ {
+ "id": 3059762875698245
+ },
+ {
+ "id": 3059762000890693
+ },
+ {
+ "id": 3059699170266053
+ },
+ {
+ "id": 3059485872359109
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 643,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 643,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 723,
+ "total_errors": 0,
+ "generated_at": "2026-01-22T23:55:35.255726+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22929,
+ "ods": 22929,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22929,
+ "ods": 22929,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 563,
+ "ods": 563,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 15302.94,
+ "ods_sum": 15302.94,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 28317.38,
+ "ods_sum": 28317.38,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 77583.17,
+ "ods_sum": 77583.17,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 1801.23,
+ "ods_sum": 1801.23,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 33923.94,
+ "ods_sum": 33923.94,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17991,
+ "ods": 17991,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 315562.38,
+ "ods_sum": 315562.38,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2736,
+ "ods": 2736,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 89,
+ "ods": 158,
+ "diff": -69
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 191.21,
+ "diff": -191.21
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 33071.84,
+ "ods_sum": 58101.87,
+ "diff": -25030.030000000006
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4883,
+ "ods": 4883,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 97,
+ "ods": 97,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 97,
+ "ods": 97,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4677,
+ "ods": 4677,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4677,
+ "ods": 4677,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 227,
+ "ods": 227,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 15374.0,
+ "ods_sum": 15374.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 14729.3,
+ "ods_sum": 14729.3,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 10945,
+ "ods": 10945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7353.59,
+ "ods_sum": 7353.59,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 425,
+ "ods": 425,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 28900.0,
+ "ods_sum": 28900.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16707,
+ "ods": 16707,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 453,
+ "ods": 453,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 453,
+ "ods": 453,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 642,
+ "ods": 642,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 103410.0,
+ "ods_sum": 103410.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -2.0,
+ "ods_sum": -2.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 44,
+ "ods": 44,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -69
+ },
+ "generated_at": "2026-01-22T23:55:40.938507+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 723,
+ "total_errors": 0
+ },
+ "total_missing": 723,
+ "total_errors": 0,
+ "generated_at": "2026-01-22T23:55:40.938532+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260124_221448.json b/etl_billiards/reports/data_integrity_window_20260124_221448.json
new file mode 100644
index 0000000..73bf945
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260124_221448.json
@@ -0,0 +1,968 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-19T19:14:15+08:00",
+ "end": "2026-01-25T00:14:15+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-19T19:14:15+08:00",
+ "end": "2026-01-25T00:14:15+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-19T19:14:15+08:00",
+ "end": "2026-01-25T00:14:15+08:00",
+ "cutoff": null,
+ "window_days": 5,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/PersonnelManagement/SearchAssistantInfo"
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetAllOrderSettleList"
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetSiteTableOrderDetails"
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/AssistantPerformance/GetOrderAssistantDetails"
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/AssistantPerformance/GetAbolitionAssistant"
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoods/GetGoodsSalesList"
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/PayLog/GetPayLogListPage"
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Order/GetRefundPayLogList"
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Promotion/GetOfflineCouponConsumePageList"
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/MemberProfile/GetTenantMemberList"
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/MemberProfile/GetTenantMemberCardList"
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/MemberProfile/GetMemberCardBalanceChange"
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetRechargeSettleList"
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/PackageCoupon/QueryPackageCouponList"
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetSiteTableUseDetails"
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoods/GetGoodsStockReport"
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/GoodsStockManage/QueryGoodsOutboundReceipt"
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Table/GetSiteTables"
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoodsCategory/QueryPrimarySecondaryCategory"
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoods/GetGoodsInventoryList"
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetTaiFeeAdjustList"
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoods/QueryTenantGoods"
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/PayLog/GetPayLogListPage",
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 23,
+ "generated_at": "2026-01-24T22:14:42.999090+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22929,
+ "ods": 22929,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 22929,
+ "ods": 22929,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 358,
+ "ods": 358,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 10139.37,
+ "ods_sum": 10139.37,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 17057.33,
+ "ods_sum": 17057.33,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 52686.58,
+ "ods_sum": 52686.58,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 1171.63,
+ "ods_sum": 1171.63,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 24821.37,
+ "ods_sum": 24821.37,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 17992,
+ "ods": 17992,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2779,
+ "ods": 2779,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 323227.69,
+ "ods_sum": 323227.69,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2779,
+ "ods": 2779,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 37,
+ "ods": 106,
+ "diff": -69
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 191.21,
+ "diff": -191.21
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 12505.5,
+ "ods_sum": 37535.53,
+ "diff": -25030.03
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4883,
+ "ods": 4883,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 97,
+ "ods": 97,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 97,
+ "ods": 97,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4677,
+ "ods": 4677,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4677,
+ "ods": 4677,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 266,
+ "ods": 266,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 18240.0,
+ "ods_sum": 18240.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 17057.33,
+ "ods_sum": 17057.33,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11157,
+ "ods": 11157,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 259,
+ "ods": 259,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 17394.0,
+ "ods_sum": 17394.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16707,
+ "ods": 16707,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 453,
+ "ods": 453,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 453,
+ "ods": 453,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 407,
+ "ods": 407,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 80965.0,
+ "ods_sum": 80965.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 1,
+ "ods": 1,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -2.0,
+ "ods_sum": -2.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 44,
+ "ods": 44,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -69
+ },
+ "generated_at": "2026-01-24T22:14:48.193821+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 0,
+ "total_errors": 23
+ },
+ "total_missing": 0,
+ "total_errors": 23,
+ "generated_at": "2026-01-24T22:14:48.193853+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260124_222607.json b/etl_billiards/reports/data_integrity_window_20260124_222607.json
new file mode 100644
index 0000000..9014414
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260124_222607.json
@@ -0,0 +1,1400 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-19T19:14:15+08:00",
+ "end": "2026-01-25T00:14:15+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-19T19:14:15+08:00",
+ "end": "2026-01-25T00:14:15+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-19T19:14:15+08:00",
+ "end": "2026-01-25T00:14:15+08:00",
+ "cutoff": null,
+ "window_days": 5,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 136,
+ "records_with_pk": 136,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 647,
+ "records_with_pk": 647,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3065432416570181
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10037,
+ "records_with_pk": 10037,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 179,
+ "records_with_pk": 179,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 5,
+ "records_with_pk": 5,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11897,
+ "records_with_pk": 11897,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3065432435575685
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16861,
+ "records_with_pk": 16861,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3065433115265989
+ }
+ ],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 555,
+ "records_with_pk": 555,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 944,
+ "records_with_pk": 944,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11,
+ "records_with_pk": 11,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8253,
+ "records_with_pk": 8253,
+ "missing": 147,
+ "missing_samples": [
+ {
+ "id": 3065424093170565
+ },
+ {
+ "id": 3065417916025669
+ },
+ {
+ "id": 3065416799013701
+ },
+ {
+ "id": 3065412410543045
+ },
+ {
+ "id": 3065410940308293
+ },
+ {
+ "id": 3065410940308294
+ },
+ {
+ "id": 3065402568903621
+ },
+ {
+ "id": 3065400934321093
+ },
+ {
+ "id": 3065400878271301
+ },
+ {
+ "id": 3065400878287685
+ },
+ {
+ "id": 3065392583019397
+ },
+ {
+ "id": 3065392512322501
+ },
+ {
+ "id": 3065389440453573
+ },
+ {
+ "id": 3065389440453574
+ },
+ {
+ "id": 3065384249494341
+ },
+ {
+ "id": 3065379691055941
+ },
+ {
+ "id": 3065373443803973
+ },
+ {
+ "id": 3065373139897541
+ },
+ {
+ "id": 3065358031375301
+ },
+ {
+ "id": 3065355638344517
+ },
+ {
+ "id": 3065349042424773
+ },
+ {
+ "id": 3065346835385285
+ },
+ {
+ "id": 3065320965507973
+ },
+ {
+ "id": 3065307692174277
+ },
+ {
+ "id": 3065304304421765
+ },
+ {
+ "id": 3065304304421766
+ },
+ {
+ "id": 3065284099279813
+ },
+ {
+ "id": 3065274420841285
+ },
+ {
+ "id": 3065259484433606
+ },
+ {
+ "id": 3065250665761989
+ },
+ {
+ "id": 3065245825715141
+ },
+ {
+ "id": 3065225740176197
+ },
+ {
+ "id": 3065210599214021
+ },
+ {
+ "id": 3065203094653829
+ },
+ {
+ "id": 3065199175404357
+ },
+ {
+ "id": 3065185918520134
+ },
+ {
+ "id": 3065184442436549
+ },
+ {
+ "id": 3065182172924805
+ },
+ {
+ "id": 3065177155554245
+ },
+ {
+ "id": 3065177155554246
+ },
+ {
+ "id": 3065160959527813
+ },
+ {
+ "id": 3065093558455109
+ },
+ {
+ "id": 3065077314112325
+ },
+ {
+ "id": 3065077314112326
+ },
+ {
+ "id": 3065069899680965
+ },
+ {
+ "id": 3065054093741253
+ },
+ {
+ "id": 3065054039657413
+ },
+ {
+ "id": 3065053956721477
+ },
+ {
+ "id": 3065024393562949
+ },
+ {
+ "id": 3065020157463365
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1004,
+ "records_with_pk": 1004,
+ "missing": 430,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3065245741796549
+ },
+ {
+ "sitegoodsstockid": 3065241888689029
+ },
+ {
+ "sitegoodsstockid": 3065230523976517
+ },
+ {
+ "sitegoodsstockid": 3065228210048197
+ },
+ {
+ "sitegoodsstockid": 3065228210244805
+ },
+ {
+ "sitegoodsstockid": 3065223410305925
+ },
+ {
+ "sitegoodsstockid": 3065222393892037
+ },
+ {
+ "sitegoodsstockid": 3065222257380229
+ },
+ {
+ "sitegoodsstockid": 3065211575290757
+ },
+ {
+ "sitegoodsstockid": 3065208430349509
+ },
+ {
+ "sitegoodsstockid": 3065208430972101
+ },
+ {
+ "sitegoodsstockid": 3065202672733061
+ },
+ {
+ "sitegoodsstockid": 3065202672569221
+ },
+ {
+ "sitegoodsstockid": 3065192541162693
+ },
+ {
+ "sitegoodsstockid": 3065184738905029
+ },
+ {
+ "sitegoodsstockid": 3065183562517445
+ },
+ {
+ "sitegoodsstockid": 3065179536886981
+ },
+ {
+ "sitegoodsstockid": 3065177298717893
+ },
+ {
+ "sitegoodsstockid": 3065174962277317
+ },
+ {
+ "sitegoodsstockid": 3065174340258693
+ },
+ {
+ "sitegoodsstockid": 3065169942875077
+ },
+ {
+ "sitegoodsstockid": 3065169942399941
+ },
+ {
+ "sitegoodsstockid": 3065165534743429
+ },
+ {
+ "sitegoodsstockid": 3065161782332357
+ },
+ {
+ "sitegoodsstockid": 3065152084118725
+ },
+ {
+ "sitegoodsstockid": 3065146629835589
+ },
+ {
+ "sitegoodsstockid": 3065145603378373
+ },
+ {
+ "sitegoodsstockid": 3065144114351301
+ },
+ {
+ "sitegoodsstockid": 3065143976283077
+ },
+ {
+ "sitegoodsstockid": 3065142173993925
+ },
+ {
+ "sitegoodsstockid": 3065132596923205
+ },
+ {
+ "sitegoodsstockid": 3065131517791045
+ },
+ {
+ "sitegoodsstockid": 3065131443555269
+ },
+ {
+ "sitegoodsstockid": 3065131001809861
+ },
+ {
+ "sitegoodsstockid": 3065128696630149
+ },
+ {
+ "sitegoodsstockid": 3065117668412613
+ },
+ {
+ "sitegoodsstockid": 3065115329662149
+ },
+ {
+ "sitegoodsstockid": 3065109122304837
+ },
+ {
+ "sitegoodsstockid": 3065106178493637
+ },
+ {
+ "sitegoodsstockid": 3065093014571845
+ },
+ {
+ "sitegoodsstockid": 3065091746991045
+ },
+ {
+ "sitegoodsstockid": 3065091647278277
+ },
+ {
+ "sitegoodsstockid": 3065090336164805
+ },
+ {
+ "sitegoodsstockid": 3065090335689669
+ },
+ {
+ "sitegoodsstockid": 3065089641745605
+ },
+ {
+ "sitegoodsstockid": 3065089496714053
+ },
+ {
+ "sitegoodsstockid": 3065088993397701
+ },
+ {
+ "sitegoodsstockid": 3065088993889221
+ },
+ {
+ "sitegoodsstockid": 3065087358733509
+ },
+ {
+ "sitegoodsstockid": 3065041513286533
+ }
+ ],
+ "pages": 6,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1721,
+ "records_with_pk": 1721,
+ "missing": 39,
+ "missing_samples": [
+ {
+ "id": 3065324486544325
+ },
+ {
+ "id": 3065324486511557
+ },
+ {
+ "id": 3065281420757957
+ },
+ {
+ "id": 3065225880865605
+ },
+ {
+ "id": 3065110094334789
+ },
+ {
+ "id": 3064404466191301
+ },
+ {
+ "id": 3064402686987077
+ },
+ {
+ "id": 3064262805179333
+ },
+ {
+ "id": 3064246571944837
+ },
+ {
+ "id": 3064245835828165
+ },
+ {
+ "id": 3064245835779013
+ },
+ {
+ "id": 3064244105513925
+ },
+ {
+ "id": 3064244105563077
+ },
+ {
+ "id": 3064241885105093
+ },
+ {
+ "id": 3064228079962949
+ },
+ {
+ "id": 3064218902219973
+ },
+ {
+ "id": 3064218046385349
+ },
+ {
+ "id": 3064178963942213
+ },
+ {
+ "id": 3064174046317509
+ },
+ {
+ "id": 3064172743216069
+ },
+ {
+ "id": 3064169279654853
+ },
+ {
+ "id": 3064159579278213
+ },
+ {
+ "id": 3064148606159813
+ },
+ {
+ "id": 3064120615963845
+ },
+ {
+ "id": 3064102418533317
+ },
+ {
+ "id": 3064074573908933
+ },
+ {
+ "id": 3064074573876165
+ },
+ {
+ "id": 3064035698887877
+ },
+ {
+ "id": 3064031616895813
+ },
+ {
+ "id": 3063961039850373
+ },
+ {
+ "id": 3063790926089093
+ },
+ {
+ "id": 3062937796758981
+ },
+ {
+ "id": 3062937039163013
+ },
+ {
+ "id": 3062937039195781
+ },
+ {
+ "id": 3062882662944261
+ },
+ {
+ "id": 3062728738557573
+ },
+ {
+ "id": 3062704209858117
+ },
+ {
+ "id": 3062703566769669
+ },
+ {
+ "id": 3062703566884358
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 664,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 664,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 619,
+ "total_errors": 0,
+ "generated_at": "2026-01-24T22:26:02.533790+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23183,
+ "ods": 23183,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23183,
+ "ods": 23183,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 589,
+ "ods": 589,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 13116.82,
+ "ods_sum": 13116.82,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 26829.58,
+ "ods_sum": 26829.58,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 76782.02,
+ "ods_sum": 76782.02,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 2118.18,
+ "ods_sum": 2118.18,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 35220.56,
+ "ods_sum": 35220.56,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18223,
+ "ods": 18223,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2779,
+ "ods": 2779,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 323227.69,
+ "ods_sum": 323227.69,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2779,
+ "ods": 2779,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 37,
+ "ods": 179,
+ "diff": -142
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 191.21,
+ "diff": -191.21
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 12505.5,
+ "ods_sum": 52789.73,
+ "diff": -40284.23
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4956,
+ "ods": 4956,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 97,
+ "ods": 97,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 97,
+ "ods": 97,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4709,
+ "ods": 4709,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4709,
+ "ods": 4709,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 266,
+ "ods": 266,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 18240.0,
+ "ods_sum": 18240.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 17057.33,
+ "ods_sum": 17057.33,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11157,
+ "ods": 11157,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 412,
+ "ods": 412,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 27944.0,
+ "ods_sum": 27944.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16860,
+ "ods": 16860,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 453,
+ "ods": 453,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 453,
+ "ods": 453,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 662,
+ "ods": 662,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 99285.0,
+ "ods_sum": 99285.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -7.0,
+ "ods_sum": -7.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -142
+ },
+ "generated_at": "2026-01-24T22:26:07.565369+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 619,
+ "total_errors": 0
+ },
+ "total_missing": 619,
+ "total_errors": 0,
+ "generated_at": "2026-01-24T22:26:07.565393+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260125_205910.json b/etl_billiards/reports/data_integrity_window_20260125_205910.json
new file mode 100644
index 0000000..d5675ec
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260125_205910.json
@@ -0,0 +1,1340 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-20T17:48:03+08:00",
+ "end": "2026-01-25T22:48:03+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-20T17:48:03+08:00",
+ "end": "2026-01-25T22:48:03+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-20T17:48:03+08:00",
+ "end": "2026-01-25T22:48:03+08:00",
+ "cutoff": null,
+ "window_days": 5,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 136,
+ "records_with_pk": 136,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 646,
+ "records_with_pk": 646,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3066762932817093
+ },
+ {
+ "id": 3066762524838789
+ }
+ ],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10026,
+ "records_with_pk": 10026,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3066762567027909
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 165,
+ "records_with_pk": 165,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3066762981362565
+ }
+ ],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 6,
+ "records_with_pk": 6,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11875,
+ "records_with_pk": 11875,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3066762977905541
+ },
+ {
+ "id": 3066762563636421
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16928,
+ "records_with_pk": 16928,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3066764959435717
+ }
+ ],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 555,
+ "records_with_pk": 555,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 944,
+ "records_with_pk": 944,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2461,
+ "records_with_pk": 2461,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3066762978577285
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8235,
+ "records_with_pk": 8235,
+ "missing": 72,
+ "missing_samples": [
+ {
+ "id": 3066765213338565
+ },
+ {
+ "id": 3066744119905221
+ },
+ {
+ "id": 3066743229713349
+ },
+ {
+ "id": 3066743163702213
+ },
+ {
+ "id": 3066733825526981
+ },
+ {
+ "id": 3066729700838277
+ },
+ {
+ "id": 3066724925148357
+ },
+ {
+ "id": 3066699462102213
+ },
+ {
+ "id": 3066695991675781
+ },
+ {
+ "id": 3066664761166725
+ },
+ {
+ "id": 3066660179676357
+ },
+ {
+ "id": 3066609163701189
+ },
+ {
+ "id": 3066599204965255
+ },
+ {
+ "id": 3066599204965254
+ },
+ {
+ "id": 3066599204948870
+ },
+ {
+ "id": 3066594442726213
+ },
+ {
+ "id": 3066590040460165
+ },
+ {
+ "id": 3066588205042885
+ },
+ {
+ "id": 3066579501255621
+ },
+ {
+ "id": 3066569299839877
+ },
+ {
+ "id": 3066563042282693
+ },
+ {
+ "id": 3066563042266309
+ },
+ {
+ "id": 3066556331068293
+ },
+ {
+ "id": 3066549868645253
+ },
+ {
+ "id": 3066549815610309
+ },
+ {
+ "id": 3066546409098181
+ },
+ {
+ "id": 3066542941932485
+ },
+ {
+ "id": 3066532562734021
+ },
+ {
+ "id": 3066532497132357
+ },
+ {
+ "id": 3066532427795269
+ },
+ {
+ "id": 3066524469234885
+ },
+ {
+ "id": 3066522309004101
+ },
+ {
+ "id": 3066522236439493
+ },
+ {
+ "id": 3066515036638405
+ },
+ {
+ "id": 3066511403470021
+ },
+ {
+ "id": 3066496075418437
+ },
+ {
+ "id": 3066496030706501
+ },
+ {
+ "id": 3066495904828357
+ },
+ {
+ "id": 3066476092574917
+ },
+ {
+ "id": 3066474454715269
+ },
+ {
+ "id": 3066462069410693
+ },
+ {
+ "id": 3066455198337989
+ },
+ {
+ "id": 3066450071472965
+ },
+ {
+ "id": 3066409219984261
+ },
+ {
+ "id": 3066405355277190
+ },
+ {
+ "id": 3066405355277189
+ },
+ {
+ "id": 3066395040517317
+ },
+ {
+ "id": 3066363220659142
+ },
+ {
+ "id": 3066363220659141
+ },
+ {
+ "id": 3066265725275333
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1140,
+ "records_with_pk": 1140,
+ "missing": 250,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3066571175840645
+ },
+ {
+ "sitegoodsstockid": 3066571175660422
+ },
+ {
+ "sitegoodsstockid": 3066568978566021
+ },
+ {
+ "sitegoodsstockid": 3066566739331973
+ },
+ {
+ "sitegoodsstockid": 3066561612450757
+ },
+ {
+ "sitegoodsstockid": 3066527975394501
+ },
+ {
+ "sitegoodsstockid": 3066469781130181
+ },
+ {
+ "sitegoodsstockid": 3066467383577541
+ },
+ {
+ "sitegoodsstockid": 3066461893299013
+ },
+ {
+ "sitegoodsstockid": 3066459622935365
+ },
+ {
+ "sitegoodsstockid": 3066459623377733
+ },
+ {
+ "sitegoodsstockid": 3066458632883397
+ },
+ {
+ "sitegoodsstockid": 3066456988879813
+ },
+ {
+ "sitegoodsstockid": 3066414782843781
+ },
+ {
+ "sitegoodsstockid": 3066352712026949
+ },
+ {
+ "sitegoodsstockid": 3066352378252165
+ },
+ {
+ "sitegoodsstockid": 3066275859565189
+ },
+ {
+ "sitegoodsstockid": 3066275859630725
+ },
+ {
+ "sitegoodsstockid": 3066170776685445
+ },
+ {
+ "sitegoodsstockid": 3066150230412485
+ },
+ {
+ "sitegoodsstockid": 3066149619551173
+ },
+ {
+ "sitegoodsstockid": 3066145925696709
+ },
+ {
+ "sitegoodsstockid": 3066145525861253
+ },
+ {
+ "sitegoodsstockid": 3066145449331589
+ },
+ {
+ "sitegoodsstockid": 3066145243384709
+ },
+ {
+ "sitegoodsstockid": 3066145101352133
+ },
+ {
+ "sitegoodsstockid": 3066124677335877
+ },
+ {
+ "sitegoodsstockid": 3066111808900037
+ },
+ {
+ "sitegoodsstockid": 3066111808424901
+ },
+ {
+ "sitegoodsstockid": 3066025951775941
+ },
+ {
+ "sitegoodsstockid": 3065993567554437
+ },
+ {
+ "sitegoodsstockid": 3065898516040901
+ },
+ {
+ "sitegoodsstockid": 3065885509881029
+ },
+ {
+ "sitegoodsstockid": 3065885509438661
+ },
+ {
+ "sitegoodsstockid": 3065865922431941
+ },
+ {
+ "sitegoodsstockid": 3065840807447365
+ },
+ {
+ "sitegoodsstockid": 3065833098480453
+ },
+ {
+ "sitegoodsstockid": 3065828643900613
+ },
+ {
+ "sitegoodsstockid": 3065827552365765
+ },
+ {
+ "sitegoodsstockid": 3065827308571525
+ },
+ {
+ "sitegoodsstockid": 3065827309030277
+ },
+ {
+ "sitegoodsstockid": 3065810108943557
+ },
+ {
+ "sitegoodsstockid": 3065810108452037
+ },
+ {
+ "sitegoodsstockid": 3065807975353541
+ },
+ {
+ "sitegoodsstockid": 3065807974878405
+ },
+ {
+ "sitegoodsstockid": 3065803975838533
+ },
+ {
+ "sitegoodsstockid": 3065803976313669
+ },
+ {
+ "sitegoodsstockid": 3065768815758533
+ },
+ {
+ "sitegoodsstockid": 3065768674052997
+ },
+ {
+ "sitegoodsstockid": 3065745743629189
+ }
+ ],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1726,
+ "records_with_pk": 1726,
+ "missing": 13,
+ "missing_samples": [
+ {
+ "id": 3066762568813765
+ },
+ {
+ "id": 3066756388457285
+ },
+ {
+ "id": 3066544822193093
+ },
+ {
+ "id": 3065836342545605
+ },
+ {
+ "id": 3065836342496453
+ },
+ {
+ "id": 3065836342463685
+ },
+ {
+ "id": 3065692712897413
+ },
+ {
+ "id": 3065691637091205
+ },
+ {
+ "id": 3065652223020229
+ },
+ {
+ "id": 3065628579040197
+ },
+ {
+ "id": 3065599311104965
+ },
+ {
+ "id": 3065571314518917
+ },
+ {
+ "id": 3065525921500357
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 663,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 663,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 343,
+ "total_errors": 0,
+ "generated_at": "2026-01-25T20:59:04.867283+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23287,
+ "ods": 23287,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23287,
+ "ods": 23287,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 589,
+ "ods": 589,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 11951.42,
+ "ods_sum": 11951.42,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 28028.05,
+ "ods_sum": 28028.05,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 76366.69,
+ "ods_sum": 76366.69,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 2137.43,
+ "ods_sum": 2137.43,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 34249.79,
+ "ods_sum": 34249.79,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18316,
+ "ods": 18316,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2821,
+ "ods": 2821,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 326488.63,
+ "ods_sum": 326488.63,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2821,
+ "ods": 2821,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 164,
+ "diff": -164
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 191.21,
+ "diff": -191.21
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 48407.44,
+ "diff": -48407.44
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4979,
+ "ods": 4979,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4723,
+ "ods": 4723,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4723,
+ "ods": 4723,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 356,
+ "ods": 356,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 24486.0,
+ "ods_sum": 24486.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 23234.33,
+ "ods_sum": 23234.33,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11308,
+ "ods": 11308,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 420,
+ "ods": 420,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 28754.0,
+ "ods_sum": 28754.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16927,
+ "ods": 16927,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 658,
+ "ods": 658,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 90429.0,
+ "ods_sum": 90429.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -7.0,
+ "ods_sum": -7.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -164
+ },
+ "generated_at": "2026-01-25T20:59:10.890641+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 343,
+ "total_errors": 0
+ },
+ "total_missing": 343,
+ "total_errors": 0,
+ "generated_at": "2026-01-25T20:59:10.890662+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260125_213632.json b/etl_billiards/reports/data_integrity_window_20260125_213632.json
new file mode 100644
index 0000000..1874e49
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260125_213632.json
@@ -0,0 +1,1012 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-20T18:25:39+08:00",
+ "end": "2026-01-25T23:25:39+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-20T18:25:39+08:00",
+ "end": "2026-01-25T23:25:39+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-20T18:25:39+08:00",
+ "end": "2026-01-25T23:25:39+08:00",
+ "cutoff": null,
+ "window_days": 5,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 136,
+ "records_with_pk": 136,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 647,
+ "records_with_pk": 647,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10038,
+ "records_with_pk": 10038,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 172,
+ "records_with_pk": 172,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 6,
+ "records_with_pk": 6,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11886,
+ "records_with_pk": 11886,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3066800435252037
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16936,
+ "records_with_pk": 16936,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3066801278192581
+ }
+ ],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2467,
+ "records_with_pk": 2467,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8239,
+ "records_with_pk": 8239,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3066800440560453
+ },
+ {
+ "id": 3066788584541381
+ },
+ {
+ "id": 3066788515990405
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1143,
+ "records_with_pk": 1143,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3066803443321797
+ },
+ {
+ "sitegoodsstockid": 3066801536994117
+ },
+ {
+ "sitegoodsstockid": 3066787800599749
+ },
+ {
+ "sitegoodsstockid": 3066783702698949
+ },
+ {
+ "sitegoodsstockid": 3066783371676549
+ },
+ {
+ "sitegoodsstockid": 3066782126034117
+ },
+ {
+ "sitegoodsstockid": 3066765352488133
+ }
+ ],
+ "pages": 7,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1728,
+ "records_with_pk": 1728,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3066779332676421
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 663,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 663,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 13,
+ "total_errors": 0,
+ "generated_at": "2026-01-25T21:36:26.575196+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23298,
+ "ods": 23298,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23298,
+ "ods": 23298,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 594,
+ "ods": 594,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 12599.72,
+ "ods_sum": 12599.72,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 28002.09,
+ "ods_sum": 28002.09,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 78280.35,
+ "ods_sum": 78280.35,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 2279.12,
+ "ods_sum": 2279.12,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 35399.42,
+ "ods_sum": 35399.42,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18328,
+ "ods": 18328,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2835,
+ "ods": 2835,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 328170.71,
+ "ods_sum": 328170.71,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2835,
+ "ods": 2835,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 172,
+ "diff": -172
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 191.21,
+ "diff": -191.21
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 50571.78,
+ "diff": -50571.78
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4987,
+ "ods": 4987,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4730,
+ "ods": 4730,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4730,
+ "ods": 4730,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 425,
+ "ods": 425,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 29138.0,
+ "ods_sum": 29138.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 27858.09,
+ "ods_sum": 27858.09,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11381,
+ "ods": 11381,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 425,
+ "ods": 425,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 29160.0,
+ "ods_sum": 29160.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16935,
+ "ods": 16935,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 662,
+ "ods": 662,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 90926.0,
+ "ods_sum": 90926.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 2,
+ "ods": 2,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": -7.0,
+ "ods_sum": -7.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -172
+ },
+ "generated_at": "2026-01-25T21:36:32.441421+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 13,
+ "total_errors": 0
+ },
+ "total_missing": 13,
+ "total_errors": 0,
+ "generated_at": "2026-01-25T21:36:32.441443+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260125_224002.json b/etl_billiards/reports/data_integrity_window_20260125_224002.json
new file mode 100644
index 0000000..f7c3a14
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260125_224002.json
@@ -0,0 +1,1066 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-25T14:29:34+08:00",
+ "end": "2026-01-26T00:29:34+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-25T14:29:34+08:00",
+ "end": "2026-01-26T00:29:34+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-25T14:29:34+08:00",
+ "end": "2026-01-26T00:29:34+08:00",
+ "cutoff": null,
+ "window_days": 0,
+ "window_hours": 10,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 68,
+ "records_with_pk": 68,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 76,
+ "records_with_pk": 76,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3066860365499269
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10044,
+ "records_with_pk": 10044,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3066860419124165
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10,
+ "records_with_pk": 10,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11895,
+ "records_with_pk": 11895,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3066860416289733
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16944,
+ "records_with_pk": 16944,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3066861558500549
+ },
+ {
+ "id": 3066861405555589
+ }
+ ],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2471,
+ "records_with_pk": 2471,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3066860416912325
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8243,
+ "records_with_pk": 8243,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3066837878312133
+ },
+ {
+ "id": 3066837374143365
+ },
+ {
+ "id": 3066833646750661
+ },
+ {
+ "id": 3066828194647237
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 59,
+ "records_with_pk": 59,
+ "missing": 19,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3066865924524997
+ },
+ {
+ "sitegoodsstockid": 3066863944010629
+ },
+ {
+ "sitegoodsstockid": 3066862740032389
+ },
+ {
+ "sitegoodsstockid": 3066858755050309
+ },
+ {
+ "sitegoodsstockid": 3066840188848965
+ },
+ {
+ "sitegoodsstockid": 3066838289435525
+ },
+ {
+ "sitegoodsstockid": 3066835140692933
+ },
+ {
+ "sitegoodsstockid": 3066833444015045
+ },
+ {
+ "sitegoodsstockid": 3066831699168197
+ },
+ {
+ "sitegoodsstockid": 3066826001795973
+ },
+ {
+ "sitegoodsstockid": 3066824803208133
+ },
+ {
+ "sitegoodsstockid": 3066821797711045
+ },
+ {
+ "sitegoodsstockid": 3066821798251717
+ },
+ {
+ "sitegoodsstockid": 3066821798759622
+ },
+ {
+ "sitegoodsstockid": 3066814938450885
+ },
+ {
+ "sitegoodsstockid": 3066814509944005
+ },
+ {
+ "sitegoodsstockid": 3066813892185285
+ },
+ {
+ "sitegoodsstockid": 3066803443321797
+ },
+ {
+ "sitegoodsstockid": 3066801536994117
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1729,
+ "records_with_pk": 1729,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3066860419976133
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 77,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 77,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 30,
+ "total_errors": 0,
+ "generated_at": "2026-01-25T22:39:57.506027+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23307,
+ "ods": 23307,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23307,
+ "ods": 23307,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 68,
+ "ods": 68,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 841.32,
+ "ods_sum": 841.32,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 3595.19,
+ "ods_sum": 3595.19,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 7205.11,
+ "ods_sum": 7205.11,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 412.5,
+ "ods_sum": 412.5,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 2356.1,
+ "ods_sum": 2356.1,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18334,
+ "ods": 18334,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2836,
+ "ods": 2836,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 328238.71,
+ "ods_sum": 328238.71,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2836,
+ "ods": 2836,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 10,
+ "ods": 10,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 3280.45,
+ "ods_sum": 3280.45,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4988,
+ "ods": 4988,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4733,
+ "ods": 4733,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4733,
+ "ods": 4733,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 51,
+ "ods": 51,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 3436.0,
+ "ods_sum": 3436.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 3403.19,
+ "ods_sum": 3403.19,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11384,
+ "ods": 11384,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 58,
+ "ods": 58,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 3978.0,
+ "ods_sum": 3978.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16942,
+ "ods": 16942,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 76,
+ "ods": 76,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 1600.0,
+ "ods_sum": 1600.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 0
+ },
+ "generated_at": "2026-01-25T22:40:02.547821+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 30,
+ "total_errors": 0
+ },
+ "total_missing": 30,
+ "total_errors": 0,
+ "generated_at": "2026-01-25T22:40:02.547851+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260126_033329.json b/etl_billiards/reports/data_integrity_window_20260126_033329.json
new file mode 100644
index 0000000..20c1f27
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260126_033329.json
@@ -0,0 +1,1196 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-25T00:22:48+08:00",
+ "end": "2026-01-26T05:22:48+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-25T00:22:48+08:00",
+ "end": "2026-01-26T05:22:48+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-25T00:22:48+08:00",
+ "end": "2026-01-26T05:22:48+08:00",
+ "cutoff": null,
+ "window_days": 1,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 136,
+ "records_with_pk": 136,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 134,
+ "records_with_pk": 134,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10070,
+ "records_with_pk": 10070,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 40,
+ "records_with_pk": 40,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1,
+ "records_with_pk": 1,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11926,
+ "records_with_pk": 11926,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16953,
+ "records_with_pk": 16953,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2472,
+ "records_with_pk": 2472,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1,
+ "records_with_pk": 1,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8266,
+ "records_with_pk": 8266,
+ "missing": 23,
+ "missing_samples": [
+ {
+ "id": 3067007305763654
+ },
+ {
+ "id": 3067007305763653
+ },
+ {
+ "id": 3067007245962181
+ },
+ {
+ "id": 3067007177264326
+ },
+ {
+ "id": 3067007177264325
+ },
+ {
+ "id": 3066996143246533
+ },
+ {
+ "id": 3066991452015429
+ },
+ {
+ "id": 3066966237777093
+ },
+ {
+ "id": 3066966237760709
+ },
+ {
+ "id": 3066945936493445
+ },
+ {
+ "id": 3066945936477061
+ },
+ {
+ "id": 3066945882590405
+ },
+ {
+ "id": 3066934585723717
+ },
+ {
+ "id": 3066930340908230
+ },
+ {
+ "id": 3066930340908229
+ },
+ {
+ "id": 3066924696079301
+ },
+ {
+ "id": 3066911455546566
+ },
+ {
+ "id": 3066911455546565
+ },
+ {
+ "id": 3066899743165317
+ },
+ {
+ "id": 3066888588004549
+ },
+ {
+ "id": 3066884198206405
+ },
+ {
+ "id": 3066879329389766
+ },
+ {
+ "id": 3066879329389765
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 189,
+ "records_with_pk": 189,
+ "missing": 44,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3066966928165829
+ },
+ {
+ "sitegoodsstockid": 3066965057883013
+ },
+ {
+ "sitegoodsstockid": 3066963423939397
+ },
+ {
+ "sitegoodsstockid": 3066948529720197
+ },
+ {
+ "sitegoodsstockid": 3066934741797701
+ },
+ {
+ "sitegoodsstockid": 3066930778737541
+ },
+ {
+ "sitegoodsstockid": 3066930778131333
+ },
+ {
+ "sitegoodsstockid": 3066924912823173
+ },
+ {
+ "sitegoodsstockid": 3066924525898949
+ },
+ {
+ "sitegoodsstockid": 3066894414121861
+ },
+ {
+ "sitegoodsstockid": 3066893671451589
+ },
+ {
+ "sitegoodsstockid": 3066893434096581
+ },
+ {
+ "sitegoodsstockid": 3066893434653637
+ },
+ {
+ "sitegoodsstockid": 3066893033737029
+ },
+ {
+ "sitegoodsstockid": 3066891056286597
+ },
+ {
+ "sitegoodsstockid": 3066890729032581
+ },
+ {
+ "sitegoodsstockid": 3066879735975109
+ },
+ {
+ "sitegoodsstockid": 3066870537178309
+ },
+ {
+ "sitegoodsstockid": 3066865924524997
+ },
+ {
+ "sitegoodsstockid": 3066863944010629
+ },
+ {
+ "sitegoodsstockid": 3066862740032389
+ },
+ {
+ "sitegoodsstockid": 3066858755050309
+ },
+ {
+ "sitegoodsstockid": 3067131858913925
+ },
+ {
+ "sitegoodsstockid": 3067131687258821
+ },
+ {
+ "sitegoodsstockid": 3067131189348997
+ },
+ {
+ "sitegoodsstockid": 3067131189283461
+ },
+ {
+ "sitegoodsstockid": 3067101593095045
+ },
+ {
+ "sitegoodsstockid": 3067098731154245
+ },
+ {
+ "sitegoodsstockid": 3067098559007685
+ },
+ {
+ "sitegoodsstockid": 3067087092943813
+ },
+ {
+ "sitegoodsstockid": 3067084451679429
+ },
+ {
+ "sitegoodsstockid": 3067062820506501
+ },
+ {
+ "sitegoodsstockid": 3067062820014981
+ },
+ {
+ "sitegoodsstockid": 3067039710038981
+ },
+ {
+ "sitegoodsstockid": 3067038608526214
+ },
+ {
+ "sitegoodsstockid": 3067031433202885
+ },
+ {
+ "sitegoodsstockid": 3067031168044229
+ },
+ {
+ "sitegoodsstockid": 3067012409297733
+ },
+ {
+ "sitegoodsstockid": 3067003958938437
+ },
+ {
+ "sitegoodsstockid": 3066989658426565
+ },
+ {
+ "sitegoodsstockid": 3066989657918661
+ },
+ {
+ "sitegoodsstockid": 3066986650766277
+ },
+ {
+ "sitegoodsstockid": 3066971236223813
+ },
+ {
+ "sitegoodsstockid": 3066969598643141
+ }
+ ],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1737,
+ "records_with_pk": 1737,
+ "missing": 8,
+ "missing_samples": [
+ {
+ "id": 3067055412218821
+ },
+ {
+ "id": 3067055412186053
+ },
+ {
+ "id": 3066988293721285
+ },
+ {
+ "id": 3066965660617605
+ },
+ {
+ "id": 3066964104792901
+ },
+ {
+ "id": 3066950943394757
+ },
+ {
+ "id": 3066915093728069
+ },
+ {
+ "id": 3066888849149125
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 136,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 136,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 75,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T03:33:24.462285+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 122,
+ "ods": 122,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 2342.95,
+ "ods_sum": 2342.95,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 5940.13,
+ "ods_sum": 5940.13,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 15271.95,
+ "ods_sum": 15271.95,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 412.5,
+ "ods_sum": 412.5,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 6576.37,
+ "ods_sum": 6576.37,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18361,
+ "ods": 18361,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2837,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 328358.71,
+ "ods_sum": 328358.71,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2837,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 40,
+ "ods": 40,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 13656.85,
+ "ods_sum": 13656.85,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4998,
+ "ods": 4998,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 71,
+ "ods": 71,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 4540.0,
+ "ods_sum": 4540.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 4504.13,
+ "ods_sum": 4504.13,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11388,
+ "ods": 11388,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 81,
+ "ods": 81,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 5208.0,
+ "ods_sum": 5208.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16953,
+ "ods": 16953,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 136,
+ "ods": 136,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 14159.0,
+ "ods_sum": 14159.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 0
+ },
+ "generated_at": "2026-01-26T03:33:29.767935+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 75,
+ "total_errors": 0
+ },
+ "total_missing": 75,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T03:33:29.767965+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260126_035534.json b/etl_billiards/reports/data_integrity_window_20260126_035534.json
new file mode 100644
index 0000000..1937659
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260126_035534.json
@@ -0,0 +1,972 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-24T00:45:10+08:00",
+ "end": "2026-01-26T05:45:10+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-24T00:45:10+08:00",
+ "end": "2026-01-26T05:45:10+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-24T00:45:10+08:00",
+ "end": "2026-01-26T05:45:10+08:00",
+ "cutoff": null,
+ "window_days": 2,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 136,
+ "records_with_pk": 136,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 284,
+ "records_with_pk": 284,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10070,
+ "records_with_pk": 10070,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 83,
+ "records_with_pk": 83,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1,
+ "records_with_pk": 1,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11926,
+ "records_with_pk": 11926,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16953,
+ "records_with_pk": 16953,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2472,
+ "records_with_pk": 2472,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1,
+ "records_with_pk": 1,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8266,
+ "records_with_pk": 8266,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 548,
+ "records_with_pk": 548,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3067169196329861
+ }
+ ],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1737,
+ "records_with_pk": 1737,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 286,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 286,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T03:55:28.356697+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23339,
+ "ods": 23339,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 254,
+ "ods": 254,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 4468.13,
+ "ods_sum": 4468.13,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 11343.14,
+ "ods_sum": 11343.14,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 29695.36,
+ "ods_sum": 29695.36,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 819.01,
+ "ods_sum": 819.01,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 13065.08,
+ "ods_sum": 13065.08,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18361,
+ "ods": 18361,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 328358.71,
+ "ods_sum": 328901.21,
+ "diff": -542.5
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2837,
+ "ods": 2845,
+ "diff": -8
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 83,
+ "ods": 83,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 21036.95,
+ "ods_sum": 21036.95,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4998,
+ "ods": 4998,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4735,
+ "ods": 4735,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 146,
+ "ods": 169,
+ "diff": -23
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 10116.0,
+ "ods_sum": 11552.0,
+ "diff": -1436.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 9907.14,
+ "ods_sum": 11343.14,
+ "diff": -1436.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11388,
+ "ods": 11411,
+ "diff": -23
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 165,
+ "ods": 165,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 11216.0,
+ "ods_sum": 11216.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16953,
+ "ods": 16953,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 454,
+ "ods": 454,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 286,
+ "ods": 286,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 25812.0,
+ "ods_sum": 25812.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -62
+ },
+ "generated_at": "2026-01-26T03:55:34.698078+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 1,
+ "total_errors": 0
+ },
+ "total_missing": 1,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T03:55:34.698101+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260126_182902.json b/etl_billiards/reports/data_integrity_window_20260126_182902.json
new file mode 100644
index 0000000..b82a0b3
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260126_182902.json
@@ -0,0 +1,1151 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-24T15:23:05+08:00",
+ "end": "2026-01-26T20:23:05+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-24T15:23:05+08:00",
+ "end": "2026-01-26T20:23:05+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-24T15:23:05+08:00",
+ "end": "2026-01-26T20:23:05+08:00",
+ "cutoff": null,
+ "window_days": 2,
+ "window_hours": 0,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 138,
+ "records_with_pk": 138,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 278,
+ "records_with_pk": 278,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9939,
+ "records_with_pk": 9939,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 70,
+ "records_with_pk": 70,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1,
+ "records_with_pk": 1,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11770,
+ "records_with_pk": 11770,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16977,
+ "records_with_pk": 16977,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 85,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2460,
+ "records_with_pk": 2460,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2,
+ "records_with_pk": 2,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 2,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8160,
+ "records_with_pk": 8160,
+ "missing": 16,
+ "missing_samples": [
+ {
+ "id": 3068019000723653
+ },
+ {
+ "id": 3067992374970501
+ },
+ {
+ "id": 3067985684777285
+ },
+ {
+ "id": 3067955077302405
+ },
+ {
+ "id": 3067912089471301
+ },
+ {
+ "id": 3067909312940229
+ },
+ {
+ "id": 3067891288460485
+ },
+ {
+ "id": 3067865836801221
+ },
+ {
+ "id": 3067865836801222
+ },
+ {
+ "id": 3067853161680069
+ },
+ {
+ "id": 3067840765987717
+ },
+ {
+ "id": 3067838769564485
+ },
+ {
+ "id": 3067838769564486
+ },
+ {
+ "id": 3067824960310085
+ },
+ {
+ "id": 3067817526774661
+ },
+ {
+ "id": 3067809982434501
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 488,
+ "records_with_pk": 488,
+ "missing": 40,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3067817042152389
+ },
+ {
+ "sitegoodsstockid": 3067811998468997
+ },
+ {
+ "sitegoodsstockid": 3067803612662661
+ },
+ {
+ "sitegoodsstockid": 3067800357997765
+ },
+ {
+ "sitegoodsstockid": 3067796231850885
+ },
+ {
+ "sitegoodsstockid": 3067777792691077
+ },
+ {
+ "sitegoodsstockid": 3067773973760901
+ },
+ {
+ "sitegoodsstockid": 3067765207436101
+ },
+ {
+ "sitegoodsstockid": 3067760818850757
+ },
+ {
+ "sitegoodsstockid": 3067759274494789
+ },
+ {
+ "sitegoodsstockid": 3067759272840005
+ },
+ {
+ "sitegoodsstockid": 3067758938492101
+ },
+ {
+ "sitegoodsstockid": 3067758937001157
+ },
+ {
+ "sitegoodsstockid": 3067758938000581
+ },
+ {
+ "sitegoodsstockid": 3067758937492677
+ },
+ {
+ "sitegoodsstockid": 3067750877989829
+ },
+ {
+ "sitegoodsstockid": 3067750878186437
+ },
+ {
+ "sitegoodsstockid": 3067750188469445
+ },
+ {
+ "sitegoodsstockid": 3067655890504581
+ },
+ {
+ "sitegoodsstockid": 3067237078174597
+ },
+ {
+ "sitegoodsstockid": 3067188787530373
+ },
+ {
+ "sitegoodsstockid": 3067182602505093
+ },
+ {
+ "sitegoodsstockid": 3067182525270917
+ },
+ {
+ "sitegoodsstockid": 3067169196329861
+ },
+ {
+ "sitegoodsstockid": 3068033580435653
+ },
+ {
+ "sitegoodsstockid": 3068033136544069
+ },
+ {
+ "sitegoodsstockid": 3068032978634885
+ },
+ {
+ "sitegoodsstockid": 3068032978126981
+ },
+ {
+ "sitegoodsstockid": 3068011017013573
+ },
+ {
+ "sitegoodsstockid": 3068009360361797
+ },
+ {
+ "sitegoodsstockid": 3068009360197957
+ },
+ {
+ "sitegoodsstockid": 3068007472859269
+ },
+ {
+ "sitegoodsstockid": 3067985548052677
+ },
+ {
+ "sitegoodsstockid": 3067982527760517
+ },
+ {
+ "sitegoodsstockid": 3067982527580293
+ },
+ {
+ "sitegoodsstockid": 3067982527400069
+ },
+ {
+ "sitegoodsstockid": 3067969529628933
+ },
+ {
+ "sitegoodsstockid": 3067960363026693
+ },
+ {
+ "sitegoodsstockid": 3067960362535173
+ },
+ {
+ "sitegoodsstockid": 3067957700249925
+ }
+ ],
+ "pages": 4,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1735,
+ "records_with_pk": 1735,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3067770378636165
+ },
+ {
+ "id": 3067252824935621
+ },
+ {
+ "id": 3067252824886469
+ },
+ {
+ "id": 3067211610753989
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 281,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 281,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 60,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T18:28:56.766185+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23366,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 246,
+ "ods": 246,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 3769.79,
+ "ods_sum": 3769.79,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 11546.2,
+ "ods_sum": 11546.2,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 27728.8,
+ "ods_sum": 27728.8,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 819.01,
+ "ods_sum": 819.01,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 11593.8,
+ "ods_sum": 11593.8,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18386,
+ "diff": 0
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2845,
+ "ods": 2845,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 328901.21,
+ "ods_sum": 328901.21,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2845,
+ "ods": 2845,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 70,
+ "ods": 70,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 18939.06,
+ "ods_sum": 18939.06,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5003,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4745,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 156,
+ "ods": 156,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 10716.0,
+ "ods_sum": 10716.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 10546.2,
+ "ods_sum": 10546.2,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11411,
+ "ods": 11411,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 172,
+ "ods": 172,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 12016.0,
+ "ods_sum": 12016.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 16977,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 455,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 281,
+ "ods": 281,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 23982.0,
+ "ods_sum": 23982.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": 0
+ },
+ "generated_at": "2026-01-26T18:29:02.395880+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 60,
+ "total_errors": 0
+ },
+ "total_missing": 60,
+ "total_errors": 0,
+ "generated_at": "2026-01-26T18:29:02.395904+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260127_025004.json b/etl_billiards/reports/data_integrity_window_20260127_025004.json
new file mode 100644
index 0000000..a6a5fa0
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260127_025004.json
@@ -0,0 +1,1309 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-26T23:44:19+08:00",
+ "end": "2026-01-27T04:44:19+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-26T23:44:19+08:00",
+ "end": "2026-01-27T04:44:19+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-26T23:44:19+08:00",
+ "end": "2026-01-27T04:44:19+08:00",
+ "cutoff": null,
+ "window_days": 0,
+ "window_hours": 5,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 21,
+ "records_with_pk": 21,
+ "missing": 18,
+ "missing_samples": [
+ {
+ "id": 3068517594892421
+ },
+ {
+ "id": 3068516045293893
+ },
+ {
+ "id": 3068498386438469
+ },
+ {
+ "id": 3068490926868741
+ },
+ {
+ "id": 3068488687814981
+ },
+ {
+ "id": 3068478831069509
+ },
+ {
+ "id": 3068478749411461
+ },
+ {
+ "id": 3068449874594117
+ },
+ {
+ "id": 3068439717660805
+ },
+ {
+ "id": 3068425134852421
+ },
+ {
+ "id": 3068420801906885
+ },
+ {
+ "id": 3068419354937669
+ },
+ {
+ "id": 3068405527726341
+ },
+ {
+ "id": 3068391002802501
+ },
+ {
+ "id": 3068370869831877
+ },
+ {
+ "id": 3068368265578821
+ },
+ {
+ "id": 3068365252905221
+ },
+ {
+ "id": 3068364464179397
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10017,
+ "records_with_pk": 10017,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 5,
+ "records_with_pk": 5,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3068516486613125
+ },
+ {
+ "id": 3068516486121605
+ },
+ {
+ "id": 3068488958265669
+ },
+ {
+ "id": 3068405573077317
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11850,
+ "records_with_pk": 11850,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17031,
+ "records_with_pk": 17031,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2475,
+ "records_with_pk": 2475,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8222,
+ "records_with_pk": 8222,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 18,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3068498975541445
+ },
+ {
+ "sitegoodsstockid": 3068496120547461
+ },
+ {
+ "sitegoodsstockid": 3068494023559365
+ },
+ {
+ "sitegoodsstockid": 3068463611513029
+ },
+ {
+ "sitegoodsstockid": 3068463611054277
+ },
+ {
+ "sitegoodsstockid": 3068449906657541
+ },
+ {
+ "sitegoodsstockid": 3068447170857285
+ },
+ {
+ "sitegoodsstockid": 3068443072497798
+ },
+ {
+ "sitegoodsstockid": 3068443072022661
+ },
+ {
+ "sitegoodsstockid": 3068443071547525
+ },
+ {
+ "sitegoodsstockid": 3068405997390085
+ },
+ {
+ "sitegoodsstockid": 3068397306628293
+ },
+ {
+ "sitegoodsstockid": 3068396797413509
+ },
+ {
+ "sitegoodsstockid": 3068396796938373
+ },
+ {
+ "sitegoodsstockid": 3068387840166021
+ },
+ {
+ "sitegoodsstockid": 3068365194758341
+ },
+ {
+ "sitegoodsstockid": 3068364728027269
+ },
+ {
+ "sitegoodsstockid": 3068363747215621
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1747,
+ "records_with_pk": 1747,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 21,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 21,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 40,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T02:49:58.098385+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18464,
+ "diff": -18463
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 19,
+ "diff": -19
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23427,
+ "diff": -61
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23427,
+ "diff": -61
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 19,
+ "diff": -19
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 600.86,
+ "diff": -600.86
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 1242.0,
+ "diff": -1242.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 3514.45,
+ "diff": -3514.45
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 594.6,
+ "diff": -594.6
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 1076.99,
+ "diff": -1076.99
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18464,
+ "diff": -78
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2861,
+ "diff": -12
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 332004.04,
+ "diff": -2399.5999999999767
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2861,
+ "diff": -12
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 195.07,
+ "diff": -195.07
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5016,
+ "diff": -13
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4760,
+ "diff": -15
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4760,
+ "diff": -15
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 15,
+ "diff": -15
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 1338.0,
+ "diff": -1338.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 1242.0,
+ "diff": -1242.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11489,
+ "diff": -62
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 4,
+ "diff": -4
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 396.0,
+ "diff": -396.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17031,
+ "diff": -54
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 456,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 456,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 21,
+ "diff": -21
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 652.0,
+ "diff": -652.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18910
+ },
+ "generated_at": "2026-01-27T02:50:04.239757+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 40,
+ "total_errors": 0
+ },
+ "total_missing": 40,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T02:50:04.239796+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260127_034634.json b/etl_billiards/reports/data_integrity_window_20260127_034634.json
new file mode 100644
index 0000000..dfdd103
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260127_034634.json
@@ -0,0 +1,1322 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T00:44:19+08:00",
+ "end": "2026-01-27T05:44:19+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T00:44:19+08:00",
+ "end": "2026-01-27T05:44:19+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-27T00:44:19+08:00",
+ "end": "2026-01-27T05:44:19+08:00",
+ "cutoff": null,
+ "window_days": 0,
+ "window_hours": 5,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17,
+ "records_with_pk": 17,
+ "missing": 10,
+ "missing_samples": [
+ {
+ "id": 3068577626589445
+ },
+ {
+ "id": 3068567310895429
+ },
+ {
+ "id": 3068565111163205
+ },
+ {
+ "id": 3068564161300741
+ },
+ {
+ "id": 3068549826037893
+ },
+ {
+ "id": 3068449874594117
+ },
+ {
+ "id": 3068439717660805
+ },
+ {
+ "id": 3068425134852421
+ },
+ {
+ "id": 3068420801906885
+ },
+ {
+ "id": 3068419354937669
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10022,
+ "records_with_pk": 10022,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3068567378462917
+ },
+ {
+ "id": 3068567378446533
+ },
+ {
+ "id": 3068565155514629
+ },
+ {
+ "id": 3068564218071237
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8,
+ "records_with_pk": 8,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3068567378970821
+ },
+ {
+ "id": 3068564219381957
+ },
+ {
+ "id": 3068564218923205
+ },
+ {
+ "id": 3068564218464453
+ },
+ {
+ "id": 3068550021662853
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11855,
+ "records_with_pk": 11855,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3068578144979077
+ },
+ {
+ "id": 3068567373449413
+ },
+ {
+ "id": 3068565152483589
+ },
+ {
+ "id": 3068564214925509
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17031,
+ "records_with_pk": 17031,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2479,
+ "records_with_pk": 2479,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3068567374284997
+ },
+ {
+ "id": 3068567374072005
+ },
+ {
+ "id": 3068565153024261
+ },
+ {
+ "id": 3068564215498949
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8222,
+ "records_with_pk": 8222,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 15,
+ "records_with_pk": 15,
+ "missing": 12,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3068578146633861
+ },
+ {
+ "sitegoodsstockid": 3068578146486405
+ },
+ {
+ "sitegoodsstockid": 3068561912023301
+ },
+ {
+ "sitegoodsstockid": 3068549681596741
+ },
+ {
+ "sitegoodsstockid": 3068549681105221
+ },
+ {
+ "sitegoodsstockid": 3068463611513029
+ },
+ {
+ "sitegoodsstockid": 3068463611054277
+ },
+ {
+ "sitegoodsstockid": 3068449906657541
+ },
+ {
+ "sitegoodsstockid": 3068447170857285
+ },
+ {
+ "sitegoodsstockid": 3068443072497798
+ },
+ {
+ "sitegoodsstockid": 3068443072022661
+ },
+ {
+ "sitegoodsstockid": 3068443071547525
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1752,
+ "records_with_pk": 1752,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3068567379904709
+ },
+ {
+ "id": 3068567379970245
+ },
+ {
+ "id": 3068565156202757
+ },
+ {
+ "id": 3068564220086469
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 17,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 17,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 43,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T03:46:28.100178+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18465,
+ "diff": -18464
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 12,
+ "diff": -12
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23434,
+ "diff": -68
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23434,
+ "diff": -68
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 12,
+ "diff": -12
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 382.98,
+ "diff": -382.98
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 828.0,
+ "diff": -828.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 2384.57,
+ "diff": -2384.57
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 594.6,
+ "diff": -594.6
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 578.99,
+ "diff": -578.99
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18465,
+ "diff": -79
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2862,
+ "diff": -13
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 332087.01,
+ "diff": -2482.570000000007
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2862,
+ "diff": -13
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3,
+ "diff": -3
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 1773.59,
+ "diff": -1773.59
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5019,
+ "diff": -16
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4760,
+ "diff": -15
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4760,
+ "diff": -15
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 9,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 924.0,
+ "diff": -924.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 828.0,
+ "diff": -828.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11489,
+ "diff": -62
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17031,
+ "diff": -54
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 456,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 456,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 13,
+ "diff": -13
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 324.0,
+ "diff": -324.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18901
+ },
+ "generated_at": "2026-01-27T03:46:34.507148+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 43,
+ "total_errors": 0
+ },
+ "total_missing": 43,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T03:46:34.507172+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260127_044633.json b/etl_billiards/reports/data_integrity_window_20260127_044633.json
new file mode 100644
index 0000000..13bf6f5
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260127_044633.json
@@ -0,0 +1,1232 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T01:44:19+08:00",
+ "end": "2026-01-27T06:44:19+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T01:44:19+08:00",
+ "end": "2026-01-27T06:44:19+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-27T01:44:19+08:00",
+ "end": "2026-01-27T06:44:19+08:00",
+ "cutoff": null,
+ "window_days": 0,
+ "window_hours": 5,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 13,
+ "records_with_pk": 13,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068598449785093
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10023,
+ "records_with_pk": 10023,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068598529034565
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10,
+ "records_with_pk": 10,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068598530050373
+ },
+ {
+ "id": 3068598529591621
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11857,
+ "records_with_pk": 11857,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068598524643653
+ },
+ {
+ "id": 3068597555480709
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17031,
+ "records_with_pk": 17031,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2482,
+ "records_with_pk": 2482,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3068632370661253
+ },
+ {
+ "id": 3068598525233477
+ },
+ {
+ "id": 3068597557135493
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1,
+ "records_with_pk": 1,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068597553416325
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8222,
+ "records_with_pk": 8222,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 11,
+ "records_with_pk": 11,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3068636706687301
+ },
+ {
+ "sitegoodsstockid": 3068631858153669
+ },
+ {
+ "sitegoodsstockid": 3068631857645765
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1752,
+ "records_with_pk": 1752,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 14,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 14,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 13,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T04:46:27.497118+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18469,
+ "diff": -18468
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 12,
+ "diff": -12
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23439,
+ "diff": -73
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23439,
+ "diff": -73
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 12,
+ "diff": -12
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 513.39,
+ "diff": -513.39
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 348.0,
+ "diff": -348.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 2105.41,
+ "diff": -2105.41
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 594.6,
+ "diff": -594.6
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 649.42,
+ "diff": -649.42
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18469,
+ "diff": -83
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 332217.42,
+ "diff": -2612.9799999999814
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 8,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 2245.45,
+ "diff": -2245.45
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5024,
+ "diff": -21
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4764,
+ "diff": -19
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4764,
+ "diff": -19
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3,
+ "diff": -3
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 348.0,
+ "diff": -348.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 348.0,
+ "diff": -348.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11489,
+ "diff": -62
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17031,
+ "diff": -54
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 456,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 456,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 12,
+ "diff": -12
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 313.0,
+ "diff": -313.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18938
+ },
+ "generated_at": "2026-01-27T04:46:33.029842+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 13,
+ "total_errors": 0
+ },
+ "total_missing": 13,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T04:46:33.029862+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260127_054632.json b/etl_billiards/reports/data_integrity_window_20260127_054632.json
new file mode 100644
index 0000000..b40c631
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260127_054632.json
@@ -0,0 +1,1206 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T02:44:19+08:00",
+ "end": "2026-01-27T07:44:19+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T02:44:19+08:00",
+ "end": "2026-01-27T07:44:19+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-27T02:44:19+08:00",
+ "end": "2026-01-27T07:44:19+08:00",
+ "cutoff": null,
+ "window_days": 0,
+ "window_hours": 5,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 7,
+ "records_with_pk": 7,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068658449336453
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10024,
+ "records_with_pk": 10024,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068658720344389
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8,
+ "records_with_pk": 8,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068658720835909
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11858,
+ "records_with_pk": 11858,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068658716870981
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17031,
+ "records_with_pk": 17031,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2483,
+ "records_with_pk": 2483,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068658717411653
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1,
+ "records_with_pk": 1,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8222,
+ "records_with_pk": 8222,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 8,
+ "records_with_pk": 8,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1752,
+ "records_with_pk": 1752,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 8,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 8,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 5,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T05:46:26.660167+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18470,
+ "diff": -18469
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 6,
+ "diff": -6
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23440,
+ "diff": -74
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23440,
+ "diff": -74
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 6,
+ "diff": -6
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 213.38,
+ "diff": -213.38
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 1045.17,
+ "diff": -1045.17
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 831.79,
+ "diff": -831.79
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18470,
+ "diff": -84
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 332217.42,
+ "diff": -2612.9799999999814
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 7,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 1865.09,
+ "diff": -1865.09
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5026,
+ "diff": -23
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4767,
+ "diff": -22
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4767,
+ "diff": -22
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11489,
+ "diff": -62
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17031,
+ "diff": -54
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 7,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 3295.0,
+ "diff": -3295.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18931
+ },
+ "generated_at": "2026-01-27T05:46:32.261928+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 5,
+ "total_errors": 0
+ },
+ "total_missing": 5,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T05:46:32.261995+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260127_064633.json b/etl_billiards/reports/data_integrity_window_20260127_064633.json
new file mode 100644
index 0000000..eb4106d
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260127_064633.json
@@ -0,0 +1,1213 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T03:44:19+08:00",
+ "end": "2026-01-27T08:44:19+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T03:44:19+08:00",
+ "end": "2026-01-27T08:44:19+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-27T03:44:19+08:00",
+ "end": "2026-01-27T08:44:19+08:00",
+ "cutoff": null,
+ "window_days": 0,
+ "window_hours": 5,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3,
+ "records_with_pk": 3,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068721501554821
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10025,
+ "records_with_pk": 10025,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068721549396165
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4,
+ "records_with_pk": 4,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068721549789381
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11859,
+ "records_with_pk": 11859,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068721545955525
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17031,
+ "records_with_pk": 17031,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2485,
+ "records_with_pk": 2485,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068721546709189
+ },
+ {
+ "id": 3068721546512581
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1,
+ "records_with_pk": 1,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8222,
+ "records_with_pk": 8222,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 4,
+ "records_with_pk": 4,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3068730254100741
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1752,
+ "records_with_pk": 1752,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 4,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 7,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T06:46:27.649849+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18471,
+ "diff": -18470
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23441,
+ "diff": -75
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23441,
+ "diff": -75
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 749.43,
+ "diff": -749.43
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 749.43,
+ "diff": -749.43
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18471,
+ "diff": -85
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 332217.42,
+ "diff": -2612.9799999999814
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3,
+ "diff": -3
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 1597.51,
+ "diff": -1597.51
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5027,
+ "diff": -24
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4768,
+ "diff": -23
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4768,
+ "diff": -23
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11489,
+ "diff": -62
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17031,
+ "diff": -54
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3,
+ "diff": -3
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 3000.0,
+ "diff": -3000.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18922
+ },
+ "generated_at": "2026-01-27T06:46:33.941851+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 7,
+ "total_errors": 0
+ },
+ "total_missing": 7,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T06:46:33.941872+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260127_074634.json b/etl_billiards/reports/data_integrity_window_20260127_074634.json
new file mode 100644
index 0000000..dad738a
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260127_074634.json
@@ -0,0 +1,1198 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T04:44:20+08:00",
+ "end": "2026-01-27T09:44:20+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T04:44:20+08:00",
+ "end": "2026-01-27T09:44:20+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-27T04:44:20+08:00",
+ "end": "2026-01-27T09:44:20+08:00",
+ "cutoff": null,
+ "window_days": 0,
+ "window_hours": 5,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3,
+ "records_with_pk": 3,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068814932084997
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10026,
+ "records_with_pk": 10026,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068815491205445
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2,
+ "records_with_pk": 2,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11860,
+ "records_with_pk": 11860,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3068815488616773
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17031,
+ "records_with_pk": 17031,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2485,
+ "records_with_pk": 2485,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8222,
+ "records_with_pk": 8222,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1,
+ "records_with_pk": 1,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1752,
+ "records_with_pk": 1752,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 3,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 3,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 3,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T07:46:28.145858+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18472,
+ "diff": -18471
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23442,
+ "diff": -76
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23442,
+ "diff": -76
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 240.99,
+ "diff": -240.99
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 240.99,
+ "diff": -240.99
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18472,
+ "diff": -86
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 332217.42,
+ "diff": -2612.9799999999814
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 520.48,
+ "diff": -520.48
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5028,
+ "diff": -25
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4770,
+ "diff": -25
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4770,
+ "diff": -25
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11489,
+ "diff": -62
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17031,
+ "diff": -54
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18929
+ },
+ "generated_at": "2026-01-27T07:46:34.370116+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 3,
+ "total_errors": 0
+ },
+ "total_missing": 3,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T07:46:34.370139+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260127_084637.json b/etl_billiards/reports/data_integrity_window_20260127_084637.json
new file mode 100644
index 0000000..3caacac
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260127_084637.json
@@ -0,0 +1,1186 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T05:44:20+08:00",
+ "end": "2026-01-27T10:44:20+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T05:44:20+08:00",
+ "end": "2026-01-27T10:44:20+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-27T05:44:20+08:00",
+ "end": "2026-01-27T10:44:20+08:00",
+ "cutoff": null,
+ "window_days": 0,
+ "window_hours": 5,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2,
+ "records_with_pk": 2,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9965,
+ "records_with_pk": 9965,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1,
+ "records_with_pk": 1,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11789,
+ "records_with_pk": 11789,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17031,
+ "records_with_pk": 17031,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8186,
+ "records_with_pk": 8186,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 1,
+ "records_with_pk": 1,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1740,
+ "records_with_pk": 1740,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 2,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 2,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T08:46:31.063797+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18473,
+ "diff": -18472
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23443,
+ "diff": -77
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23443,
+ "diff": -77
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 448.01,
+ "diff": -448.01
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 448.01,
+ "diff": -448.01
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18473,
+ "diff": -87
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 332217.42,
+ "diff": -2612.9799999999814
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 316.2,
+ "diff": -316.2
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5028,
+ "diff": -25
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4770,
+ "diff": -25
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4770,
+ "diff": -25
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11489,
+ "diff": -62
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17031,
+ "diff": -54
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 289.0,
+ "diff": -289.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18932
+ },
+ "generated_at": "2026-01-27T08:46:37.552132+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 0,
+ "total_errors": 0
+ },
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T08:46:37.552154+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260127_094626.json b/etl_billiards/reports/data_integrity_window_20260127_094626.json
new file mode 100644
index 0000000..ac966ba
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260127_094626.json
@@ -0,0 +1,1186 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T06:44:20+08:00",
+ "end": "2026-01-27T11:44:20+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T06:44:20+08:00",
+ "end": "2026-01-27T11:44:20+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-27T06:44:20+08:00",
+ "end": "2026-01-27T11:44:20+08:00",
+ "cutoff": null,
+ "window_days": 0,
+ "window_hours": 5,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1,
+ "records_with_pk": 1,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9965,
+ "records_with_pk": 9965,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11789,
+ "records_with_pk": 11789,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17031,
+ "records_with_pk": 17031,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2466,
+ "records_with_pk": 2466,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8186,
+ "records_with_pk": 8186,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1740,
+ "records_with_pk": 1740,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 1,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 1,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T09:46:20.632253+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18473,
+ "diff": -18472
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23443,
+ "diff": -77
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23443,
+ "diff": -77
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 278.07,
+ "diff": -278.07
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 278.07,
+ "diff": -278.07
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18473,
+ "diff": -87
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 332217.42,
+ "diff": -2612.9799999999814
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5028,
+ "diff": -25
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4770,
+ "diff": -25
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4770,
+ "diff": -25
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11489,
+ "diff": -62
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17031,
+ "diff": -54
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 289.0,
+ "diff": -289.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18928
+ },
+ "generated_at": "2026-01-27T09:46:26.587182+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 0,
+ "total_errors": 0
+ },
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T09:46:26.587210+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260127_104627.json b/etl_billiards/reports/data_integrity_window_20260127_104627.json
new file mode 100644
index 0000000..aa5f7f2
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260127_104627.json
@@ -0,0 +1,1214 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T07:44:20+08:00",
+ "end": "2026-01-27T12:44:20+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T07:44:20+08:00",
+ "end": "2026-01-27T12:44:20+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-27T07:44:20+08:00",
+ "end": "2026-01-27T12:44:20+08:00",
+ "cutoff": null,
+ "window_days": 0,
+ "window_hours": 5,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2,
+ "records_with_pk": 2,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068960095340677
+ },
+ {
+ "id": 3068958193125637
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9965,
+ "records_with_pk": 9965,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11791,
+ "records_with_pk": 11791,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068960138873157
+ },
+ {
+ "id": 3068958260365509
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17031,
+ "records_with_pk": 17031,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3068960139462981
+ },
+ {
+ "id": 3068958260955333
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8186,
+ "records_with_pk": 8186,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 2,
+ "records_with_pk": 2,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3068960140773701
+ },
+ {
+ "sitegoodsstockid": 3068958262266053
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1740,
+ "records_with_pk": 1740,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 2,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 2,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 8,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T10:46:21.863125+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18473,
+ "diff": -18472
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23443,
+ "diff": -77
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23443,
+ "diff": -77
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18473,
+ "diff": -87
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 332217.42,
+ "diff": -2612.9799999999814
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5028,
+ "diff": -25
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4770,
+ "diff": -25
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4770,
+ "diff": -25
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11489,
+ "diff": -62
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17031,
+ "diff": -54
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18925
+ },
+ "generated_at": "2026-01-27T10:46:27.595443+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 8,
+ "total_errors": 0
+ },
+ "total_missing": 8,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T10:46:27.595465+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260127_114628.json b/etl_billiards/reports/data_integrity_window_20260127_114628.json
new file mode 100644
index 0000000..4735829
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260127_114628.json
@@ -0,0 +1,1186 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T08:44:20+08:00",
+ "end": "2026-01-27T13:44:20+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T08:44:20+08:00",
+ "end": "2026-01-27T13:44:20+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-27T08:44:20+08:00",
+ "end": "2026-01-27T13:44:20+08:00",
+ "cutoff": null,
+ "window_days": 0,
+ "window_hours": 5,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2,
+ "records_with_pk": 2,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9965,
+ "records_with_pk": 9965,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11791,
+ "records_with_pk": 11791,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17031,
+ "records_with_pk": 17031,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2468,
+ "records_with_pk": 2468,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8186,
+ "records_with_pk": 8186,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 2,
+ "records_with_pk": 2,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1740,
+ "records_with_pk": 1740,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 2,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 2,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T11:46:23.240215+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18473,
+ "diff": -18472
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23445,
+ "diff": -79
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23445,
+ "diff": -79
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18473,
+ "diff": -87
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 332217.42,
+ "diff": -2612.9799999999814
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5028,
+ "diff": -25
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4772,
+ "diff": -27
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4772,
+ "diff": -27
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11489,
+ "diff": -62
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17031,
+ "diff": -54
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18935
+ },
+ "generated_at": "2026-01-27T11:46:28.334055+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 0,
+ "total_errors": 0
+ },
+ "total_missing": 0,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T11:46:28.334079+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260127_124632.json b/etl_billiards/reports/data_integrity_window_20260127_124632.json
new file mode 100644
index 0000000..ca97909
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260127_124632.json
@@ -0,0 +1,1217 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T09:44:20+08:00",
+ "end": "2026-01-27T14:44:20+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T09:44:20+08:00",
+ "end": "2026-01-27T14:44:20+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-27T09:44:20+08:00",
+ "end": "2026-01-27T14:44:20+08:00",
+ "cutoff": null,
+ "window_days": 0,
+ "window_hours": 5,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 4,
+ "records_with_pk": 4,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3069083611875653
+ },
+ {
+ "id": 3069071521466693
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9965,
+ "records_with_pk": 9965,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11793,
+ "records_with_pk": 11793,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3069083636582661
+ },
+ {
+ "id": 3069071572748421
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17031,
+ "records_with_pk": 17031,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2470,
+ "records_with_pk": 2470,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3069083637123333
+ },
+ {
+ "id": 3069071573436549
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8186,
+ "records_with_pk": 8186,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 5,
+ "records_with_pk": 5,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3069083638515973
+ },
+ {
+ "sitegoodsstockid": 3069071575058565
+ },
+ {
+ "sitegoodsstockid": 3069071574878341
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1740,
+ "records_with_pk": 1740,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 4,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 9,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T12:46:26.353424+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18473,
+ "diff": -18472
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23445,
+ "diff": -79
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23445,
+ "diff": -79
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18473,
+ "diff": -87
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 332217.42,
+ "diff": -2612.9799999999814
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5028,
+ "diff": -25
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4772,
+ "diff": -27
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4772,
+ "diff": -27
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11489,
+ "diff": -62
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17031,
+ "diff": -54
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18935
+ },
+ "generated_at": "2026-01-27T12:46:32.092937+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 9,
+ "total_errors": 0
+ },
+ "total_missing": 9,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T12:46:32.092963+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260127_134628.json b/etl_billiards/reports/data_integrity_window_20260127_134628.json
new file mode 100644
index 0000000..3446754
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260127_134628.json
@@ -0,0 +1,1190 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T10:44:20+08:00",
+ "end": "2026-01-27T15:44:20+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T10:44:20+08:00",
+ "end": "2026-01-27T15:44:20+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-27T10:44:20+08:00",
+ "end": "2026-01-27T15:44:20+08:00",
+ "cutoff": null,
+ "window_days": 0,
+ "window_hours": 5,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2,
+ "records_with_pk": 2,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9965,
+ "records_with_pk": 9965,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11793,
+ "records_with_pk": 11793,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17032,
+ "records_with_pk": 17032,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3069132833818821
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2470,
+ "records_with_pk": 2470,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3400,
+ "records_with_pk": 3400,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 17,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 502 Server Error: Bad Gateway for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetSiteTableUseDetails"
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 502 Server Error: Bad Gateway for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoods/GetGoodsStockReport"
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 502 Server Error: Bad Gateway for url: https://pc.ficoo.vip/apiprod/admin/v1/GoodsStockManage/QueryGoodsOutboundReceipt"
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 0,
+ "skipped_missing_pk": 0,
+ "errors": 1,
+ "error_detail": "HTTPError: 502 Server Error: Bad Gateway for url: https://pc.ficoo.vip/apiprod/admin/v1/Table/GetSiteTables"
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1740,
+ "records_with_pk": 1740,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 3,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 3,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 1,
+ "total_errors": 4,
+ "generated_at": "2026-01-27T13:46:21.588530+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18473,
+ "diff": -18472
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23447,
+ "diff": -81
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23447,
+ "diff": -81
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18473,
+ "diff": -87
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 332217.42,
+ "diff": -2612.9799999999814
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5028,
+ "diff": -25
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4774,
+ "diff": -29
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4774,
+ "diff": -29
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11489,
+ "diff": -62
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17031,
+ "diff": -54
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18943
+ },
+ "generated_at": "2026-01-27T13:46:28.584475+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 1,
+ "total_errors": 4
+ },
+ "total_missing": 1,
+ "total_errors": 4,
+ "generated_at": "2026-01-27T13:46:28.584495+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260127_144641.json b/etl_billiards/reports/data_integrity_window_20260127_144641.json
new file mode 100644
index 0000000..aaadc4b
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260127_144641.json
@@ -0,0 +1,1231 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T11:44:20+08:00",
+ "end": "2026-01-27T16:44:20+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T11:44:20+08:00",
+ "end": "2026-01-27T16:44:20+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-27T11:44:20+08:00",
+ "end": "2026-01-27T16:44:20+08:00",
+ "cutoff": null,
+ "window_days": 0,
+ "window_hours": 5,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3,
+ "records_with_pk": 3,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3069194573040709
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9966,
+ "records_with_pk": 9966,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3069194594815173
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11795,
+ "records_with_pk": 11795,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3069194592554181
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17039,
+ "records_with_pk": 17039,
+ "missing": 7,
+ "missing_samples": [
+ {
+ "id": 3069222277008453
+ },
+ {
+ "id": 3069220929784901
+ },
+ {
+ "id": 3069202794122309
+ },
+ {
+ "id": 3069200543911109
+ },
+ {
+ "id": 3069200431451461
+ },
+ {
+ "id": 3069194502802501
+ },
+ {
+ "id": 3069176595680325
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2470,
+ "records_with_pk": 2470,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8187,
+ "records_with_pk": 8187,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3069194595355845
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 8,
+ "records_with_pk": 8,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3069181470870597
+ },
+ {
+ "sitegoodsstockid": 3069181470329925
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1740,
+ "records_with_pk": 1740,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 4,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 4,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 13,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T14:46:34.959226+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18473,
+ "diff": -18472
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23447,
+ "diff": -81
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23447,
+ "diff": -81
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18473,
+ "diff": -87
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 332217.42,
+ "diff": -2612.9799999999814
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5028,
+ "diff": -25
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4774,
+ "diff": -29
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4774,
+ "diff": -29
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11489,
+ "diff": -62
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 48.0,
+ "diff": -48.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17032,
+ "diff": -55
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3,
+ "diff": -3
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 24.0,
+ "diff": -24.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18946
+ },
+ "generated_at": "2026-01-27T14:46:41.674562+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 13,
+ "total_errors": 0
+ },
+ "total_missing": 13,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T14:46:41.674607+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260127_154658.json b/etl_billiards/reports/data_integrity_window_20260127_154658.json
new file mode 100644
index 0000000..87cc37c
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260127_154658.json
@@ -0,0 +1,1250 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T12:44:21+08:00",
+ "end": "2026-01-27T17:44:21+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T12:44:21+08:00",
+ "end": "2026-01-27T17:44:21+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-27T12:44:21+08:00",
+ "end": "2026-01-27T17:44:21+08:00",
+ "cutoff": null,
+ "window_days": 0,
+ "window_hours": 5,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 5,
+ "records_with_pk": 5,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3069269358021957
+ },
+ {
+ "id": 3069269302348997
+ },
+ {
+ "id": 3069238704622661
+ },
+ {
+ "id": 3069238635908229
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9970,
+ "records_with_pk": 9970,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3069269377436805
+ },
+ {
+ "id": 3069269322747205
+ },
+ {
+ "id": 3069238720564421
+ },
+ {
+ "id": 3069238655323205
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11799,
+ "records_with_pk": 11799,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3069269374717061
+ },
+ {
+ "id": 3069269320387909
+ },
+ {
+ "id": 3069238718336197
+ },
+ {
+ "id": 3069238652718149
+ }
+ ],
+ "pages": 59,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17041,
+ "records_with_pk": 17041,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3069270640872645
+ },
+ {
+ "id": 3069252816292933
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2470,
+ "records_with_pk": 2470,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8190,
+ "records_with_pk": 8190,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3069269380353157
+ },
+ {
+ "id": 3069269323533637
+ },
+ {
+ "id": 3069238721170629
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 6,
+ "records_with_pk": 6,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3069279112006725
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1741,
+ "records_with_pk": 1741,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3069238655994949
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 6,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 6,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 19,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T15:46:48.534957+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18474,
+ "diff": -18473
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23448,
+ "diff": -82
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23448,
+ "diff": -82
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 48.0,
+ "diff": -48.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 48.0,
+ "diff": -48.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18474,
+ "diff": -88
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 332217.42,
+ "diff": -2612.9799999999814
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2866,
+ "diff": -17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5028,
+ "diff": -25
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4774,
+ "diff": -29
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4774,
+ "diff": -29
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1,
+ "diff": -1
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 48.0,
+ "diff": -48.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 48.0,
+ "diff": -48.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11490,
+ "diff": -63
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 8,
+ "diff": -8
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 452.0,
+ "diff": -452.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17039,
+ "diff": -62
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 24.0,
+ "diff": -24.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -18967
+ },
+ "generated_at": "2026-01-27T15:46:58.660937+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 19,
+ "total_errors": 0
+ },
+ "total_missing": 19,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T15:46:58.660969+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260127_164657.json b/etl_billiards/reports/data_integrity_window_20260127_164657.json
new file mode 100644
index 0000000..625ab54
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260127_164657.json
@@ -0,0 +1,1279 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T13:44:21+08:00",
+ "end": "2026-01-27T18:44:21+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T13:44:21+08:00",
+ "end": "2026-01-27T18:44:21+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-27T13:44:21+08:00",
+ "end": "2026-01-27T18:44:21+08:00",
+ "cutoff": null,
+ "window_days": 0,
+ "window_hours": 5,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10,
+ "records_with_pk": 10,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3069343017372741
+ },
+ {
+ "id": 3069335073688773
+ },
+ {
+ "id": 3069335023438981
+ },
+ {
+ "id": 3069312330943557
+ },
+ {
+ "id": 3069310506569029
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9975,
+ "records_with_pk": 9975,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3069343035657541
+ },
+ {
+ "id": 3069335093316741
+ },
+ {
+ "id": 3069335041346629
+ },
+ {
+ "id": 3069312347294917
+ },
+ {
+ "id": 3069310527376517
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11804,
+ "records_with_pk": 11804,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3069343033429317
+ },
+ {
+ "id": 3069335090449541
+ },
+ {
+ "id": 3069335039102021
+ },
+ {
+ "id": 3069312345099461
+ },
+ {
+ "id": 3069310524722309
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17043,
+ "records_with_pk": 17043,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3069312743214277
+ },
+ {
+ "id": 3069311491607685
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2470,
+ "records_with_pk": 2470,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8196,
+ "records_with_pk": 8196,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3069343036280133
+ },
+ {
+ "id": 3069335093922949
+ },
+ {
+ "id": 3069335041903685
+ },
+ {
+ "id": 3069335041903686
+ },
+ {
+ "id": 3069312347966661
+ },
+ {
+ "id": 3069310527933573
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3069346477395077
+ },
+ {
+ "sitegoodsstockid": 3069339653590213
+ },
+ {
+ "sitegoodsstockid": 3069330050829445
+ },
+ {
+ "sitegoodsstockid": 3069301909818565
+ },
+ {
+ "sitegoodsstockid": 3069299023432901
+ },
+ {
+ "sitegoodsstockid": 3069298646535301
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1741,
+ "records_with_pk": 1741,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 11,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 11,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 29,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T16:46:50.776877+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18478,
+ "diff": -18477
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 5,
+ "diff": -5
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23452,
+ "diff": -86
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23452,
+ "diff": -86
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 5,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 24.0,
+ "diff": -24.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 192.0,
+ "diff": -192.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 240.0,
+ "diff": -240.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 24.0,
+ "diff": -24.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18478,
+ "diff": -92
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2867,
+ "diff": -18
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 332241.42,
+ "diff": -2636.9799999999814
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2867,
+ "diff": -18
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5028,
+ "diff": -25
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4774,
+ "diff": -29
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4774,
+ "diff": -29
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 4,
+ "diff": -4
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 192.0,
+ "diff": -192.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 192.0,
+ "diff": -192.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11493,
+ "diff": -66
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 9,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 500.0,
+ "diff": -500.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17041,
+ "diff": -64
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 6,
+ "diff": -6
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 24.0,
+ "diff": -24.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19006
+ },
+ "generated_at": "2026-01-27T16:46:57.948203+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 29,
+ "total_errors": 0
+ },
+ "total_missing": 29,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T16:46:57.948234+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260127_174656.json b/etl_billiards/reports/data_integrity_window_20260127_174656.json
new file mode 100644
index 0000000..3bdb047
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260127_174656.json
@@ -0,0 +1,1311 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T14:44:21+08:00",
+ "end": "2026-01-27T19:44:21+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T14:44:21+08:00",
+ "end": "2026-01-27T19:44:21+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-27T14:44:21+08:00",
+ "end": "2026-01-27T19:44:21+08:00",
+ "cutoff": null,
+ "window_days": 0,
+ "window_hours": 5,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 15,
+ "records_with_pk": 15,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3069406529948741
+ },
+ {
+ "id": 3069403912490117
+ },
+ {
+ "id": 3069403467074629
+ },
+ {
+ "id": 3069387495476421
+ },
+ {
+ "id": 3069376910609605
+ },
+ {
+ "id": 3069363119951174
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9980,
+ "records_with_pk": 9980,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3069406549855365
+ },
+ {
+ "id": 3069403487866181
+ },
+ {
+ "id": 3069403487898949
+ },
+ {
+ "id": 3069387515202885
+ },
+ {
+ "id": 3069363272846469
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11810,
+ "records_with_pk": 11810,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3069406547479685
+ },
+ {
+ "id": 3069403964263621
+ },
+ {
+ "id": 3069403484654917
+ },
+ {
+ "id": 3069387513154885
+ },
+ {
+ "id": 3069376933203077
+ },
+ {
+ "id": 3069363270798469
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17047,
+ "records_with_pk": 17047,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3069408707792069
+ },
+ {
+ "id": 3069387415211205
+ },
+ {
+ "id": 3069387257236613
+ },
+ {
+ "id": 3069360863759429
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2472,
+ "records_with_pk": 2472,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3069403964837061
+ },
+ {
+ "id": 3069376933776517
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8197,
+ "records_with_pk": 8197,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3069387515727173
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 21,
+ "records_with_pk": 21,
+ "missing": 14,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3069403966475461
+ },
+ {
+ "sitegoodsstockid": 3069403966311621
+ },
+ {
+ "sitegoodsstockid": 3069403966147781
+ },
+ {
+ "sitegoodsstockid": 3069403365854533
+ },
+ {
+ "sitegoodsstockid": 3069403295993029
+ },
+ {
+ "sitegoodsstockid": 3069403235781701
+ },
+ {
+ "sitegoodsstockid": 3069401598643333
+ },
+ {
+ "sitegoodsstockid": 3069401146821957
+ },
+ {
+ "sitegoodsstockid": 3069401146330437
+ },
+ {
+ "sitegoodsstockid": 3069399619750981
+ },
+ {
+ "sitegoodsstockid": 3069396427672773
+ },
+ {
+ "sitegoodsstockid": 3069383742213317
+ },
+ {
+ "sitegoodsstockid": 3069376935103621
+ },
+ {
+ "sitegoodsstockid": 3069375456906565
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 170,
+ "records_with_pk": 170,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1742,
+ "records_with_pk": 1742,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3069403488718149
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 15,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 15,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 39,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T17:46:49.943286+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18483,
+ "diff": -18482
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 9,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23457,
+ "diff": -91
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23457,
+ "diff": -91
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 9,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 24.0,
+ "diff": -24.0
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 500.0,
+ "diff": -500.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 548.0,
+ "diff": -548.0
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 24.0,
+ "diff": -24.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18483,
+ "diff": -97
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2867,
+ "diff": -18
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 332241.42,
+ "diff": -2636.9799999999814
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2867,
+ "diff": -18
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5028,
+ "diff": -25
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4774,
+ "diff": -29
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4774,
+ "diff": -29
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 9,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 500.0,
+ "diff": -500.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 500.0,
+ "diff": -500.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11499,
+ "diff": -72
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 4,
+ "diff": -4
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 288.0,
+ "diff": -288.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17043,
+ "diff": -66
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 9,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19045
+ },
+ "generated_at": "2026-01-27T17:46:56.000670+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 39,
+ "total_errors": 0
+ },
+ "total_missing": 39,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T17:46:56.000746+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260127_184644.json b/etl_billiards/reports/data_integrity_window_20260127_184644.json
new file mode 100644
index 0000000..7831132
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260127_184644.json
@@ -0,0 +1,1306 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T15:44:21+08:00",
+ "end": "2026-01-27T20:44:21+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T15:44:21+08:00",
+ "end": "2026-01-27T20:44:21+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-27T15:44:21+08:00",
+ "end": "2026-01-27T20:44:21+08:00",
+ "cutoff": null,
+ "window_days": 0,
+ "window_hours": 5,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 15,
+ "records_with_pk": 15,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3069449296252037
+ },
+ {
+ "id": 3069444110224581
+ },
+ {
+ "id": 3069420764007493
+ },
+ {
+ "id": 3069420571200645
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9983,
+ "records_with_pk": 9983,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3069449503050949
+ },
+ {
+ "id": 3069420963990725
+ },
+ {
+ "id": 3069420600904773
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2,
+ "records_with_pk": 2,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3069449503476933
+ },
+ {
+ "id": 3069420964465861
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11814,
+ "records_with_pk": 11814,
+ "missing": 4,
+ "missing_samples": [
+ {
+ "id": 3069449499610309
+ },
+ {
+ "id": 3069444129590597
+ },
+ {
+ "id": 3069420961516741
+ },
+ {
+ "id": 3069420598594629
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17053,
+ "records_with_pk": 17053,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3069465494146373
+ },
+ {
+ "id": 3069462511766597
+ },
+ {
+ "id": 3069461015661894
+ },
+ {
+ "id": 3069461015661893
+ },
+ {
+ "id": 3069452774296901
+ },
+ {
+ "id": 3069429108378949
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2474,
+ "records_with_pk": 2474,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3069449500232901
+ },
+ {
+ "id": 3069444130180421
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8199,
+ "records_with_pk": 8199,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3069468823555397
+ },
+ {
+ "id": 3069420601510981
+ }
+ ],
+ "pages": 41,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "sitegoodsid": 3069455725923269
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 28,
+ "records_with_pk": 28,
+ "missing": 8,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3069459845975109
+ },
+ {
+ "sitegoodsstockid": 3069459845450821
+ },
+ {
+ "sitegoodsstockid": 3069456207727493
+ },
+ {
+ "sitegoodsstockid": 3069456207661957
+ },
+ {
+ "sitegoodsstockid": 3069453684165765
+ },
+ {
+ "sitegoodsstockid": 3069452660247685
+ },
+ {
+ "sitegoodsstockid": 3069444131867973
+ },
+ {
+ "sitegoodsstockid": 3069444131687749
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3069455725923269
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1744,
+ "records_with_pk": 1744,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3069449504246981
+ },
+ {
+ "id": 3069420965416133
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 172,
+ "records_with_pk": 172,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3069455434189829
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 16,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 16,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 36,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T18:46:39.712646+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18488,
+ "diff": -18487
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 10,
+ "diff": -10
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 171,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 170,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23463,
+ "diff": -97
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23463,
+ "diff": -97
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 10,
+ "diff": -10
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 492.97,
+ "diff": -492.97
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 416.83,
+ "diff": -416.83
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 1588.16,
+ "diff": -1588.16
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 104.34,
+ "diff": -104.34
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 574.02,
+ "diff": -574.02
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18488,
+ "diff": -102
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2868,
+ "diff": -19
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 332734.39,
+ "diff": -3129.9500000000116
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2868,
+ "diff": -19
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5028,
+ "diff": -25
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4776,
+ "diff": -31
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4776,
+ "diff": -31
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 7,
+ "diff": -7
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 452.0,
+ "diff": -452.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 416.83,
+ "diff": -416.83
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11500,
+ "diff": -73
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 6,
+ "diff": -6
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 624.0,
+ "diff": -624.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17047,
+ "diff": -70
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 11,
+ "diff": -11
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 675.0,
+ "diff": -675.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19082
+ },
+ "generated_at": "2026-01-27T18:46:44.733274+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 36,
+ "total_errors": 0
+ },
+ "total_missing": 36,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T18:46:44.733344+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260127_194657.json b/etl_billiards/reports/data_integrity_window_20260127_194657.json
new file mode 100644
index 0000000..708c985
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260127_194657.json
@@ -0,0 +1,1291 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T16:44:21+08:00",
+ "end": "2026-01-27T21:44:21+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T16:44:21+08:00",
+ "end": "2026-01-27T21:44:21+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-27T16:44:21+08:00",
+ "end": "2026-01-27T21:44:21+08:00",
+ "cutoff": null,
+ "window_days": 0,
+ "window_hours": 5,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 16,
+ "records_with_pk": 16,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3069521175661893
+ },
+ {
+ "id": 3069513038499013
+ },
+ {
+ "id": 3069508165897349
+ },
+ {
+ "id": 3069503159029061
+ },
+ {
+ "id": 3069498507463813
+ },
+ {
+ "id": 3069468806810757
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9990,
+ "records_with_pk": 9990,
+ "missing": 6,
+ "missing_samples": [
+ {
+ "id": 3069521208397125
+ },
+ {
+ "id": 3069513063763269
+ },
+ {
+ "id": 3069508184149061
+ },
+ {
+ "id": 3069503187389573
+ },
+ {
+ "id": 3069503187373189
+ },
+ {
+ "id": 3069498637159557
+ }
+ ],
+ "pages": 50,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3,
+ "records_with_pk": 3,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3069498637651077
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11820,
+ "records_with_pk": 11820,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3069521206054213
+ },
+ {
+ "id": 3069513061485893
+ },
+ {
+ "id": 3069508181675077
+ },
+ {
+ "id": 3069503184080005
+ },
+ {
+ "id": 3069498633456773
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17058,
+ "records_with_pk": 17058,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3069527606037829
+ },
+ {
+ "id": 3069503737662533
+ },
+ {
+ "id": 3069501231451461
+ },
+ {
+ "id": 3069500594507077
+ },
+ {
+ "id": 3069487747320901
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2476,
+ "records_with_pk": 2476,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3069498634259589
+ },
+ {
+ "id": 3069498634046597
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8202,
+ "records_with_pk": 8202,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "id": 3069513064336709
+ },
+ {
+ "id": 3069508184722501
+ },
+ {
+ "id": 3069508184722502
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 25,
+ "records_with_pk": 25,
+ "missing": 3,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3069473975520453
+ },
+ {
+ "sitegoodsstockid": 3069473974439109
+ },
+ {
+ "sitegoodsstockid": 3069473975028933
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1745,
+ "records_with_pk": 1745,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3069503188339845
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 172,
+ "records_with_pk": 172,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 16,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 16,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 32,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T19:46:51.926185+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18492,
+ "diff": -18491
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 9,
+ "diff": -9
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 172,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23467,
+ "diff": -101
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23467,
+ "diff": -101
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 9,
+ "diff": -9
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 625.88,
+ "diff": -625.88
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 197.58,
+ "diff": -197.58
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 1634.74,
+ "diff": -1634.74
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 104.34,
+ "diff": -104.34
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 706.94,
+ "diff": -706.94
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18492,
+ "diff": -106
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2870,
+ "diff": -21
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 332867.3,
+ "diff": -3262.859999999986
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2870,
+ "diff": -21
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 2,
+ "diff": -2
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 236.39,
+ "diff": -236.39
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5030,
+ "diff": -27
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4778,
+ "diff": -33
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4778,
+ "diff": -33
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3,
+ "diff": -3
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 240.0,
+ "diff": -240.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 197.58,
+ "diff": -197.58
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11502,
+ "diff": -75
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 10,
+ "diff": -10
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 864.0,
+ "diff": -864.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17053,
+ "diff": -76
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 11,
+ "diff": -11
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 997.0,
+ "diff": -997.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19120
+ },
+ "generated_at": "2026-01-27T19:46:57.190523+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 32,
+ "total_errors": 0
+ },
+ "total_missing": 32,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T19:46:57.190544+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260127_204701.json b/etl_billiards/reports/data_integrity_window_20260127_204701.json
new file mode 100644
index 0000000..418aa8e
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260127_204701.json
@@ -0,0 +1,1426 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T17:44:21+08:00",
+ "end": "2026-01-27T22:44:21+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T17:44:21+08:00",
+ "end": "2026-01-27T22:44:21+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-27T17:44:21+08:00",
+ "end": "2026-01-27T22:44:21+08:00",
+ "cutoff": null,
+ "window_days": 0,
+ "window_hours": 5,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 19,
+ "records_with_pk": 19,
+ "missing": 9,
+ "missing_samples": [
+ {
+ "id": 3069583577599109
+ },
+ {
+ "id": 3069579197877317
+ },
+ {
+ "id": 3069563572669637
+ },
+ {
+ "id": 3069550199000197
+ },
+ {
+ "id": 3069547441966277
+ },
+ {
+ "id": 3069547312843845
+ },
+ {
+ "id": 3069540311141509
+ },
+ {
+ "id": 3069537446579269
+ },
+ {
+ "id": 3069537011535173
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10002,
+ "records_with_pk": 10002,
+ "missing": 12,
+ "missing_samples": [
+ {
+ "id": 3069583600553285
+ },
+ {
+ "id": 3069579217538373
+ },
+ {
+ "id": 3069563588234437
+ },
+ {
+ "id": 3069550227917893
+ },
+ {
+ "id": 3069547463675205
+ },
+ {
+ "id": 3069547332472005
+ },
+ {
+ "id": 3069540354575557
+ },
+ {
+ "id": 3069540354591941
+ },
+ {
+ "id": 3069537546620229
+ },
+ {
+ "id": 3069537546636613
+ },
+ {
+ "id": 3069537144048965
+ },
+ {
+ "id": 3069537144065349
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 5,
+ "records_with_pk": 5,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3069537547046213
+ },
+ {
+ "id": 3069537144540485
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11829,
+ "records_with_pk": 11829,
+ "missing": 9,
+ "missing_samples": [
+ {
+ "id": 3069583598325061
+ },
+ {
+ "id": 3069579212688709
+ },
+ {
+ "id": 3069563585940677
+ },
+ {
+ "id": 3069550225607749
+ },
+ {
+ "id": 3069547461250373
+ },
+ {
+ "id": 3069547330227397
+ },
+ {
+ "id": 3069540351478981
+ },
+ {
+ "id": 3069537543179589
+ },
+ {
+ "id": 3069537139985733
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17070,
+ "records_with_pk": 17070,
+ "missing": 12,
+ "missing_samples": [
+ {
+ "id": 3069585874013381
+ },
+ {
+ "id": 3069583920090181
+ },
+ {
+ "id": 3069583419722949
+ },
+ {
+ "id": 3069581359893701
+ },
+ {
+ "id": 3069566724508741
+ },
+ {
+ "id": 3069560753179973
+ },
+ {
+ "id": 3069551635991621
+ },
+ {
+ "id": 3069550428753221
+ },
+ {
+ "id": 3069549636471877
+ },
+ {
+ "id": 3069539710749765
+ },
+ {
+ "id": 3069539173125253
+ },
+ {
+ "id": 3069539042315461
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2478,
+ "records_with_pk": 2478,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3069537543720261
+ },
+ {
+ "id": 3069537140559173
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8211,
+ "records_with_pk": 8211,
+ "missing": 8,
+ "missing_samples": [
+ {
+ "id": 3069583604059461
+ },
+ {
+ "id": 3069579218128197
+ },
+ {
+ "id": 3069579218111813
+ },
+ {
+ "id": 3069563588791493
+ },
+ {
+ "id": 3069547464248645
+ },
+ {
+ "id": 3069547333143749
+ },
+ {
+ "id": 3069540355280069
+ },
+ {
+ "id": 3069540355280070
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 33,
+ "records_with_pk": 33,
+ "missing": 22,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3069575024954565
+ },
+ {
+ "sitegoodsstockid": 3069567826464069
+ },
+ {
+ "sitegoodsstockid": 3069567367531397
+ },
+ {
+ "sitegoodsstockid": 3069567367613317
+ },
+ {
+ "sitegoodsstockid": 3069560107027781
+ },
+ {
+ "sitegoodsstockid": 3069545186774341
+ },
+ {
+ "sitegoodsstockid": 3069532651129925
+ },
+ {
+ "sitegoodsstockid": 3069532653292613
+ },
+ {
+ "sitegoodsstockid": 3069532655324229
+ },
+ {
+ "sitegoodsstockid": 3069532657945669
+ },
+ {
+ "sitegoodsstockid": 3069532650622021
+ },
+ {
+ "sitegoodsstockid": 3069532652784709
+ },
+ {
+ "sitegoodsstockid": 3069532654816325
+ },
+ {
+ "sitegoodsstockid": 3069532651621445
+ },
+ {
+ "sitegoodsstockid": 3069532654308421
+ },
+ {
+ "sitegoodsstockid": 3069532652293189
+ },
+ {
+ "sitegoodsstockid": 3069532653800517
+ },
+ {
+ "sitegoodsstockid": 3069532655832133
+ },
+ {
+ "sitegoodsstockid": 3069532656356421
+ },
+ {
+ "sitegoodsstockid": 3069532656880709
+ },
+ {
+ "sitegoodsstockid": 3069532657404997
+ },
+ {
+ "sitegoodsstockid": 3069532658453573
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1746,
+ "records_with_pk": 1746,
+ "missing": 1,
+ "missing_samples": [
+ {
+ "id": 3069550228720709
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 172,
+ "records_with_pk": 172,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 20,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 20,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 77,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T20:46:54.894452+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18498,
+ "diff": -18497
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 10,
+ "diff": -10
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 1,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 172,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23473,
+ "diff": -107
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23473,
+ "diff": -107
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 10,
+ "diff": -10
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 133.36,
+ "diff": -133.36
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 280.75,
+ "diff": -280.75
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 1249.91,
+ "diff": -1249.91
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 390.03,
+ "diff": -390.03
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 445.77,
+ "diff": -445.77
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18498,
+ "diff": -112
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2871,
+ "diff": -22
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 332867.75,
+ "diff": -3263.3099999999977
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2871,
+ "diff": -22
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3,
+ "diff": -3
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 331.61,
+ "diff": -331.61
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5031,
+ "diff": -28
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4780,
+ "diff": -35
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4780,
+ "diff": -35
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 5,
+ "diff": -5
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 288.0,
+ "diff": -288.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 280.75,
+ "diff": -280.75
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11505,
+ "diff": -78
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 11,
+ "diff": -11
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 808.0,
+ "diff": -808.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17058,
+ "diff": -81
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 10,
+ "diff": -10
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 622.0,
+ "diff": -622.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19164
+ },
+ "generated_at": "2026-01-27T20:47:01.198570+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 77,
+ "total_errors": 0
+ },
+ "total_missing": 77,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T20:47:01.198606+08:00"
+}
diff --git a/etl_billiards/reports/data_integrity_window_20260127_214717.json b/etl_billiards/reports/data_integrity_window_20260127_214717.json
new file mode 100644
index 0000000..3fce826
--- /dev/null
+++ b/etl_billiards/reports/data_integrity_window_20260127_214717.json
@@ -0,0 +1,1494 @@
+{
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T18:44:22+08:00",
+ "end": "2026-01-27T23:44:22+08:00",
+ "segments": 1
+ },
+ "windows": [
+ {
+ "mode": "window",
+ "window": {
+ "start": "2026-01-27T18:44:22+08:00",
+ "end": "2026-01-27T23:44:22+08:00",
+ "label": "segment_1",
+ "granularity": "window"
+ },
+ "api_to_ods": {
+ "window_split_unit": "none",
+ "window_compensation_hours": 0,
+ "start": "2026-01-27T18:44:22+08:00",
+ "end": "2026-01-27T23:44:22+08:00",
+ "cutoff": null,
+ "window_days": 0,
+ "window_hours": 5,
+ "page_size": 200,
+ "chunk_size": 500,
+ "sample_limit": 50,
+ "store_id": 2790685415443269,
+ "base_url": "https://pc.ficoo.vip/apiprod/admin/v1/",
+ "results": [
+ {
+ "task_code": "ODS_ASSISTANT_ACCOUNT",
+ "table": "billiards_ods.assistant_accounts_master",
+ "endpoint": "/PersonnelManagement/SearchAssistantInfo",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 69,
+ "records_with_pk": 69,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_RECORDS",
+ "table": "billiards_ods.settlement_records",
+ "endpoint": "/Site/GetAllOrderSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 27,
+ "records_with_pk": 27,
+ "missing": 12,
+ "missing_samples": [
+ {
+ "id": 3069634632125573
+ },
+ {
+ "id": 3069632780668229
+ },
+ {
+ "id": 3069632217517253
+ },
+ {
+ "id": 3069625367481477
+ },
+ {
+ "id": 3069616408988741
+ },
+ {
+ "id": 3069615734115525
+ },
+ {
+ "id": 3069610893266053
+ },
+ {
+ "id": 3069610827664517
+ },
+ {
+ "id": 3069609511652549
+ },
+ {
+ "id": 3069603722857797
+ },
+ {
+ "id": 3069589365394501
+ },
+ {
+ "id": 3069588118326405
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_USE",
+ "table": "billiards_ods.table_fee_transactions",
+ "endpoint": "/Site/GetSiteTableOrderDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 10013,
+ "records_with_pk": 10013,
+ "missing": 10,
+ "missing_samples": [
+ {
+ "id": 3069634688535749
+ },
+ {
+ "id": 3069632812797125
+ },
+ {
+ "id": 3069632270798021
+ },
+ {
+ "id": 3069625387584581
+ },
+ {
+ "id": 3069616536947781
+ },
+ {
+ "id": 3069615891254469
+ },
+ {
+ "id": 3069610912533701
+ },
+ {
+ "id": 3069610851683397
+ },
+ {
+ "id": 3069609531985221
+ },
+ {
+ "id": 3069603748252869
+ }
+ ],
+ "pages": 51,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_LEDGER",
+ "table": "billiards_ods.assistant_service_records",
+ "endpoint": "/AssistantPerformance/GetOrderAssistantDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 3,
+ "records_with_pk": 3,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_ASSISTANT_ABOLISH",
+ "table": "billiards_ods.assistant_cancellation_records",
+ "endpoint": "/AssistantPerformance/GetAbolitionAssistant",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS_SALES",
+ "table": "billiards_ods.store_goods_sales_records",
+ "endpoint": "/TenantGoods/GetGoodsSalesList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PAYMENT",
+ "table": "billiards_ods.payment_transactions",
+ "endpoint": "/PayLog/GetPayLogListPage",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 11841,
+ "records_with_pk": 11841,
+ "missing": 11,
+ "missing_samples": [
+ {
+ "id": 3069634685308101
+ },
+ {
+ "id": 3069632810060997
+ },
+ {
+ "id": 3069632266996933
+ },
+ {
+ "id": 3069625385389125
+ },
+ {
+ "id": 3069616534391877
+ },
+ {
+ "id": 3069615889009861
+ },
+ {
+ "id": 3069610910289093
+ },
+ {
+ "id": 3069610849209413
+ },
+ {
+ "id": 3069609529527621
+ },
+ {
+ "id": 3069603744992453
+ },
+ {
+ "id": 3069589418200197
+ }
+ ],
+ "pages": 60,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_REFUND",
+ "table": "billiards_ods.refund_transactions",
+ "endpoint": "/Order/GetRefundPayLogList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 38,
+ "records_with_pk": 38,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_PLATFORM_COUPON",
+ "table": "billiards_ods.platform_coupon_redemption_records",
+ "endpoint": "/Promotion/GetOfflineCouponConsumePageList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 17079,
+ "records_with_pk": 17079,
+ "missing": 8,
+ "missing_samples": [
+ {
+ "id": 3069636080979269
+ },
+ {
+ "id": 3069635903065157
+ },
+ {
+ "id": 3069621694581893
+ },
+ {
+ "id": 3069619906513989
+ },
+ {
+ "id": 3069617265577285
+ },
+ {
+ "id": 3069598890986565
+ },
+ {
+ "id": 3069596124515461
+ },
+ {
+ "id": 3069593951833285
+ }
+ ],
+ "pages": 86,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER",
+ "table": "billiards_ods.member_profiles",
+ "endpoint": "/MemberProfile/GetTenantMemberList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 556,
+ "records_with_pk": 556,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 3,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_CARD",
+ "table": "billiards_ods.member_stored_value_cards",
+ "endpoint": "/MemberProfile/GetTenantMemberCardList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 945,
+ "records_with_pk": 945,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 5,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_MEMBER_BALANCE",
+ "table": "billiards_ods.member_balance_changes",
+ "endpoint": "/MemberProfile/GetMemberCardBalanceChange",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 2480,
+ "records_with_pk": 2480,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3069634686274757
+ },
+ {
+ "id": 3069632267603141
+ }
+ ],
+ "pages": 13,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_RECHARGE_SETTLE",
+ "table": "billiards_ods.recharge_settlements",
+ "endpoint": "/Site/GetRechargeSettleList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 0,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_PACKAGE",
+ "table": "billiards_ods.group_buy_packages",
+ "endpoint": "/PackageCoupon/QueryPackageCouponList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 18,
+ "records_with_pk": 18,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GROUP_BUY_REDEMPTION",
+ "table": "billiards_ods.group_buy_redemption_records",
+ "endpoint": "/Site/GetSiteTableUseDetails",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 8216,
+ "records_with_pk": 8216,
+ "missing": 5,
+ "missing_samples": [
+ {
+ "id": 3069625388289093
+ },
+ {
+ "id": 3069610913139909
+ },
+ {
+ "id": 3069610852518981
+ },
+ {
+ "id": 3069609532640581
+ },
+ {
+ "id": 3069603748859077
+ }
+ ],
+ "pages": 42,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_STOCK",
+ "table": "billiards_ods.goods_stock_summary",
+ "endpoint": "/TenantGoods/GetGoodsStockReport",
+ "pk_columns": [
+ "sitegoodsid"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_INVENTORY_CHANGE",
+ "table": "billiards_ods.goods_stock_movements",
+ "endpoint": "/GoodsStockManage/QueryGoodsOutboundReceipt",
+ "pk_columns": [
+ "sitegoodsstockid"
+ ],
+ "records": 102,
+ "records_with_pk": 102,
+ "missing": 77,
+ "missing_samples": [
+ {
+ "sitegoodsstockid": 3069647316765765
+ },
+ {
+ "sitegoodsstockid": 3069647239007557
+ },
+ {
+ "sitegoodsstockid": 3069646941146245
+ },
+ {
+ "sitegoodsstockid": 3069646857063493
+ },
+ {
+ "sitegoodsstockid": 3069646766230853
+ },
+ {
+ "sitegoodsstockid": 3069646432160965
+ },
+ {
+ "sitegoodsstockid": 3069646279117893
+ },
+ {
+ "sitegoodsstockid": 3069646166576453
+ },
+ {
+ "sitegoodsstockid": 3069646048906309
+ },
+ {
+ "sitegoodsstockid": 3069645956992197
+ },
+ {
+ "sitegoodsstockid": 3069645885213829
+ },
+ {
+ "sitegoodsstockid": 3069645802638534
+ },
+ {
+ "sitegoodsstockid": 3069645719981253
+ },
+ {
+ "sitegoodsstockid": 3069645641927877
+ },
+ {
+ "sitegoodsstockid": 3069645553847365
+ },
+ {
+ "sitegoodsstockid": 3069645483248709
+ },
+ {
+ "sitegoodsstockid": 3069645384633413
+ },
+ {
+ "sitegoodsstockid": 3069645313461573
+ },
+ {
+ "sitegoodsstockid": 3069645232803141
+ },
+ {
+ "sitegoodsstockid": 3069645148966085
+ },
+ {
+ "sitegoodsstockid": 3069645055986821
+ },
+ {
+ "sitegoodsstockid": 3069644967644229
+ },
+ {
+ "sitegoodsstockid": 3069644878597445
+ },
+ {
+ "sitegoodsstockid": 3069644774067269
+ },
+ {
+ "sitegoodsstockid": 3069644673993925
+ },
+ {
+ "sitegoodsstockid": 3069644316544325
+ },
+ {
+ "sitegoodsstockid": 3069644213062725
+ },
+ {
+ "sitegoodsstockid": 3069644132584581
+ },
+ {
+ "sitegoodsstockid": 3069643942022277
+ },
+ {
+ "sitegoodsstockid": 3069643843013957
+ },
+ {
+ "sitegoodsstockid": 3069643746888773
+ },
+ {
+ "sitegoodsstockid": 3069643655285957
+ },
+ {
+ "sitegoodsstockid": 3069643359669573
+ },
+ {
+ "sitegoodsstockid": 3069643135929669
+ },
+ {
+ "sitegoodsstockid": 3069642950970501
+ },
+ {
+ "sitegoodsstockid": 3069642870164549
+ },
+ {
+ "sitegoodsstockid": 3069642795175237
+ },
+ {
+ "sitegoodsstockid": 3069642711796869
+ },
+ {
+ "sitegoodsstockid": 3069642615573637
+ },
+ {
+ "sitegoodsstockid": 3069638189976773
+ },
+ {
+ "sitegoodsstockid": 3069637297311045
+ },
+ {
+ "sitegoodsstockid": 3069637298294085
+ },
+ {
+ "sitegoodsstockid": 3069637300718917
+ },
+ {
+ "sitegoodsstockid": 3069637295361349
+ },
+ {
+ "sitegoodsstockid": 3069637298769221
+ },
+ {
+ "sitegoodsstockid": 3069637299752261
+ },
+ {
+ "sitegoodsstockid": 3069637295902021
+ },
+ {
+ "sitegoodsstockid": 3069637296377157
+ },
+ {
+ "sitegoodsstockid": 3069637296835909
+ },
+ {
+ "sitegoodsstockid": 3069637297818949
+ }
+ ],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLES",
+ "table": "billiards_ods.site_tables_master",
+ "endpoint": "/Table/GetSiteTables",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 74,
+ "records_with_pk": 74,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_GOODS_CATEGORY",
+ "table": "billiards_ods.stock_goods_category_tree",
+ "endpoint": "/TenantGoodsCategory/QueryPrimarySecondaryCategory",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 9,
+ "records_with_pk": 9,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_STORE_GOODS",
+ "table": "billiards_ods.store_goods_master",
+ "endpoint": "/TenantGoods/GetGoodsInventoryList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 171,
+ "records_with_pk": 171,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TABLE_FEE_DISCOUNT",
+ "table": "billiards_ods.table_fee_discount_records",
+ "endpoint": "/Site/GetTaiFeeAdjustList",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 1748,
+ "records_with_pk": 1748,
+ "missing": 2,
+ "missing_samples": [
+ {
+ "id": 3069634689305797
+ },
+ {
+ "id": 3069615891860677
+ }
+ ],
+ "pages": 9,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_TENANT_GOODS",
+ "table": "billiards_ods.tenant_goods_master",
+ "endpoint": "/TenantGoods/QueryTenantGoods",
+ "pk_columns": [
+ "id"
+ ],
+ "records": 172,
+ "records_with_pk": 172,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 0,
+ "errors": 0,
+ "error_detail": null
+ },
+ {
+ "task_code": "ODS_SETTLEMENT_TICKET",
+ "table": "billiards_ods.settlement_ticket_details",
+ "endpoint": "/Order/GetOrderSettleTicketNew",
+ "pk_columns": [
+ "ordersettleid"
+ ],
+ "records": 27,
+ "records_with_pk": 0,
+ "missing": 0,
+ "missing_samples": [],
+ "pages": 1,
+ "skipped_missing_pk": 27,
+ "errors": 0,
+ "error_detail": null,
+ "source_endpoint": "/PayLog/GetPayLogListPage"
+ }
+ ],
+ "total_missing": 127,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T21:47:07.780539+08:00"
+ },
+ "ods_to_dwd": {
+ "tables": [
+ {
+ "dwd_table": "billiards_dwd.dim_site",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 1,
+ "ods": 18511,
+ "diff": -18510
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_site_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 20,
+ "diff": -20
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_table_ex",
+ "ods_table": "billiards_ods.site_tables_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 74,
+ "ods": 74,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 69,
+ "ods": 69,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_assistant_ex",
+ "ods_table": "billiards_ods.assistant_accounts_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_ex",
+ "ods_table": "billiards_ods.member_profiles",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 556,
+ "ods": 556,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 945,
+ "ods": 945,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "balance",
+ "dwd_sum": 413038.35,
+ "ods_sum": 413038.35,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_member_card_account_ex",
+ "ods_table": "billiards_ods.member_stored_value_cards",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "deliveryfeededuct",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_tenant_goods_ex",
+ "ods_table": "billiards_ods.tenant_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 171,
+ "ods": 172,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_store_goods_ex",
+ "ods_table": "billiards_ods.store_goods_master",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 170,
+ "ods": 171,
+ "diff": -1
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_goods_category",
+ "ods_table": "billiards_ods.stock_goods_category_tree",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 26,
+ "ods": 9,
+ "diff": 17
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dim_groupbuy_package_ex",
+ "ods_table": "billiards_ods.group_buy_packages",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 34,
+ "ods": 34,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23482,
+ "diff": -116
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_settlement_head_ex",
+ "ods_table": "billiards_ods.settlement_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 23366,
+ "ods": 23482,
+ "diff": -116
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 20,
+ "diff": -20
+ },
+ "amounts": [
+ {
+ "column": "adjust_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 26.77,
+ "diff": -26.77
+ },
+ {
+ "column": "coupon_promotion_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 624.0,
+ "diff": -624.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 1585.37,
+ "diff": -1585.37
+ },
+ {
+ "column": "member_discount_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 390.03,
+ "diff": -390.03
+ },
+ {
+ "column": "real_table_charge_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 544.57,
+ "diff": -544.57
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_log_ex",
+ "ods_table": "billiards_ods.table_fee_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 18386,
+ "ods": 18511,
+ "diff": -125
+ },
+ "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": "billiards_dwd.dwd_table_fee_adjust",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2872,
+ "diff": -23
+ },
+ "amounts": [
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 329604.44,
+ "ods_sum": 332894.07,
+ "diff": -3289.6300000000047
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_table_fee_adjust_ex",
+ "ods_table": "billiards_ods.table_fee_discount_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 2849,
+ "ods": 2872,
+ "diff": -23
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "cost_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "real_goods_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_store_goods_sale_ex",
+ "ods_table": "billiards_ods.store_goods_sales_records",
+ "windowed": false,
+ "window_col": null,
+ "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": "billiards_dwd.dwd_assistant_service_log",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 3,
+ "diff": -3
+ },
+ "amounts": [
+ {
+ "column": "coupon_deduct_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 449.47,
+ "diff": -449.47
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_service_log_ex",
+ "ods_table": "billiards_ods.assistant_service_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 5003,
+ "ods": 5033,
+ "diff": -30
+ },
+ "amounts": [
+ {
+ "column": "manual_discount_amount",
+ "dwd_sum": 414.17,
+ "ods_sum": 414.17,
+ "diff": 0.0
+ },
+ {
+ "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": "billiards_dwd.dwd_assistant_trash_event",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_assistant_trash_event_ex",
+ "ods_table": "billiards_ods.assistant_cancellation_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 98,
+ "ods": 98,
+ "diff": 0
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4782,
+ "diff": -37
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_member_balance_change_ex",
+ "ods_table": "billiards_ods.member_balance_changes",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 4745,
+ "ods": 4782,
+ "diff": -37
+ },
+ "amounts": [
+ {
+ "column": "refund_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 13,
+ "diff": -13
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 720.0,
+ "diff": -720.0
+ },
+ {
+ "column": "ledger_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 624.0,
+ "diff": -624.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_groupbuy_redemption_ex",
+ "ods_table": "billiards_ods.group_buy_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 11427,
+ "ods": 11514,
+ "diff": -87
+ },
+ "amounts": [
+ {
+ "column": "assistant_promotion_money",
+ "dwd_sum": 7544.8,
+ "ods_sum": 7544.8,
+ "diff": 0.0
+ },
+ {
+ "column": "assistant_service_promotion_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": "recharge_promotion_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
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": true,
+ "window_col": "create_time",
+ "count": {
+ "dwd": 0,
+ "ods": 18,
+ "diff": -18
+ },
+ "amounts": [
+ {
+ "column": "coupon_money",
+ "dwd_sum": 0.0,
+ "ods_sum": 1262.0,
+ "diff": -1262.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_platform_coupon_redemption_ex",
+ "ods_table": "billiards_ods.platform_coupon_redemption_records",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 16977,
+ "ods": 17071,
+ "diff": -94
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_recharge_order_ex",
+ "ods_table": "billiards_ods.recharge_settlements",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 455,
+ "ods": 457,
+ "diff": -2
+ },
+ "amounts": []
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_payment",
+ "ods_table": "billiards_ods.payment_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 16,
+ "diff": -16
+ },
+ "amounts": [
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 327.0,
+ "diff": -327.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": true,
+ "window_col": "pay_time",
+ "count": {
+ "dwd": 0,
+ "ods": 0,
+ "diff": 0
+ },
+ "amounts": [
+ {
+ "column": "channel_fee",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ },
+ {
+ "column": "pay_amount",
+ "dwd_sum": 0.0,
+ "ods_sum": 0.0,
+ "diff": 0.0
+ }
+ ]
+ },
+ {
+ "dwd_table": "billiards_dwd.dwd_refund_ex",
+ "ods_table": "billiards_ods.refund_transactions",
+ "windowed": false,
+ "window_col": null,
+ "count": {
+ "dwd": 45,
+ "ods": 45,
+ "diff": 0
+ },
+ "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
+ }
+ ]
+ }
+ ],
+ "total_count_diff": -19278
+ },
+ "generated_at": "2026-01-27T21:47:17.800036+08:00"
+ }
+ ],
+ "api_to_ods": {
+ "total_missing": 127,
+ "total_errors": 0
+ },
+ "total_missing": 127,
+ "total_errors": 0,
+ "generated_at": "2026-01-27T21:47:17.800057+08:00"
+}
diff --git a/etl_billiards/run_gui.bat b/etl_billiards/run_gui.bat
new file mode 100644
index 0000000..f3fc6ab
--- /dev/null
+++ b/etl_billiards/run_gui.bat
@@ -0,0 +1,27 @@
+@echo off
+chcp 65001 >nul
+cd /d "%~dp0"
+
+echo ====================================
+echo 飞球 ETL 管理系统
+echo ====================================
+echo.
+
+REM 检查 Python
+python --version >nul 2>&1
+if errorlevel 1 (
+ echo [错误] 未找到 Python,请先安装 Python 3.10+
+ pause
+ exit /b 1
+)
+
+REM 启动 GUI
+echo 正在启动 GUI...
+python -m gui.main
+
+if errorlevel 1 (
+ echo.
+ echo [错误] 启动失败,请检查依赖是否已安装
+ echo 运行: pip install -r requirements.txt
+ pause
+)
diff --git a/etl_billiards/run_gui.ps1 b/etl_billiards/run_gui.ps1
new file mode 100644
index 0000000..0359234
--- /dev/null
+++ b/etl_billiards/run_gui.ps1
@@ -0,0 +1,42 @@
+# PowerShell 启动脚本
+# 飞球 ETL 管理系统
+
+$ErrorActionPreference = "Stop"
+$OutputEncoding = [System.Text.Encoding]::UTF8
+
+Write-Host "===================================="
+Write-Host " 飞球 ETL 管理系统"
+Write-Host "===================================="
+Write-Host ""
+
+# 切换到脚本目录
+Set-Location $PSScriptRoot
+
+# 检查 Python
+try {
+ $pythonVersion = python --version 2>&1
+ Write-Host "Python 版本: $pythonVersion"
+} catch {
+ Write-Host "[错误] 未找到 Python,请先安装 Python 3.10+" -ForegroundColor Red
+ Read-Host "按回车键退出"
+ exit 1
+}
+
+# 检查 PySide6
+$hasPySide6 = python -c "import PySide6" 2>&1
+if ($LASTEXITCODE -ne 0) {
+ Write-Host "[提示] 正在安装 GUI 依赖..." -ForegroundColor Yellow
+ pip install PySide6
+}
+
+# 启动 GUI
+Write-Host ""
+Write-Host "正在启动 GUI..." -ForegroundColor Cyan
+python -m gui.main
+
+if ($LASTEXITCODE -ne 0) {
+ Write-Host ""
+ Write-Host "[错误] 启动失败" -ForegroundColor Red
+ Write-Host "请运行: pip install -r requirements.txt"
+ Read-Host "按回车键退出"
+}
diff --git a/etl_billiards/run_ods.bat b/etl_billiards/run_ods.bat
index c280d8d..023d10d 100644
--- a/etl_billiards/run_ods.bat
+++ b/etl_billiards/run_ods.bat
@@ -7,7 +7,7 @@ setlocal
cd /d %~dp0
REM 如果需要覆盖示例目录,可修改下面的 INGEST_DIR
-set "INGEST_DIR=C:\dev\LLTQ\export\test-json-doc"
+set "INGEST_DIR=export\\test-json-doc"
echo [INIT_ODS_SCHEMA] 准备执行,源目录=%INGEST_DIR%
python -m cli.main --tasks INIT_ODS_SCHEMA --pipeline-flow INGEST_ONLY --ingest-source "%INGEST_DIR%"
diff --git a/etl_billiards/scripts/Temp1.py b/etl_billiards/scripts/Temp1.py
deleted file mode 100644
index e69de29..0000000
diff --git a/etl_billiards/scripts/__init__.py b/etl_billiards/scripts/__init__.py
new file mode 100644
index 0000000..4484fd2
--- /dev/null
+++ b/etl_billiards/scripts/__init__.py
@@ -0,0 +1 @@
+# Script helpers package marker.
diff --git a/etl_billiards/scripts/backfill_missing_data.py b/etl_billiards/scripts/backfill_missing_data.py
index f1c2240..cdc60c5 100644
--- a/etl_billiards/scripts/backfill_missing_data.py
+++ b/etl_billiards/scripts/backfill_missing_data.py
@@ -240,9 +240,8 @@ class MissingDataBackfiller:
headers_extra=cfg["api"].get("headers_extra") or {},
)
- # 数据库连接
+ # 数据库连接(DatabaseConnection 构造时已设置 autocommit=False)
self.db = DatabaseConnection(dsn=cfg["db"]["dsn"], session=cfg["db"].get("session"))
- self.db.conn.autocommit = False
def close(self):
"""关闭连接"""
@@ -264,7 +263,7 @@ class MissingDataBackfiller:
Returns:
补全结果统计
"""
- self.logger.info("BACKFILL_START start=%s end=%s", start.isoformat(), end.isoformat())
+ self.logger.info("数据补全开始 起始=%s 结束=%s", start.isoformat(), end.isoformat())
# 计算窗口大小
total_seconds = max(0, int((end - start).total_seconds()))
@@ -276,7 +275,7 @@ class MissingDataBackfiller:
window_hours = max(1, total_seconds // 3600 or 1)
# 运行 gap check
- self.logger.info("RUNNING_GAP_CHECK...")
+ self.logger.info("正在执行缺失检查...")
gap_result = run_gap_check(
cfg=self.cfg,
start=start,
@@ -297,10 +296,10 @@ class MissingDataBackfiller:
total_missing = gap_result.get("total_missing", 0)
if total_missing == 0:
- self.logger.info("NO_MISSING_DATA")
+ self.logger.info("数据完整,无缺失记录")
return {"backfilled": 0, "errors": 0, "details": []}
- self.logger.info("GAP_CHECK_DONE total_missing=%s", total_missing)
+ self.logger.info("缺失检查完成 总缺失=%s", total_missing)
# 补全每个任务的丢失数据
results = []
@@ -316,7 +315,7 @@ class MissingDataBackfiller:
continue
self.logger.info(
- "BACKFILL_TASK task=%s missing=%s samples=%s",
+ "开始补全任务 任务=%s 缺失=%s 样本数=%s",
task_code, missing, len(missing_samples)
)
@@ -339,7 +338,7 @@ class MissingDataBackfiller:
})
total_backfilled += backfilled
except Exception as exc:
- self.logger.exception("BACKFILL_ERROR task=%s", task_code)
+ self.logger.exception("补全失败 任务=%s", task_code)
results.append({
"task_code": task_code,
"missing": missing,
@@ -349,7 +348,7 @@ class MissingDataBackfiller:
total_errors += 1
self.logger.info(
- "BACKFILL_DONE total_missing=%s backfilled=%s errors=%s",
+ "数据补全完成 总缺失=%s 已补全=%s 错误数=%s",
total_missing, total_backfilled, total_errors
)
@@ -375,14 +374,14 @@ class MissingDataBackfiller:
"""补全单个任务的丢失数据"""
spec = _get_spec(task_code)
if not spec:
- self.logger.warning("SPEC_NOT_FOUND task=%s", task_code)
+ self.logger.warning("未找到任务规格 任务=%s", task_code)
return 0
if not pk_columns:
pk_columns = _get_table_pk_columns(self.db.conn, table)
if not pk_columns:
- self.logger.warning("NO_PK_COLUMNS task=%s table=%s", task_code, table)
+ self.logger.warning("未找到主键列 任务=%s 表=%s", task_code, table)
return 0
# 提取丢失的 PK 值
@@ -393,11 +392,11 @@ class MissingDataBackfiller:
missing_pks.add(pk_tuple)
if not missing_pks:
- self.logger.info("NO_MISSING_PKS task=%s", task_code)
+ self.logger.info("无缺失主键 任务=%s", task_code)
return 0
self.logger.info(
- "BACKFILL_FETCHING task=%s missing_pks=%s",
+ "开始获取数据 任务=%s 缺失主键数=%s",
task_code, len(missing_pks)
)
@@ -436,7 +435,7 @@ class MissingDataBackfiller:
if self.dry_run:
backfilled += len(records_to_insert)
self.logger.info(
- "DRY_RUN task=%s page=%s would_insert=%s",
+ "模拟运行 任务=%s 页=%s 将插入=%s",
task_code, page_no, len(records_to_insert)
)
else:
@@ -449,14 +448,14 @@ class MissingDataBackfiller:
)
backfilled += inserted
self.logger.info(
- "INSERTED task=%s page=%s count=%s",
+ "已插入 任务=%s 页=%s 数量=%s",
task_code, page_no, inserted
)
if not self.dry_run:
self.db.conn.commit()
- self.logger.info("BACKFILL_TASK_DONE task=%s backfilled=%s", task_code, backfilled)
+ self.logger.info("任务补全完成 任务=%s 已补全=%s", task_code, backfilled)
return backfilled
except Exception:
diff --git a/etl_billiards/scripts/check_data_integrity.py b/etl_billiards/scripts/check_data_integrity.py
new file mode 100644
index 0000000..ffe34f7
--- /dev/null
+++ b/etl_billiards/scripts/check_data_integrity.py
@@ -0,0 +1,169 @@
+# -*- coding: utf-8 -*-
+"""Run data integrity checks across API -> ODS -> DWD."""
+from __future__ import annotations
+
+import argparse
+import json
+import sys
+from datetime import datetime
+from pathlib import Path
+from zoneinfo import ZoneInfo
+
+from dateutil import parser as dtparser
+
+from config.settings import AppConfig
+from quality.integrity_checker import (
+ IntegrityWindow,
+ compute_last_etl_end,
+ run_integrity_history,
+ run_integrity_window,
+)
+from utils.logging_utils import build_log_path, configure_logging
+from utils.windowing import split_window
+
+
+def _parse_dt(value: str, tz: ZoneInfo) -> datetime:
+ dt = dtparser.parse(value)
+ if dt.tzinfo is None:
+ return dt.replace(tzinfo=tz)
+ return dt.astimezone(tz)
+
+
+def main() -> int:
+ if hasattr(sys.stdout, "reconfigure"):
+ try:
+ sys.stdout.reconfigure(encoding="utf-8")
+ except Exception:
+ pass
+
+ ap = argparse.ArgumentParser(description="Data integrity checks (API -> ODS -> DWD)")
+ ap.add_argument("--mode", choices=["history", "window"], default="history")
+ ap.add_argument("--start", default="2025-07-01", help="history start date (default: 2025-07-01)")
+ ap.add_argument("--end", default="", help="history end datetime (default: last ETL end)")
+ ap.add_argument("--window-start", default="", help="window start datetime (mode=window)")
+ ap.add_argument("--window-end", default="", help="window end datetime (mode=window)")
+ ap.add_argument("--window-split-unit", default="", help="split unit (month/none), default from config")
+ ap.add_argument("--window-compensation-hours", type=int, default=None, help="window compensation hours, default from config")
+ ap.add_argument("--include-dimensions", action="store_true", help="include dimension tables in ODS->DWD checks")
+ ap.add_argument("--ods-task-codes", default="", help="comma-separated ODS task codes for API checks")
+ ap.add_argument("--out", default="", help="output JSON path")
+ ap.add_argument("--log-file", default="", help="log file path")
+ ap.add_argument("--log-dir", default="", help="log directory")
+ ap.add_argument("--log-level", default="INFO", help="log level")
+ ap.add_argument("--no-log-console", action="store_true", help="disable console logging")
+ args = ap.parse_args()
+
+ log_dir = Path(args.log_dir) if args.log_dir else (Path(__file__).resolve().parent / "logs")
+ log_file = Path(args.log_file) if args.log_file else build_log_path(log_dir, "data_integrity")
+ log_console = not args.no_log_console
+
+ with configure_logging(
+ "data_integrity",
+ log_file,
+ level=args.log_level,
+ console=log_console,
+ tee_std=True,
+ ) as logger:
+ cfg = AppConfig.load({})
+ tz = ZoneInfo(cfg.get("app.timezone", "Asia/Taipei"))
+ report_path = Path(args.out) if args.out else None
+
+ if args.mode == "window":
+ if not args.window_start or not args.window_end:
+ raise SystemExit("window-start and window-end are required for mode=window")
+ start_dt = _parse_dt(args.window_start, tz)
+ end_dt = _parse_dt(args.window_end, tz)
+ split_unit = (args.window_split_unit or cfg.get("run.window_split.unit", "month") or "month").strip()
+ comp_hours = args.window_compensation_hours
+ if comp_hours is None:
+ comp_hours = cfg.get("run.window_split.compensation_hours", 0)
+
+ windows = split_window(
+ start_dt,
+ end_dt,
+ tz=tz,
+ split_unit=split_unit,
+ compensation_hours=comp_hours,
+ )
+ if not windows:
+ windows = [(start_dt, end_dt)]
+
+ window_reports = []
+ total_missing = 0
+ total_errors = 0
+ for idx, (seg_start, seg_end) in enumerate(windows, start=1):
+ window = IntegrityWindow(
+ start=seg_start,
+ end=seg_end,
+ label=f"segment_{idx}",
+ granularity="window",
+ )
+ payload = run_integrity_window(
+ cfg=cfg,
+ window=window,
+ include_dimensions=args.include_dimensions,
+ task_codes=args.ods_task_codes,
+ logger=logger,
+ write_report=False,
+ report_path=None,
+ window_split_unit="none",
+ window_compensation_hours=0,
+ )
+ window_reports.append(payload)
+ total_missing += int(payload.get("api_to_ods", {}).get("total_missing") or 0)
+ total_errors += int(payload.get("api_to_ods", {}).get("total_errors") or 0)
+
+ overall_start = windows[0][0]
+ overall_end = windows[-1][1]
+ report = {
+ "mode": "window",
+ "window": {
+ "start": overall_start.isoformat(),
+ "end": overall_end.isoformat(),
+ "segments": len(windows),
+ },
+ "windows": window_reports,
+ "api_to_ods": {
+ "total_missing": total_missing,
+ "total_errors": total_errors,
+ },
+ "total_missing": total_missing,
+ "total_errors": total_errors,
+ "generated_at": datetime.now(tz).isoformat(),
+ }
+ if report_path is None:
+ root = Path(__file__).resolve().parents[1]
+ stamp = datetime.now(tz).strftime("%Y%m%d_%H%M%S")
+ report_path = root / "reports" / f"data_integrity_window_{stamp}.json"
+ report_path.parent.mkdir(parents=True, exist_ok=True)
+ report_path.write_text(json.dumps(report, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
+ report["report_path"] = str(report_path)
+ logger.info("REPORT_WRITTEN path=%s", report.get("report_path"))
+ else:
+ start_dt = _parse_dt(args.start, tz)
+ if args.end:
+ end_dt = _parse_dt(args.end, tz)
+ else:
+ end_dt = compute_last_etl_end(cfg) or datetime.now(tz)
+ report = run_integrity_history(
+ cfg=cfg,
+ start_dt=start_dt,
+ end_dt=end_dt,
+ include_dimensions=args.include_dimensions,
+ task_codes=args.ods_task_codes,
+ logger=logger,
+ write_report=True,
+ report_path=report_path,
+ )
+ logger.info("REPORT_WRITTEN path=%s", report.get("report_path"))
+ logger.info(
+ "SUMMARY missing=%s errors=%s",
+ report.get("total_missing"),
+ report.get("total_errors"),
+ )
+
+ return 0
+
+
+if __name__ == "__main__":
+ raise SystemExit(main())
diff --git a/etl_billiards/scripts/check_ods_gaps.py b/etl_billiards/scripts/check_ods_gaps.py
index 6f0b779..58df520 100644
--- a/etl_billiards/scripts/check_ods_gaps.py
+++ b/etl_billiards/scripts/check_ods_gaps.py
@@ -34,6 +34,7 @@ from database.connection import DatabaseConnection
from models.parsers import TypeParser
from tasks.ods_tasks import ENABLED_ODS_CODES, ODS_TASK_SPECS
from utils.logging_utils import build_log_path, configure_logging
+from utils.windowing import split_window
DEFAULT_START = "2025-07-01"
MIN_COMPLETENESS_WINDOW_DAYS = 30
@@ -214,8 +215,7 @@ def _check_spec(
store_id: int,
start: datetime | None,
end: datetime | None,
- window_days: int,
- window_hours: int,
+ windows: list[tuple[datetime, datetime]] | None,
page_size: int,
chunk_size: int,
sample_limit: int,
@@ -249,8 +249,7 @@ def _check_spec(
result["errors"] = 1
result["error_detail"] = "missing start/end for windowed endpoint"
return result
- window_size = timedelta(hours=window_hours) if window_hours > 0 else timedelta(days=window_days)
- windows = list(_iter_windows(start, end, window_size))
+ windows = list(windows or [(start, end)])
else:
windows = [(None, None)]
@@ -377,8 +376,7 @@ def _check_settlement_tickets(
store_id: int,
start: datetime | None,
end: datetime | None,
- window_days: int,
- window_hours: int,
+ windows: list[tuple[datetime, datetime]] | None,
page_size: int,
chunk_size: int,
sample_limit: int,
@@ -415,8 +413,7 @@ def _check_settlement_tickets(
missing_seen: set[tuple] = set()
pay_endpoint = "/PayLog/GetPayLogListPage"
- window_size = timedelta(hours=window_hours) if window_hours > 0 else timedelta(days=window_days)
- windows = list(_iter_windows(start, end, window_size))
+ windows = list(windows or [(start, end)])
logger.info(
"CHECK_START task=%s table=%s windows=%s start=%s end=%s",
result["task_code"],
@@ -571,6 +568,222 @@ def _resolve_window_from_cutoff(
return start, now, cutoff
+def run_gap_check(
+ *,
+ cfg: AppConfig | None,
+ start: datetime | str | None,
+ end: datetime | str | None,
+ window_days: int,
+ window_hours: int,
+ page_size: int,
+ chunk_size: int,
+ sample_limit: int,
+ sleep_per_window: float,
+ sleep_per_page: float,
+ task_codes: str,
+ from_cutoff: bool,
+ cutoff_overlap_hours: int,
+ allow_small_window: bool,
+ logger: logging.Logger,
+ window_split_unit: str | None = None,
+ window_compensation_hours: int | None = None,
+) -> dict:
+ cfg = cfg or AppConfig.load({})
+ tz = ZoneInfo(cfg.get("app.timezone", "Asia/Taipei"))
+ store_id = int(cfg.get("app.store_id") or 0)
+
+ if not cfg.get("api.token"):
+ raise ValueError("missing api.token; please set API_TOKEN in .env")
+
+ window_days = int(window_days)
+ window_hours = int(window_hours)
+ split_unit = (window_split_unit or cfg.get("run.window_split.unit", "month") or "month").strip()
+ comp_hours = window_compensation_hours
+ if comp_hours is None:
+ comp_hours = cfg.get("run.window_split.compensation_hours", 0)
+
+ use_split = split_unit.lower() not in ("", "none", "off", "false", "0")
+ if not use_split and not from_cutoff and not allow_small_window:
+ min_hours = MIN_COMPLETENESS_WINDOW_DAYS * 24
+ if window_hours > 0:
+ if window_hours < min_hours:
+ logger.warning(
+ "window_hours=%s too small for completeness check; adjust to %s",
+ window_hours,
+ min_hours,
+ )
+ window_hours = min_hours
+ elif window_days < MIN_COMPLETENESS_WINDOW_DAYS:
+ logger.warning(
+ "window_days=%s too small for completeness check; adjust to %s",
+ window_days,
+ MIN_COMPLETENESS_WINDOW_DAYS,
+ )
+ window_days = MIN_COMPLETENESS_WINDOW_DAYS
+
+ cutoff = None
+ if from_cutoff:
+ db_tmp = DatabaseConnection(dsn=cfg["db"]["dsn"], session=cfg["db"].get("session"))
+ ods_tables = [s.table_name for s in ODS_TASK_SPECS if s.code in ENABLED_ODS_CODES]
+ start, end, cutoff = _resolve_window_from_cutoff(
+ conn=db_tmp.conn,
+ ods_tables=ods_tables,
+ tz=tz,
+ overlap_hours=cutoff_overlap_hours,
+ )
+ db_tmp.close()
+ else:
+ if not start:
+ start = DEFAULT_START
+ if not end:
+ end = datetime.now(tz)
+ if isinstance(start, str):
+ start = _parse_dt(start, tz, is_end=False)
+ if isinstance(end, str):
+ end = _parse_dt(end, tz, is_end=True)
+
+
+ windows = None
+ if use_split:
+ windows = split_window(
+ start,
+ end,
+ tz=tz,
+ split_unit=split_unit,
+ compensation_hours=comp_hours,
+ )
+ else:
+ adjusted = split_window(
+ start,
+ end,
+ tz=tz,
+ split_unit="none",
+ compensation_hours=comp_hours,
+ )
+ if adjusted:
+ start, end = adjusted[0]
+ window_size = timedelta(hours=window_hours) if window_hours > 0 else timedelta(days=window_days)
+ windows = list(_iter_windows(start, end, window_size))
+
+ if windows:
+ start, end = windows[0][0], windows[-1][1]
+
+ logger.info(
+ "START range=%s~%s window_days=%s window_hours=%s split_unit=%s comp_hours=%s page_size=%s chunk_size=%s",
+ start.isoformat() if isinstance(start, datetime) else None,
+ end.isoformat() if isinstance(end, datetime) else None,
+ window_days,
+ window_hours,
+ split_unit,
+ comp_hours,
+ page_size,
+ chunk_size,
+ )
+ if cutoff:
+ logger.info("CUTOFF=%s overlap_hours=%s", cutoff.isoformat(), cutoff_overlap_hours)
+
+ client = APIClient(
+ base_url=cfg["api"]["base_url"],
+ token=cfg["api"]["token"],
+ timeout=int(cfg["api"].get("timeout_sec") or 20),
+ retry_max=int(cfg["api"].get("retries", {}).get("max_attempts") or 3),
+ headers_extra=cfg["api"].get("headers_extra") or {},
+ )
+
+ db_conn = DatabaseConnection(dsn=cfg["db"]["dsn"], session=cfg["db"].get("session"))
+ try:
+ db_conn.conn.rollback()
+ except Exception:
+ pass
+ db_conn.conn.autocommit = True
+ try:
+ task_filter = {t.strip().upper() for t in (task_codes or "").split(",") if t.strip()}
+ specs = [s for s in ODS_TASK_SPECS if s.code in ENABLED_ODS_CODES]
+ if task_filter:
+ specs = [s for s in specs if s.code in task_filter]
+
+ results: list[dict] = []
+ for spec in specs:
+ if spec.code == "ODS_SETTLEMENT_TICKET":
+ continue
+ result = _check_spec(
+ client=client,
+ db_conn=db_conn.conn,
+ cfg=cfg,
+ tz=tz,
+ logger=logger,
+ spec=spec,
+ store_id=store_id,
+ start=start,
+ end=end,
+ windows=windows,
+ page_size=page_size,
+ chunk_size=chunk_size,
+ sample_limit=sample_limit,
+ sleep_per_window=sleep_per_window,
+ sleep_per_page=sleep_per_page,
+ )
+ results.append(result)
+ logger.info(
+ "CHECK_DONE task=%s missing=%s records=%s errors=%s",
+ result.get("task_code"),
+ result.get("missing"),
+ result.get("records"),
+ result.get("errors"),
+ )
+
+ if (not task_filter) or ("ODS_SETTLEMENT_TICKET" in task_filter):
+ ticket_result = _check_settlement_tickets(
+ client=client,
+ db_conn=db_conn.conn,
+ cfg=cfg,
+ tz=tz,
+ logger=logger,
+ store_id=store_id,
+ start=start,
+ end=end,
+ windows=windows,
+ page_size=page_size,
+ chunk_size=chunk_size,
+ sample_limit=sample_limit,
+ sleep_per_window=sleep_per_window,
+ sleep_per_page=sleep_per_page,
+ )
+ results.append(ticket_result)
+ logger.info(
+ "CHECK_DONE task=%s missing=%s records=%s errors=%s",
+ ticket_result.get("task_code"),
+ ticket_result.get("missing"),
+ ticket_result.get("records"),
+ ticket_result.get("errors"),
+ )
+
+ total_missing = sum(int(r.get("missing") or 0) for r in results)
+ total_errors = sum(int(r.get("errors") or 0) for r in results)
+
+ payload = {
+ "window_split_unit": split_unit,
+ "window_compensation_hours": comp_hours,
+ "start": start.isoformat() if isinstance(start, datetime) else None,
+ "end": end.isoformat() if isinstance(end, datetime) else None,
+ "cutoff": cutoff.isoformat() if cutoff else None,
+ "window_days": window_days,
+ "window_hours": window_hours,
+ "page_size": page_size,
+ "chunk_size": chunk_size,
+ "sample_limit": sample_limit,
+ "store_id": store_id,
+ "base_url": cfg.get("api.base_url"),
+ "results": results,
+ "total_missing": total_missing,
+ "total_errors": total_errors,
+ "generated_at": datetime.now(tz).isoformat(),
+ }
+ return payload
+ finally:
+ db_conn.close()
+
+
def main() -> int:
_reconfigure_stdout_utf8()
ap = argparse.ArgumentParser(description="Check missing ODS records by comparing API vs ODS PKs.")
@@ -578,6 +791,8 @@ def main() -> int:
ap.add_argument("--end", default="", help="end datetime (default: now)")
ap.add_argument("--window-days", type=int, default=1, help="days per API window (default: 1)")
ap.add_argument("--window-hours", type=int, default=0, help="hours per API window (default: 0)")
+ ap.add_argument("--window-split-unit", default="", help="split unit (month/none), default from config")
+ ap.add_argument("--window-compensation-hours", type=int, default=None, help="window compensation hours, default from config")
ap.add_argument("--page-size", type=int, default=200, help="API page size (default: 200)")
ap.add_argument("--chunk-size", type=int, default=500, help="DB query chunk size (default: 500)")
ap.add_argument("--sample-limit", type=int, default=50, help="max missing PK samples per table")
@@ -593,6 +808,11 @@ def main() -> int:
default=24,
help="overlap hours when using --from-cutoff (default: 24)",
)
+ ap.add_argument(
+ "--allow-small-window",
+ action="store_true",
+ help="allow windows smaller than default completeness guard",
+ )
ap.add_argument("--log-file", default="", help="log file path (default: logs/check_ods_gaps_YYYYMMDD_HHMMSS.log)")
ap.add_argument("--log-dir", default="", help="log directory (default: logs)")
ap.add_argument("--log-level", default="INFO", help="log level (default: INFO)")
@@ -611,170 +831,41 @@ def main() -> int:
tee_std=True,
) as logger:
cfg = AppConfig.load({})
+ payload = run_gap_check(
+ cfg=cfg,
+ start=args.start,
+ end=args.end,
+ window_days=args.window_days,
+ window_hours=args.window_hours,
+ page_size=args.page_size,
+ chunk_size=args.chunk_size,
+ sample_limit=args.sample_limit,
+ sleep_per_window=args.sleep_per_window_seconds,
+ sleep_per_page=args.sleep_per_page_seconds,
+ task_codes=args.task_codes,
+ from_cutoff=args.from_cutoff,
+ cutoff_overlap_hours=args.cutoff_overlap_hours,
+ allow_small_window=args.allow_small_window,
+ logger=logger,
+ window_split_unit=args.window_split_unit or None,
+ window_compensation_hours=args.window_compensation_hours,
+ )
+
tz = ZoneInfo(cfg.get("app.timezone", "Asia/Taipei"))
- store_id = int(cfg.get("app.store_id"))
-
- if not cfg.get("api.token"):
- logger.error("missing api.token; please set API_TOKEN in .env")
- raise SystemExit("missing api.token; please set API_TOKEN in .env")
-
- window_days = int(args.window_days)
- window_hours = int(args.window_hours)
- if not args.from_cutoff:
- min_hours = MIN_COMPLETENESS_WINDOW_DAYS * 24
- if window_hours > 0:
- if window_hours < min_hours:
- logger.warning(
- "window_hours=%s too small for completeness check; adjust to %s",
- window_hours,
- min_hours,
- )
- window_hours = min_hours
- elif window_days < MIN_COMPLETENESS_WINDOW_DAYS:
- logger.warning(
- "window_days=%s too small for completeness check; adjust to %s",
- window_days,
- MIN_COMPLETENESS_WINDOW_DAYS,
- )
- window_days = MIN_COMPLETENESS_WINDOW_DAYS
-
- end = datetime.now(tz) if not args.end else _parse_dt(args.end, tz, is_end=True)
- if args.from_cutoff:
- db_tmp = DatabaseConnection(dsn=cfg["db"]["dsn"], session=cfg["db"].get("session"))
- ods_tables = [s.table_name for s in ODS_TASK_SPECS if s.code in ENABLED_ODS_CODES]
- start, end, cutoff = _resolve_window_from_cutoff(
- conn=db_tmp.conn,
- ods_tables=ods_tables,
- tz=tz,
- overlap_hours=args.cutoff_overlap_hours,
- )
- db_tmp.close()
+ if args.out:
+ out_path = Path(args.out)
else:
- start = _parse_dt(args.start, tz, is_end=False)
- cutoff = None
-
+ tag = f"_{args.tag}" if args.tag else ""
+ stamp = datetime.now(tz).strftime("%Y%m%d_%H%M%S")
+ out_path = PROJECT_ROOT / "reports" / f"ods_gap_check{tag}_{stamp}.json"
+ out_path.parent.mkdir(parents=True, exist_ok=True)
+ out_path.write_text(json.dumps(payload, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
+ logger.info("REPORT_WRITTEN path=%s", out_path)
logger.info(
- "START range=%s~%s window_days=%s window_hours=%s page_size=%s chunk_size=%s",
- start.isoformat() if start else None,
- end.isoformat() if end else None,
- window_days,
- window_hours,
- args.page_size,
- args.chunk_size,
+ "SUMMARY missing=%s errors=%s",
+ payload.get("total_missing"),
+ payload.get("total_errors"),
)
- if cutoff:
- logger.info("CUTOFF=%s overlap_hours=%s", cutoff.isoformat(), args.cutoff_overlap_hours)
-
- client = APIClient(
- base_url=cfg["api"]["base_url"],
- token=cfg["api"]["token"],
- timeout=int(cfg["api"].get("timeout_sec") or 20),
- retry_max=int(cfg["api"].get("retries", {}).get("max_attempts") or 3),
- headers_extra=cfg["api"].get("headers_extra") or {},
- )
-
- db_conn = DatabaseConnection(dsn=cfg["db"]["dsn"], session=cfg["db"].get("session"))
- try:
- db_conn.conn.rollback()
- except Exception:
- pass
- db_conn.conn.autocommit = True
- try:
- task_filter = {t.strip().upper() for t in args.task_codes.split(",") if t.strip()}
- specs = [s for s in ODS_TASK_SPECS if s.code in ENABLED_ODS_CODES]
- if task_filter:
- specs = [s for s in specs if s.code in task_filter]
-
- results: list[dict] = []
- for spec in specs:
- if spec.code == "ODS_SETTLEMENT_TICKET":
- continue
- result = _check_spec(
- client=client,
- db_conn=db_conn.conn,
- cfg=cfg,
- tz=tz,
- logger=logger,
- spec=spec,
- store_id=store_id,
- start=start,
- end=end,
- window_days=window_days,
- window_hours=window_hours,
- page_size=args.page_size,
- chunk_size=args.chunk_size,
- sample_limit=args.sample_limit,
- sleep_per_window=args.sleep_per_window_seconds,
- sleep_per_page=args.sleep_per_page_seconds,
- )
- results.append(result)
- logger.info(
- "CHECK_DONE task=%s missing=%s records=%s errors=%s",
- result.get("task_code"),
- result.get("missing"),
- result.get("records"),
- result.get("errors"),
- )
-
- if (not task_filter) or ("ODS_SETTLEMENT_TICKET" in task_filter):
- ticket_result = _check_settlement_tickets(
- client=client,
- db_conn=db_conn.conn,
- cfg=cfg,
- tz=tz,
- logger=logger,
- store_id=store_id,
- start=start,
- end=end,
- window_days=window_days,
- window_hours=window_hours,
- page_size=args.page_size,
- chunk_size=args.chunk_size,
- sample_limit=args.sample_limit,
- sleep_per_window=args.sleep_per_window_seconds,
- sleep_per_page=args.sleep_per_page_seconds,
- )
- results.append(ticket_result)
- logger.info(
- "CHECK_DONE task=%s missing=%s records=%s errors=%s",
- ticket_result.get("task_code"),
- ticket_result.get("missing"),
- ticket_result.get("records"),
- ticket_result.get("errors"),
- )
-
- total_missing = sum(int(r.get("missing") or 0) for r in results)
- total_errors = sum(int(r.get("errors") or 0) for r in results)
-
- if args.out:
- out_path = Path(args.out)
- else:
- tag = f"_{args.tag}" if args.tag else ""
- stamp = datetime.now(tz).strftime("%Y%m%d_%H%M%S")
- out_path = PROJECT_ROOT / "reports" / f"ods_gap_check{tag}_{stamp}.json"
- out_path.parent.mkdir(parents=True, exist_ok=True)
-
- payload = {
- "start": start.isoformat(),
- "end": end.isoformat(),
- "cutoff": cutoff.isoformat() if cutoff else None,
- "window_days": window_days,
- "window_hours": window_hours,
- "page_size": args.page_size,
- "chunk_size": args.chunk_size,
- "sample_limit": args.sample_limit,
- "store_id": store_id,
- "base_url": cfg.get("api.base_url"),
- "results": results,
- "total_missing": total_missing,
- "total_errors": total_errors,
- "generated_at": datetime.now(tz).isoformat(),
- }
- out_path.write_text(json.dumps(payload, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
- logger.info("REPORT_WRITTEN path=%s", out_path)
- logger.info("SUMMARY missing=%s errors=%s", total_missing, total_errors)
- finally:
- db_conn.close()
return 0
diff --git a/etl_billiards/scripts/check_ods_json_vs_table.py b/etl_billiards/scripts/check_ods_json_vs_table.py
index 6727566..df188d6 100644
--- a/etl_billiards/scripts/check_ods_json_vs_table.py
+++ b/etl_billiards/scripts/check_ods_json_vs_table.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
"""
-ODS JSON 字段核对脚本:对照当前数据库中的 ODS 表字段,检查示例 JSON(默认目录 C:\\dev\\LLTQ\\export\\test-json-doc)
+ODS JSON 字段核对脚本:对照当前数据库中的 ODS 表字段,检查示例 JSON(默认目录 export/test-json-doc)
是否包含同名键,并输出每表未命中的字段,便于补充映射或确认确实无源字段。
使用方法:
@@ -69,7 +69,7 @@ def _load_ods_columns(dsn: str) -> Dict[str, Set[str]]:
def main() -> None:
"""主流程:遍历 FILE_MAPPING 中的 ODS 表,检查 JSON 键覆盖情况并打印报告。"""
dsn = os.environ.get("PG_DSN")
- json_dir = pathlib.Path(os.environ.get("JSON_DOC_DIR", r"C:\dev\LLTQ\export\test-json-doc"))
+ json_dir = pathlib.Path(os.environ.get("JSON_DOC_DIR", "export/test-json-doc"))
ods_cols_map = _load_ods_columns(dsn)
diff --git a/etl_billiards/scripts/rebuild_db_and_run_ods_to_dwd.py b/etl_billiards/scripts/rebuild_db_and_run_ods_to_dwd.py
index f2c2686..c0ecde7 100644
--- a/etl_billiards/scripts/rebuild_db_and_run_ods_to_dwd.py
+++ b/etl_billiards/scripts/rebuild_db_and_run_ods_to_dwd.py
@@ -13,7 +13,7 @@
python -m etl_billiards.scripts.rebuild_db_and_run_ods_to_dwd ^
--dsn "postgresql://user:pwd@host:5432/db" ^
--store-id 1 ^
- --json-dir "C:\\dev\\LLTQ\\export\\test-json-doc" ^
+ --json-dir "export/test-json-doc" ^
--drop-schemas
环境变量(可选):
@@ -44,7 +44,7 @@ from etl_billiards.tasks.init_schema_task import InitOdsSchemaTask
from etl_billiards.tasks.manual_ingest_task import ManualIngestTask
-DEFAULT_JSON_DIR = r"C:\dev\LLTQ\export\test-json-doc"
+DEFAULT_JSON_DIR = "export/test-json-doc"
@dataclass(frozen=True)
diff --git a/etl_billiards/scripts/rebuild_ods_from_json.py b/etl_billiards/scripts/rebuild_ods_from_json.py
index 0491afb..137a630 100644
--- a/etl_billiards/scripts/rebuild_ods_from_json.py
+++ b/etl_billiards/scripts/rebuild_ods_from_json.py
@@ -7,7 +7,7 @@
依赖环境变量:
PG_DSN PostgreSQL 连接串(必填)
PG_CONNECT_TIMEOUT 可选,秒,默认 10
- JSON_DOC_DIR 可选,JSON 目录,默认 C:\\dev\\LLTQ\\export\\test-json-doc
+ JSON_DOC_DIR 可选,JSON 目录,默认 export/test-json-doc
ODS_INCLUDE_FILES 可选,逗号分隔文件名(不含 .json)
ODS_DROP_SCHEMA_FIRST 可选,true/false,默认 true
"""
@@ -26,7 +26,7 @@ from psycopg2 import sql
from psycopg2.extras import Json, execute_values
-DEFAULT_JSON_DIR = r"C:\dev\LLTQ\export\test-json-doc"
+DEFAULT_JSON_DIR = "export/test-json-doc"
SPECIAL_LIST_PATHS: dict[str, tuple[str, ...]] = {
"assistant_accounts_master": ("data", "assistantInfos"),
"assistant_cancellation_records": ("data", "abolitionAssistants"),
diff --git a/etl_billiards/scripts/reload_ods_windowed.py b/etl_billiards/scripts/reload_ods_windowed.py
index c18570d..fc305e0 100644
--- a/etl_billiards/scripts/reload_ods_windowed.py
+++ b/etl_billiards/scripts/reload_ods_windowed.py
@@ -20,10 +20,12 @@ if str(PROJECT_ROOT) not in sys.path:
sys.path.insert(0, str(PROJECT_ROOT))
from config.settings import AppConfig
+from utils.windowing import split_window
from utils.logging_utils import build_log_path, configure_logging
MIN_RELOAD_WINDOW_DAYS = 30
+
def _parse_dt(value: str, tz: ZoneInfo, *, is_end: bool) -> datetime:
raw = (value or "").strip()
if not raw:
@@ -56,6 +58,8 @@ def _run_task_window(
api_page_size: int,
api_timeout: int,
logger: logging.Logger,
+ window_split_unit: str | None = "none",
+ window_compensation_hours: int | None = 0,
) -> None:
cmd = [
sys.executable,
@@ -70,6 +74,10 @@ def _run_task_window(
"--window-end",
window_end.strftime("%Y-%m-%d %H:%M:%S"),
"--force-window-override",
+ "--window-split-unit",
+ str(window_split_unit or "none"),
+ "--window-compensation-hours",
+ str(int(window_compensation_hours or 0)),
]
if api_page_size > 0:
cmd += ["--api-page-size", str(api_page_size)]
@@ -92,6 +100,8 @@ def main() -> int:
ap.add_argument("--end", default="", help="end datetime (default: now)")
ap.add_argument("--window-days", type=int, default=1, help="days per window (default: 1)")
ap.add_argument("--window-hours", type=int, default=0, help="hours per window (default: 0)")
+ ap.add_argument("--window-split-unit", default="", help="split unit (month/none), default from config")
+ ap.add_argument("--window-compensation-hours", type=int, default=None, help="window compensation hours, default from config")
ap.add_argument("--sleep-seconds", type=float, default=0, help="sleep seconds after each window")
ap.add_argument("--api-page-size", type=int, default=200, help="API page size override")
ap.add_argument("--api-timeout", type=int, default=20, help="API timeout seconds override")
@@ -119,40 +129,70 @@ def main() -> int:
end = datetime.now(tz) if not args.end else _parse_dt(args.end, tz, is_end=True)
window_days = int(args.window_days)
window_hours = int(args.window_hours)
- min_hours = MIN_RELOAD_WINDOW_DAYS * 24
- if window_hours > 0:
- if window_hours < min_hours:
- logger.warning(
- "window_hours=%s too small; adjust to %s",
- window_hours,
- min_hours,
- )
- window_hours = min_hours
- elif window_days < MIN_RELOAD_WINDOW_DAYS:
- logger.warning(
- "window_days=%s too small; adjust to %s",
- window_days,
- MIN_RELOAD_WINDOW_DAYS,
+ split_unit = (args.window_split_unit or cfg.get("run.window_split.unit", "month") or "month").strip()
+ comp_hours = args.window_compensation_hours
+ if comp_hours is None:
+ comp_hours = cfg.get("run.window_split.compensation_hours", 0)
+
+ use_split = split_unit.lower() not in ("", "none", "off", "false", "0")
+ if use_split:
+ windows = split_window(
+ start,
+ end,
+ tz=tz,
+ split_unit=split_unit,
+ compensation_hours=comp_hours,
)
- window_days = MIN_RELOAD_WINDOW_DAYS
- window_size = timedelta(hours=window_hours) if window_hours > 0 else timedelta(days=window_days)
+ else:
+ min_hours = MIN_RELOAD_WINDOW_DAYS * 24
+ if window_hours > 0:
+ if window_hours < min_hours:
+ logger.warning(
+ "window_hours=%s too small; adjust to %s",
+ window_hours,
+ min_hours,
+ )
+ window_hours = min_hours
+ elif window_days < MIN_RELOAD_WINDOW_DAYS:
+ logger.warning(
+ "window_days=%s too small; adjust to %s",
+ window_days,
+ MIN_RELOAD_WINDOW_DAYS,
+ )
+ window_days = MIN_RELOAD_WINDOW_DAYS
+ adjusted = split_window(
+ start,
+ end,
+ tz=tz,
+ split_unit="none",
+ compensation_hours=comp_hours,
+ )
+ if adjusted:
+ start, end = adjusted[0]
+ window_size = timedelta(hours=window_hours) if window_hours > 0 else timedelta(days=window_days)
+ windows = list(_iter_windows(start, end, window_size))
+
+ if windows:
+ start, end = windows[0][0], windows[-1][1]
task_codes = [t.strip().upper() for t in args.tasks.split(",") if t.strip()]
if not task_codes:
raise SystemExit("no tasks specified")
logger.info(
- "START range=%s~%s window_days=%s window_hours=%s sleep=%.2f",
+ "START range=%s~%s window_days=%s window_hours=%s split_unit=%s comp_hours=%s sleep=%.2f",
start.isoformat(),
end.isoformat(),
window_days,
window_hours,
+ split_unit,
+ comp_hours,
args.sleep_seconds,
)
for task_code in task_codes:
logger.info("TASK_START task=%s", task_code)
- for window_start, window_end in _iter_windows(start, end, window_size):
+ for window_start, window_end in windows:
start_ts = time_mod.monotonic()
_run_task_window(
task_code=task_code,
@@ -161,6 +201,8 @@ def main() -> int:
api_page_size=args.api_page_size,
api_timeout=args.api_timeout,
logger=logger,
+ window_split_unit="none",
+ window_compensation_hours=0,
)
elapsed = time_mod.monotonic() - start_ts
logger.info(
diff --git a/etl_billiards/tasks/base_task.py b/etl_billiards/tasks/base_task.py
index 592def8..988c176 100644
--- a/etl_billiards/tasks/base_task.py
+++ b/etl_billiards/tasks/base_task.py
@@ -7,6 +7,8 @@ from datetime import datetime, timedelta
from zoneinfo import ZoneInfo
from dateutil import parser as dtparser
+from utils.windowing import build_window_segments, calc_window_minutes
+
@dataclass(frozen=True)
class TaskContext:
@@ -50,35 +52,72 @@ class BaseTask:
# ------------------------------------------------------------------ 主流程
def execute(self, cursor_data: dict | None = None) -> dict:
"""统一 orchestrate Extract → Transform → Load"""
- context = self._build_context(cursor_data)
+ base_context = self._build_context(cursor_data)
task_code = self.get_task_code()
- self.logger.info(
- "%s: 开始执行,窗口[%s ~ %s]",
- task_code,
- context.window_start,
- context.window_end,
+ segments = build_window_segments(
+ self.config,
+ base_context.window_start,
+ base_context.window_end,
+ tz=self.tz,
+ override_only=True,
)
+ if not segments:
+ segments = [(base_context.window_start, base_context.window_end)]
- try:
- extracted = self.extract(context)
- transformed = self.transform(extracted, context)
- counts = self.load(transformed, context) or {}
- self.db.commit()
- except Exception:
- self.db.rollback()
- self.logger.error("%s: 执行失败", task_code, exc_info=True)
- raise
+ total_segments = len(segments)
+ if total_segments > 1:
+ self.logger.info("%s: 窗口拆分为 %s 段", task_code, total_segments)
- result = self._build_result("SUCCESS", counts)
+ total_counts: dict = {}
+ segment_results: list[dict] = []
+
+ for idx, (window_start, window_end) in enumerate(segments, start=1):
+ context = self._build_context_for_window(window_start, window_end, cursor_data)
+ self.logger.info(
+ "%s: 开始执行(%s/%s),窗口[%s ~ %s]",
+ task_code,
+ idx,
+ total_segments,
+ context.window_start,
+ context.window_end,
+ )
+
+ try:
+ extracted = self.extract(context)
+ transformed = self.transform(extracted, context)
+ counts = self.load(transformed, context) or {}
+ self.db.commit()
+ except Exception:
+ self.db.rollback()
+ self.logger.error("%s: 执行失败", task_code, exc_info=True)
+ raise
+
+ self._accumulate_counts(total_counts, counts)
+ if total_segments > 1:
+ segment_results.append(
+ {
+ "window": {
+ "start": context.window_start,
+ "end": context.window_end,
+ "minutes": context.window_minutes,
+ },
+ "counts": counts,
+ }
+ )
+
+ overall_start = segments[0][0]
+ overall_end = segments[-1][1]
+ result = self._build_result("SUCCESS", total_counts)
result["window"] = {
- "start": context.window_start,
- "end": context.window_end,
- "minutes": context.window_minutes,
+ "start": overall_start,
+ "end": overall_end,
+ "minutes": calc_window_minutes(overall_start, overall_end),
}
+ if segment_results:
+ result["segments"] = segment_results
self.logger.info("%s: 完成,统计=%s", task_code, result["counts"])
return result
- # ------------------------------------------------------------------ 辅助方法
def _build_context(self, cursor_data: dict | None) -> TaskContext:
window_start, window_end, window_minutes = self._get_time_window(cursor_data)
return TaskContext(
@@ -89,6 +128,29 @@ class BaseTask:
cursor=cursor_data,
)
+ def _build_context_for_window(
+ self,
+ window_start: datetime,
+ window_end: datetime,
+ cursor_data: dict | None,
+ ) -> TaskContext:
+ return TaskContext(
+ store_id=self.config.get("app.store_id"),
+ window_start=window_start,
+ window_end=window_end,
+ window_minutes=calc_window_minutes(window_start, window_end),
+ cursor=cursor_data,
+ )
+
+ @staticmethod
+ def _accumulate_counts(total: dict, current: dict) -> dict:
+ for key, value in (current or {}).items():
+ if isinstance(value, (int, float)):
+ total[key] = (total.get(key) or 0) + value
+ else:
+ total.setdefault(key, value)
+ return total
+
def _get_time_window(self, cursor_data: dict = None) -> tuple:
"""计算时间窗口"""
now = datetime.now(self.tz)
diff --git a/etl_billiards/tasks/check_cutoff_task.py b/etl_billiards/tasks/check_cutoff_task.py
index e9f1961..b64a176 100644
--- a/etl_billiards/tasks/check_cutoff_task.py
+++ b/etl_billiards/tasks/check_cutoff_task.py
@@ -44,10 +44,10 @@ class CheckCutoffTask(BaseTask):
def _ts(v: Any) -> str:
return "-" if not v else str(v)
- self.logger.info("CHECK_CUTOFF: store_id=%s enabled_tasks=%s", store_id, len(rows))
+ self.logger.info("截止时间检查: 门店ID=%s 启用任务数=%s", store_id, len(rows))
for r in rows:
self.logger.info(
- "CHECK_CUTOFF: %-24s last_end=%s last_start=%s last_run_id=%s",
+ "截止时间检查: %-24s 结束时间=%s 开始时间=%s 运行ID=%s",
str(r.get("task_code") or ""),
_ts(r.get("last_end")),
_ts(r.get("last_start")),
@@ -60,23 +60,23 @@ class CheckCutoffTask(BaseTask):
if r.get("last_end") is not None and not str(r.get("task_code", "")).upper().startswith("INIT_")
]
cutoff = min(cutoff_candidates) if cutoff_candidates else None
- self.logger.info("CHECK_CUTOFF: overall_cutoff(min last_end, excl INIT_*)=%s", _ts(cutoff))
+ self.logger.info("截止时间检查: 总体截止时间(最小结束时间,排除INIT_*)=%s", _ts(cutoff))
ods_fetched = self._probe_ods_fetched_at(store_id)
if ods_fetched:
non_null = [v["max_fetched_at"] for v in ods_fetched.values() if v.get("max_fetched_at") is not None]
ods_cutoff = min(non_null) if non_null else None
- self.logger.info("CHECK_CUTOFF: ODS cutoff(min MAX(fetched_at))=%s", _ts(ods_cutoff))
+ self.logger.info("截止时间检查: ODS截止时间(最小抓取时间)=%s", _ts(ods_cutoff))
worst = sorted(
((k, v.get("max_fetched_at")) for k, v in ods_fetched.items()),
key=lambda kv: (kv[1] is None, kv[1]),
)[:8]
for table, mx in worst:
- self.logger.info("CHECK_CUTOFF: ODS table=%s max_fetched_at=%s", table, _ts(mx))
+ self.logger.info("截止时间检查: ODS表=%s 最大抓取时间=%s", table, _ts(mx))
dw_checks = self._probe_dw_time_columns()
for name, value in dw_checks.items():
- self.logger.info("CHECK_CUTOFF: %s=%s", name, _ts(value))
+ self.logger.info("截止时间检查: %s=%s", name, _ts(value))
return {
"status": "SUCCESS",
diff --git a/etl_billiards/tasks/data_integrity_task.py b/etl_billiards/tasks/data_integrity_task.py
new file mode 100644
index 0000000..bba9b1d
--- /dev/null
+++ b/etl_billiards/tasks/data_integrity_task.py
@@ -0,0 +1,212 @@
+# -*- coding: utf-8 -*-
+"""Data integrity task that checks API -> ODS -> DWD completeness."""
+from __future__ import annotations
+
+from datetime import datetime
+from zoneinfo import ZoneInfo
+
+from dateutil import parser as dtparser
+
+import json
+from pathlib import Path
+from utils.windowing import build_window_segments, calc_window_minutes
+from .base_task import BaseTask
+from quality.integrity_checker import (
+ IntegrityWindow,
+ compute_last_etl_end,
+ run_integrity_history,
+ run_integrity_window,
+)
+
+
+class DataIntegrityTask(BaseTask):
+ """Check data completeness across API -> ODS -> DWD."""
+
+ def get_task_code(self) -> str:
+ return "DATA_INTEGRITY_CHECK"
+
+ def execute(self, cursor_data: dict | None = None) -> dict:
+ tz = ZoneInfo(self.config.get("app.timezone", "Asia/Taipei"))
+ mode = str(self.config.get("integrity.mode", "history") or "history").lower()
+ include_dimensions = bool(self.config.get("integrity.include_dimensions", False))
+ task_codes = str(self.config.get("integrity.ods_task_codes", "") or "").strip()
+ auto_backfill = bool(self.config.get("integrity.auto_backfill", False))
+
+ # 检测是否通过 CLI 传入了时间窗口参数(window_override)
+ # 如果有,自动切换到 window 模式
+ window_override_start = self.config.get("run.window_override.start")
+ window_override_end = self.config.get("run.window_override.end")
+ if window_override_start or window_override_end:
+ self.logger.info(
+ "检测到 CLI 时间窗口参数,自动切换到 window 模式: %s ~ %s",
+ window_override_start, window_override_end
+ )
+ mode = "window"
+
+ if mode == "window":
+ base_start, base_end, _ = self._get_time_window(cursor_data)
+ segments = build_window_segments(
+ self.config,
+ base_start,
+ base_end,
+ tz=tz,
+ override_only=True,
+ )
+ if not segments:
+ segments = [(base_start, base_end)]
+
+ total_segments = len(segments)
+ if total_segments > 1:
+ self.logger.info("数据完整性检查: 分段执行 共%s段", total_segments)
+
+ window_reports = []
+ total_missing = 0
+ total_errors = 0
+ for idx, (seg_start, seg_end) in enumerate(segments, start=1):
+ window = IntegrityWindow(
+ start=seg_start,
+ end=seg_end,
+ label=f"segment_{idx}",
+ granularity="window",
+ )
+ payload = run_integrity_window(
+ cfg=self.config,
+ window=window,
+ include_dimensions=include_dimensions,
+ task_codes=task_codes,
+ logger=self.logger,
+ write_report=False,
+ window_split_unit="none",
+ window_compensation_hours=0,
+ )
+ window_reports.append(payload)
+ total_missing += int(payload.get("api_to_ods", {}).get("total_missing") or 0)
+ total_errors += int(payload.get("api_to_ods", {}).get("total_errors") or 0)
+
+ overall_start = segments[0][0]
+ overall_end = segments[-1][1]
+ report = {
+ "mode": "window",
+ "window": {
+ "start": overall_start.isoformat(),
+ "end": overall_end.isoformat(),
+ "segments": total_segments,
+ },
+ "windows": window_reports,
+ "api_to_ods": {
+ "total_missing": total_missing,
+ "total_errors": total_errors,
+ },
+ "total_missing": total_missing,
+ "total_errors": total_errors,
+ "generated_at": datetime.now(tz).isoformat(),
+ }
+ report_path = self._write_report(report, "data_integrity_window")
+ report["report_path"] = report_path
+
+ missing_count = int(total_missing or 0)
+ counts = {
+ "missing": missing_count,
+ "errors": int(total_errors or 0),
+ }
+
+ # ????
+ backfill_result = None
+ if auto_backfill and missing_count > 0:
+ backfill_result = self._run_backfill(base_start, base_end, task_codes)
+ counts["backfilled"] = backfill_result.get("backfilled", 0)
+
+ return {
+ "status": "SUCCESS",
+ "counts": counts,
+ "window": {
+ "start": overall_start,
+ "end": overall_end,
+ "minutes": calc_window_minutes(overall_start, overall_end),
+ },
+ "report_path": report_path,
+ "backfill_result": backfill_result,
+ }
+
+ history_start = str(self.config.get("integrity.history_start", "2025-07-01") or "2025-07-01")
+ history_end = str(self.config.get("integrity.history_end", "") or "").strip()
+ start_dt = dtparser.parse(history_start)
+ if start_dt.tzinfo is None:
+ start_dt = start_dt.replace(tzinfo=tz)
+ else:
+ start_dt = start_dt.astimezone(tz)
+
+ if history_end:
+ end_dt = dtparser.parse(history_end)
+ if end_dt.tzinfo is None:
+ end_dt = end_dt.replace(tzinfo=tz)
+ else:
+ end_dt = end_dt.astimezone(tz)
+ else:
+ end_dt = compute_last_etl_end(self.config) or datetime.now(tz)
+
+ report = run_integrity_history(
+ cfg=self.config,
+ start_dt=start_dt,
+ end_dt=end_dt,
+ include_dimensions=include_dimensions,
+ task_codes=task_codes,
+ logger=self.logger,
+ write_report=True,
+ )
+ missing_count = int(report.get("total_missing") or 0)
+ counts = {
+ "missing": missing_count,
+ "errors": int(report.get("total_errors") or 0),
+ }
+
+ # 自动补全
+ backfill_result = None
+ if auto_backfill and missing_count > 0:
+ backfill_result = self._run_backfill(start_dt, end_dt, task_codes)
+ counts["backfilled"] = backfill_result.get("backfilled", 0)
+
+ return {
+ "status": "SUCCESS",
+ "counts": counts,
+ "window": {
+ "start": start_dt,
+ "end": end_dt,
+ "minutes": int((end_dt - start_dt).total_seconds() // 60) if end_dt > start_dt else 0,
+ },
+ "report_path": report.get("report_path"),
+ "backfill_result": backfill_result,
+ }
+
+ def _write_report(self, report: dict, prefix: str) -> str:
+ root = Path(__file__).resolve().parents[1]
+ stamp = datetime.now(self.tz).strftime("%Y%m%d_%H%M%S")
+ path = root / "reports" / f"{prefix}_{stamp}.json"
+ path.parent.mkdir(parents=True, exist_ok=True)
+ path.write_text(json.dumps(report, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
+ return str(path)
+
+ def _run_backfill(self, start_dt: datetime, end_dt: datetime, task_codes: str) -> dict:
+ """运行数据补全"""
+ self.logger.info("自动补全开始 起始=%s 结束=%s", start_dt, end_dt)
+ try:
+ from scripts.backfill_missing_data import run_backfill
+ result = run_backfill(
+ cfg=self.config,
+ start=start_dt,
+ end=end_dt,
+ task_codes=task_codes or None,
+ dry_run=False,
+ page_size=200,
+ chunk_size=500,
+ logger=self.logger,
+ )
+ self.logger.info(
+ "自动补全完成 已补全=%s 错误数=%s",
+ result.get("backfilled", 0),
+ result.get("errors", 0),
+ )
+ return result
+ except Exception as exc:
+ self.logger.exception("自动补全失败")
+ return {"backfilled": 0, "errors": 1, "error": str(exc)}
diff --git a/etl_billiards/tasks/dwd_load_task.py b/etl_billiards/tasks/dwd_load_task.py
index 5f1265f..f7e841c 100644
--- a/etl_billiards/tasks/dwd_load_task.py
+++ b/etl_billiards/tasks/dwd_load_task.py
@@ -72,6 +72,10 @@ class DwdLoadTask(BaseTask):
"start_use_time",
"fetched_at",
]
+ # 对于会出现“回补旧记录”的事实表,额外补齐缺失主键记录
+ FACT_MISSING_FILL_TABLES = {
+ "billiards_dwd.dwd_assistant_service_log",
+ }
# 特殊列映射:dwd 列名 -> 源列表达式(可选 CAST)
FACT_MAPPINGS: dict[str, list[tuple[str, str, str | None]]] = {
@@ -697,7 +701,14 @@ class DwdLoadTask(BaseTask):
if not select_exprs:
return 0
- cur.execute(f"SELECT {', '.join(select_exprs)} FROM {ods_table_sql}")
+ # 对于 dim_site 和 dim_site_ex,使用 DISTINCT ON 优化查询
+ # 避免从大表 table_fee_transactions 全表扫描,只获取每个 site_id 的最新记录
+ if dwd_table in ("billiards_dwd.dim_site", "billiards_dwd.dim_site_ex"):
+ sql = f"SELECT DISTINCT ON (site_id) {', '.join(select_exprs)} FROM {ods_table_sql} ORDER BY site_id, fetched_at DESC NULLS LAST"
+ else:
+ sql = f"SELECT {', '.join(select_exprs)} FROM {ods_table_sql}"
+
+ cur.execute(sql)
rows = [{k.lower(): v for k, v in r.items()} for r in cur.fetchall()]
if dwd_table == "billiards_dwd.dim_goods_category":
@@ -1081,7 +1092,7 @@ class DwdLoadTask(BaseTask):
self.logger.warning("跳过 %s:未找到可插入的列", dwd_table)
return 0
- order_col = self._pick_order_column(dwd_cols, ods_cols)
+ order_col = self._pick_order_column(dwd_table, dwd_cols, ods_cols)
where_sql = ""
params: List[Any] = []
dwd_table_sql = self._format_table(dwd_table, "billiards_dwd")
@@ -1090,9 +1101,7 @@ class DwdLoadTask(BaseTask):
where_sql = f'WHERE "{order_col}" >= %s AND "{order_col}" < %s'
params.extend([window_start, window_end])
elif order_col:
- cur.execute(f'SELECT COALESCE(MAX("{order_col}"), %s) FROM {dwd_table_sql}', ("1970-01-01",))
- row = cur.fetchone() or {}
- watermark = list(row.values())[0] if row else "1970-01-01"
+ watermark = self._get_fact_watermark(cur, dwd_table, ods_table, order_col, dwd_cols, ods_cols)
where_sql = f'WHERE "{order_col}" > %s'
params.append(watermark)
@@ -1121,16 +1130,149 @@ class DwdLoadTask(BaseTask):
sql += f" ON CONFLICT ({pk_sql}) DO NOTHING"
cur.execute(sql, params)
- return cur.rowcount
+ inserted = cur.rowcount
- def _pick_order_column(self, dwd_cols: Iterable[str], ods_cols: Iterable[str]) -> str | None:
- """选择用于增量的时间列(需同时存在于 DWD 与 ODS)。"""
+ # 回补缺失主键记录(处理历史回补导致的“create_time 水位”遗漏)
+ if dwd_table.lower() in self.FACT_MISSING_FILL_TABLES:
+ inserted += self._insert_missing_by_pk(
+ cur,
+ dwd_table,
+ ods_table,
+ dwd_cols,
+ ods_cols,
+ mapping,
+ insert_cols,
+ dwd_types,
+ ods_types,
+ )
+
+ return inserted
+ def _pick_order_column(self, dwd_table: str, dwd_cols: Iterable[str], ods_cols: Iterable[str]) -> str | None:
+ """Pick an incremental order column that exists in both DWD and ODS."""
lower_cols = {c.lower() for c in dwd_cols} & {c.lower() for c in ods_cols}
for candidate in self.FACT_ORDER_CANDIDATES:
if candidate.lower() in lower_cols:
return candidate.lower()
return None
+ def _get_fact_watermark(
+ self,
+ cur,
+ dwd_table: str,
+ ods_table: str,
+ order_col: str,
+ dwd_cols: Iterable[str],
+ ods_cols: Iterable[str],
+ ) -> Any:
+ """Fetch incremental watermark; default from DWD, fallback from ODS join."""
+ dwd_table_sql = self._format_table(dwd_table, "billiards_dwd")
+ ods_table_sql = self._format_table(ods_table, "billiards_ods")
+ dwd_set = {c.lower() for c in dwd_cols}
+ ods_set = {c.lower() for c in ods_cols}
+ if order_col.lower() in dwd_set:
+ cur.execute(
+ f'SELECT COALESCE(MAX("{order_col}"), %s) FROM {dwd_table_sql}', ("1970-01-01",)
+ )
+ row = cur.fetchone() or {}
+ return list(row.values())[0] if row else "1970-01-01"
+
+ pk_cols = self._get_primary_keys(cur, dwd_table)
+ if not pk_cols or order_col.lower() not in ods_set:
+ return "1970-01-01"
+
+ join_cond = " AND ".join(f'd."{pk}" = o."{pk}"' for pk in pk_cols if pk.lower() in ods_set)
+ if not join_cond:
+ return "1970-01-01"
+
+ cur.execute(
+ f'SELECT COALESCE(MAX(o."{order_col}"), %s) FROM {ods_table_sql} o JOIN {dwd_table_sql} d ON {join_cond}',
+ ("1970-01-01",),
+ )
+ row = cur.fetchone() or {}
+ return list(row.values())[0] if row else "1970-01-01"
+
+ def _insert_missing_by_pk(
+ self,
+ cur,
+ dwd_table: str,
+ ods_table: str,
+ dwd_cols: Sequence[str],
+ ods_cols: Sequence[str],
+ mapping: Dict[str, tuple[str, str | None]],
+ insert_cols: Sequence[str],
+ dwd_types: Dict[str, str],
+ ods_types: Dict[str, str],
+ ) -> int:
+ """Backfill missing PK rows for facts that can receive late data."""
+ pk_cols = self._get_primary_keys(cur, dwd_table)
+ if not pk_cols:
+ return 0
+
+ ods_set = {c.lower() for c in ods_cols}
+ dwd_table_sql = self._format_table(dwd_table, "billiards_dwd")
+ ods_table_sql = self._format_table(ods_table, "billiards_ods")
+
+ join_pairs = []
+ for pk in pk_cols:
+ pk_lower = pk.lower()
+ if pk_lower in mapping:
+ src, _ = mapping[pk_lower]
+ elif pk_lower in ods_set:
+ src = pk
+ elif "id" in ods_set:
+ src = "id"
+ else:
+ src = None
+ if not src:
+ return 0
+ join_pairs.append((pk, src))
+
+ join_cond = " AND ".join(
+ f'd."{pk}" = o."{src}"' for pk, src in join_pairs
+ )
+ null_cond = " AND ".join(f'd."{pk}" IS NULL' for pk, _ in join_pairs)
+
+ # 类型转换需要的类型集合
+ numeric_types = {"integer", "bigint", "smallint", "numeric", "double precision", "real", "decimal"}
+ text_types = {"text", "character varying", "varchar"}
+
+ select_exprs = []
+ for col in insert_cols:
+ key = col.lower()
+ if key in mapping:
+ src, cast_type = mapping[key]
+ if src.isidentifier():
+ expr = self._cast_expr(f'o."{src}"', cast_type)
+ else:
+ expr = self._cast_expr(src, cast_type)
+ select_exprs.append(expr)
+ elif key in ods_set:
+ # 检查是否需要类型转换 (ODS text -> DWD numeric)
+ d_type = dwd_types.get(col)
+ o_type = ods_types.get(col)
+ if d_type in numeric_types and o_type in text_types:
+ select_exprs.append(f'CAST(NULLIF(CAST(o."{col}" AS text), \'\') AS {d_type})')
+ else:
+ select_exprs.append(f'o."{col}"')
+ else:
+ select_exprs.append("NULL")
+
+ select_cols_sql = ", ".join(select_exprs)
+ insert_cols_sql = ", ".join(f'"{c}"' for c in insert_cols)
+ sql = (
+ f'INSERT INTO {dwd_table_sql} ({insert_cols_sql}) '
+ f'SELECT {select_cols_sql} '
+ f'FROM {ods_table_sql} o '
+ f'LEFT JOIN {dwd_table_sql} d ON {join_cond} '
+ f'WHERE {null_cond}'
+ )
+
+ pk_sql = ", ".join(f'"{c}"' for c in pk_cols)
+ sql += f" ON CONFLICT ({pk_sql}) DO NOTHING"
+
+ cur.execute(sql)
+ return cur.rowcount
+
def _build_fact_select_exprs(
self,
insert_cols: Sequence[str],
diff --git a/etl_billiards/tasks/dws_build_order_summary_task.py b/etl_billiards/tasks/dws_build_order_summary_task.py
index 9b62dc2..9b2f4db 100644
--- a/etl_billiards/tasks/dws_build_order_summary_task.py
+++ b/etl_billiards/tasks/dws_build_order_summary_task.py
@@ -7,6 +7,7 @@ from datetime import date
from typing import Any
from .base_task import BaseTask, TaskContext
+from utils.windowing import build_window_segments, calc_window_minutes
from scripts.build_dws_order_summary import SQL_BUILD_SUMMARY
@@ -17,37 +18,86 @@ class DwsBuildOrderSummaryTask(BaseTask):
return "DWS_BUILD_ORDER_SUMMARY"
def execute(self, cursor_data: dict | None = None) -> dict:
- context = self._build_context(cursor_data)
+ base_context = self._build_context(cursor_data)
task_code = self.get_task_code()
- self.logger.info(
- "%s: start, window[%s ~ %s]",
- task_code,
- context.window_start,
- context.window_end,
+ segments = build_window_segments(
+ self.config,
+ base_context.window_start,
+ base_context.window_end,
+ tz=self.tz,
+ override_only=True,
)
+ if not segments:
+ segments = [(base_context.window_start, base_context.window_end)]
- try:
- extracted = self.extract(context)
- transformed = self.transform(extracted, context)
- load_result = self.load(transformed, context) or {}
- self.db.commit()
- except Exception:
- self.db.rollback()
- self.logger.error("%s: failed", task_code, exc_info=True)
- raise
+ total_segments = len(segments)
+ if total_segments > 1:
+ self.logger.info("%s: 分段执行 共%s段", task_code, total_segments)
- counts = load_result.get("counts") or {}
- result = {"status": "SUCCESS", "counts": counts}
+ total_counts: dict = {}
+ segment_results: list[dict] = []
+ request_params_list: list[dict] = []
+ total_deleted = 0
+
+ for idx, (window_start, window_end) in enumerate(segments, start=1):
+ context = self._build_context_for_window(window_start, window_end, cursor_data)
+ self.logger.info(
+ "%s: 开始执行(%s/%s), 窗口[%s ~ %s]",
+ task_code,
+ idx,
+ total_segments,
+ context.window_start,
+ context.window_end,
+ )
+
+ try:
+ extracted = self.extract(context)
+ transformed = self.transform(extracted, context)
+ load_result = self.load(transformed, context) or {}
+ self.db.commit()
+ except Exception:
+ self.db.rollback()
+ self.logger.error("%s: 执行失败", task_code, exc_info=True)
+ raise
+
+ counts = load_result.get("counts") or {}
+ self._accumulate_counts(total_counts, counts)
+
+ extra = load_result.get("extra") or {}
+ deleted = int(extra.get("deleted") or 0)
+ total_deleted += deleted
+ request_params = load_result.get("request_params")
+ if request_params:
+ request_params_list.append(request_params)
+
+ if total_segments > 1:
+ segment_results.append(
+ {
+ "window": {
+ "start": context.window_start,
+ "end": context.window_end,
+ "minutes": context.window_minutes,
+ },
+ "counts": counts,
+ "extra": extra,
+ }
+ )
+
+ overall_start = segments[0][0]
+ overall_end = segments[-1][1]
+ result = {"status": "SUCCESS", "counts": total_counts}
result["window"] = {
- "start": context.window_start,
- "end": context.window_end,
- "minutes": context.window_minutes,
+ "start": overall_start,
+ "end": overall_end,
+ "minutes": calc_window_minutes(overall_start, overall_end),
}
- if "request_params" in load_result:
- result["request_params"] = load_result["request_params"]
- if "extra" in load_result:
- result["extra"] = load_result["extra"]
- self.logger.info("%s: done, counts=%s", task_code, counts)
+ if segment_results:
+ result["segments"] = segment_results
+ if request_params_list:
+ result["request_params"] = request_params_list[0] if len(request_params_list) == 1 else request_params_list
+ if total_deleted:
+ result["extra"] = {"deleted": total_deleted}
+ self.logger.info("%s: 完成, 统计=%s", task_code, total_counts)
return result
def extract(self, context: TaskContext) -> dict[str, Any]:
@@ -101,7 +151,7 @@ class DwsBuildOrderSummaryTask(BaseTask):
if extracted["delete_before_insert"]:
if extracted["full_refresh"] and extracted["site_id"] is None:
cur.execute("TRUNCATE TABLE billiards_dws.dws_order_summary;")
- self.logger.info("DWS_BUILD_ORDER_SUMMARY: truncated billiards_dws.dws_order_summary")
+ self.logger.info("DWS订单汇总: 已清空 billiards_dws.dws_order_summary")
else:
delete_sql = "DELETE FROM billiards_dws.dws_order_summary WHERE 1=1"
delete_args: list[Any] = []
@@ -116,7 +166,7 @@ class DwsBuildOrderSummaryTask(BaseTask):
delete_args.append(_as_date(extracted["end_date"]))
cur.execute(delete_sql, delete_args)
deleted = cur.rowcount
- self.logger.info("DWS_BUILD_ORDER_SUMMARY: deleted=%s sql=%s", deleted, delete_sql)
+ self.logger.info("DWS订单汇总: 删除=%s 语句=%s", deleted, delete_sql)
cur.execute(SQL_BUILD_SUMMARY, sql_params)
affected = cur.rowcount
diff --git a/etl_billiards/tasks/manual_ingest_task.py b/etl_billiards/tasks/manual_ingest_task.py
index f55b300..15ffa7d 100644
--- a/etl_billiards/tasks/manual_ingest_task.py
+++ b/etl_billiards/tasks/manual_ingest_task.py
@@ -79,7 +79,7 @@ class ManualIngestTask(BaseTask):
data_dir = (
self.config.get("manual.data_dir")
or self.config.get("pipeline.ingest_source_dir")
- or r"c:\dev\LLTQ\ETL\feiqiu-ETL\etl_billiards\tests\testdata_json"
+ or os.path.join("tests", "testdata_json")
)
if not os.path.exists(data_dir):
self.logger.error("Data directory not found: %s", data_dir)
diff --git a/etl_billiards/tasks/members_dwd_task.py b/etl_billiards/tasks/members_dwd_task.py
index 12d8ea0..0658c2a 100644
--- a/etl_billiards/tasks/members_dwd_task.py
+++ b/etl_billiards/tasks/members_dwd_task.py
@@ -3,6 +3,7 @@ from .base_dwd_task import BaseDwdTask
from loaders.dimensions.member import MemberLoader
from models.parsers import TypeParser
import json
+from utils.windowing import build_window_segments
class MembersDwdTask(BaseDwdTask):
"""
@@ -17,53 +18,72 @@ class MembersDwdTask(BaseDwdTask):
def execute(self) -> dict:
self.logger.info(f"Starting {self.get_task_code()} task")
- window_start, window_end, _ = self._get_time_window()
- self.logger.info(f"Processing window: {window_start} to {window_end}")
+ base_start, base_end, _ = self._get_time_window()
+ segments = build_window_segments(
+ self.config,
+ base_start,
+ base_end,
+ tz=self.tz,
+ override_only=True,
+ )
+ if not segments:
+ segments = [(base_start, base_end)]
+
+ total_segments = len(segments)
+ if total_segments > 1:
+ self.logger.info(f"{self.get_task_code()}: ????? {total_segments} ?")
loader = MemberLoader(self.db)
store_id = self.config.get("app.store_id")
total_inserted = 0
total_updated = 0
- total_errors = 0
- # Iterate ODS Data
- batches = self.iter_ods_rows(
- table_name="billiards_ods.member_profiles",
- columns=["site_id", "member_id", "payload", "fetched_at"],
- start_time=window_start,
- end_time=window_end
+ for idx, (window_start, window_end) in enumerate(segments, start=1):
+ self.logger.info(
+ f"Processing window {idx}/{total_segments}: {window_start} to {window_end}"
+ )
+ batches = self.iter_ods_rows(
+ table_name="billiards_ods.member_profiles",
+ columns=["site_id", "member_id", "payload", "fetched_at"],
+ start_time=window_start,
+ end_time=window_end
+ )
+
+ for batch in batches:
+ if not batch:
+ continue
+
+ parsed_rows = []
+ for row in batch:
+ payload = self.parse_payload(row)
+ if not payload:
+ continue
+
+ parsed = self._parse_member(payload, store_id)
+ if parsed:
+ parsed_rows.append(parsed)
+
+ if parsed_rows:
+ inserted, updated, skipped = loader.upsert_members(parsed_rows, store_id)
+ total_inserted += inserted
+ total_updated += updated
+
+ self.db.commit()
+
+ overall_start = segments[0][0]
+ overall_end = segments[-1][1]
+
+ self.logger.info(
+ f"Task {self.get_task_code()} completed. Inserted: {total_inserted}, Updated: {total_updated}"
)
- for batch in batches:
- if not batch:
- continue
-
- parsed_rows = []
- for row in batch:
- payload = self.parse_payload(row)
- if not payload:
- continue
-
- parsed = self._parse_member(payload, store_id)
- if parsed:
- parsed_rows.append(parsed)
-
- if parsed_rows:
- inserted, updated, skipped = loader.upsert_members(parsed_rows, store_id)
- total_inserted += inserted
- total_updated += updated
-
- self.db.commit()
-
- self.logger.info(f"Task {self.get_task_code()} completed. Inserted: {total_inserted}, Updated: {total_updated}")
-
return {
"status": "success",
"inserted": total_inserted,
"updated": total_updated,
- "window_start": window_start.isoformat(),
- "window_end": window_end.isoformat()
+ "window_start": overall_start.isoformat(),
+ "window_end": overall_end.isoformat()
}
def _parse_member(self, raw: dict, store_id: int) -> dict:
diff --git a/etl_billiards/tasks/ods_tasks.py b/etl_billiards/tasks/ods_tasks.py
index 1657c6b..37df0ff 100644
--- a/etl_billiards/tasks/ods_tasks.py
+++ b/etl_billiards/tasks/ods_tasks.py
@@ -11,6 +11,7 @@ from psycopg2.extras import Json, execute_values
from models.parsers import TypeParser
from .base_task import BaseTask
+from utils.windowing import build_window_segments, calc_window_minutes
ColumnTransform = Callable[[Any], Any]
@@ -64,64 +65,112 @@ class BaseOdsTask(BaseTask):
def execute(self, cursor_data: dict | None = None) -> dict:
spec = self.SPEC
- self.logger.info("寮€濮嬫墽琛?%s (ODS)", spec.code)
+ self.logger.info("开始执行%s (ODS)", spec.code)
window_start, window_end, window_minutes = self._resolve_window(cursor_data)
+ segments = build_window_segments(
+ self.config,
+ window_start,
+ window_end,
+ tz=self.tz,
+ override_only=True,
+ )
+ if not segments:
+ segments = [(window_start, window_end)]
+
+ total_segments = len(segments)
+ if total_segments > 1:
+ self.logger.info("%s: 窗口拆分为 %s 段", spec.code, total_segments)
store_id = TypeParser.parse_int(self.config.get("app.store_id"))
if not store_id:
- raise ValueError("app.store_id 鏈厤缃紝鏃犳硶鎵ц ODS 浠诲姟")
+ raise ValueError("app.store_id 未配置,无法执行 ODS 任务")
page_size = self.config.get("api.page_size", 200)
- params = self._build_params(
- spec,
- store_id,
- window_start=window_start,
- window_end=window_end,
- )
- counts = {"fetched": 0, "inserted": 0, "updated": 0, "skipped": 0, "errors": 0}
+ total_counts = {"fetched": 0, "inserted": 0, "updated": 0, "skipped": 0, "errors": 0}
+ segment_results: list[dict] = []
+ params_list: list[dict] = []
source_file = self._resolve_source_file_hint(spec)
try:
- for _, page_records, _, response_payload in self.api.iter_paginated(
- endpoint=spec.endpoint,
- params=params,
- page_size=page_size,
- data_path=spec.data_path,
- list_key=spec.list_key,
- ):
- inserted, skipped = self._insert_records_schema_aware(
- table=spec.table_name,
- records=page_records,
- response_payload=response_payload,
- source_file=source_file,
- source_endpoint=spec.endpoint if spec.include_source_endpoint else None,
+ for idx, (seg_start, seg_end) in enumerate(segments, start=1):
+ params = self._build_params(
+ spec,
+ store_id,
+ window_start=seg_start,
+ window_end=seg_end,
)
- counts["fetched"] += len(page_records)
- counts["inserted"] += inserted
- counts["skipped"] += skipped
+ params_list.append(params)
+ segment_counts = {"fetched": 0, "inserted": 0, "updated": 0, "skipped": 0, "errors": 0}
- self.db.commit()
- self.logger.info("%s ODS 浠诲姟瀹屾垚: %s", spec.code, counts)
+ self.logger.info(
+ "%s: 开始执行(%s/%s),窗口[%s ~ %s]",
+ spec.code,
+ idx,
+ total_segments,
+ seg_start,
+ seg_end,
+ )
+
+ for _, page_records, _, response_payload in self.api.iter_paginated(
+ endpoint=spec.endpoint,
+ params=params,
+ page_size=page_size,
+ data_path=spec.data_path,
+ list_key=spec.list_key,
+ ):
+ inserted, skipped = self._insert_records_schema_aware(
+ table=spec.table_name,
+ records=page_records,
+ response_payload=response_payload,
+ source_file=source_file,
+ source_endpoint=spec.endpoint if spec.include_source_endpoint else None,
+ )
+ segment_counts["fetched"] += len(page_records)
+ segment_counts["inserted"] += inserted
+ segment_counts["skipped"] += skipped
+
+ self.db.commit()
+ self._accumulate_counts(total_counts, segment_counts)
+ if total_segments > 1:
+ segment_results.append(
+ {
+ "window": {
+ "start": seg_start,
+ "end": seg_end,
+ "minutes": calc_window_minutes(seg_start, seg_end),
+ },
+ "counts": segment_counts,
+ }
+ )
+
+ self.logger.info("%s ODS 任务完成: %s", spec.code, total_counts)
allow_empty_advance = bool(self.config.get("run.allow_empty_result_advance", False))
status = "SUCCESS"
- if counts["fetched"] == 0 and not allow_empty_advance:
+ if total_counts["fetched"] == 0 and not allow_empty_advance:
status = "PARTIAL"
- result = self._build_result(status, counts)
+ result = self._build_result(status, total_counts)
+ overall_start = segments[0][0]
+ overall_end = segments[-1][1]
result["window"] = {
- "start": window_start,
- "end": window_end,
- "minutes": window_minutes,
+ "start": overall_start,
+ "end": overall_end,
+ "minutes": calc_window_minutes(overall_start, overall_end),
}
- result["request_params"] = params
+ if total_segments > 1:
+ result["segments"] = segment_results
+ if len(params_list) == 1:
+ result["request_params"] = params_list[0]
+ else:
+ result["request_params"] = params_list
return result
except Exception:
self.db.rollback()
- counts["errors"] += 1
- self.logger.error("%s ODS 浠诲姟澶辫触", spec.code, exc_info=True)
+ total_counts["errors"] += 1
+ self.logger.error("%s ODS 任务失败", spec.code, exc_info=True)
raise
def _resolve_window(self, cursor_data: dict | None) -> tuple[datetime, datetime, int]:
@@ -966,72 +1015,121 @@ class OdsSettlementTicketTask(BaseOdsTask):
def execute(self, cursor_data: dict | None = None) -> dict:
spec = self.SPEC
- context = self._build_context(cursor_data)
- store_id = TypeParser.parse_int(self.config.get("app.store_id")) or 0
+ base_context = self._build_context(cursor_data)
+ segments = build_window_segments(
+ self.config,
+ base_context.window_start,
+ base_context.window_end,
+ tz=self.tz,
+ override_only=True,
+ )
+ if not segments:
+ segments = [(base_context.window_start, base_context.window_end)]
- counts = {"fetched": 0, "inserted": 0, "updated": 0, "skipped": 0, "errors": 0}
+ total_segments = len(segments)
+ if total_segments > 1:
+ self.logger.info("%s: 窗口拆分为 %s 段", spec.code, total_segments)
+
+ store_id = TypeParser.parse_int(self.config.get("app.store_id")) or 0
+ counts_total = {"fetched": 0, "inserted": 0, "updated": 0, "skipped": 0, "errors": 0}
+ segment_results: list[dict] = []
source_file = self._resolve_source_file_hint(spec)
try:
existing_ids = self._fetch_existing_ticket_ids()
- candidates = self._collect_settlement_ids(
- store_id, existing_ids, context.window_start, context.window_end
- )
- candidates = [cid for cid in candidates if cid and cid not in existing_ids]
- counts["fetched"] = len(candidates)
-
- if not candidates:
+ for idx, (seg_start, seg_end) in enumerate(segments, start=1):
+ context = self._build_context_for_window(seg_start, seg_end, cursor_data)
self.logger.info(
- "%s: 绐楀彛[%s ~ %s] 鏈彂鐜伴渶瑕佹姄鍙栫殑灏忕エ",
+ "%s: 开始执行(%s/%s),窗口[%s ~ %s]",
spec.code,
+ idx,
+ total_segments,
context.window_start,
context.window_end,
)
- result = self._build_result("SUCCESS", counts)
- result["window"] = {
- "start": context.window_start,
- "end": context.window_end,
- "minutes": context.window_minutes,
- }
- result["request_params"] = {"candidates": 0}
- return result
- payloads, skipped = self._fetch_ticket_payloads(candidates)
- counts["skipped"] += skipped
- inserted, skipped2 = self._insert_records_schema_aware(
- table=spec.table_name,
- records=payloads,
- response_payload=None,
- source_file=source_file,
- source_endpoint=spec.endpoint,
- )
- counts["inserted"] += inserted
- counts["skipped"] += skipped2
- self.db.commit()
+ candidates = self._collect_settlement_ids(
+ store_id, existing_ids, context.window_start, context.window_end
+ )
+ candidates = [cid for cid in candidates if cid and cid not in existing_ids]
+ segment_counts = {"fetched": 0, "inserted": 0, "updated": 0, "skipped": 0, "errors": 0}
+ segment_counts["fetched"] = len(candidates)
+
+ if not candidates:
+ self.logger.info(
+ "%s: 窗口[%s ~ %s] 未发现需要抓取的小票",
+ spec.code,
+ context.window_start,
+ context.window_end,
+ )
+ self._accumulate_counts(counts_total, segment_counts)
+ if total_segments > 1:
+ segment_results.append(
+ {
+ "window": {
+ "start": context.window_start,
+ "end": context.window_end,
+ "minutes": context.window_minutes,
+ },
+ "counts": segment_counts,
+ }
+ )
+ continue
+
+ payloads, skipped = self._fetch_ticket_payloads(candidates)
+ segment_counts["skipped"] += skipped
+ inserted, skipped2 = self._insert_records_schema_aware(
+ table=spec.table_name,
+ records=payloads,
+ response_payload=None,
+ source_file=source_file,
+ source_endpoint=spec.endpoint,
+ )
+ segment_counts["inserted"] += inserted
+ segment_counts["skipped"] += skipped2
+
+ self.db.commit()
+ existing_ids.update(candidates)
+ self._accumulate_counts(counts_total, segment_counts)
+ if total_segments > 1:
+ segment_results.append(
+ {
+ "window": {
+ "start": context.window_start,
+ "end": context.window_end,
+ "minutes": context.window_minutes,
+ },
+ "counts": segment_counts,
+ }
+ )
+
self.logger.info(
- "%s: 灏忕エ鎶撳彇瀹屾垚锛屽€欓€?%s 鎻掑叆=%s 鏇存柊=%s 璺宠繃=%s",
+ "%s: 小票抓取完成,抓取=%s 插入=%s 更新=%s 跳过=%s",
spec.code,
- len(candidates),
- inserted,
+ counts_total["fetched"],
+ counts_total["inserted"],
0,
- counts["skipped"],
+ counts_total["skipped"],
)
- result = self._build_result("SUCCESS", counts)
+ result = self._build_result("SUCCESS", counts_total)
+ overall_start = segments[0][0]
+ overall_end = segments[-1][1]
result["window"] = {
- "start": context.window_start,
- "end": context.window_end,
- "minutes": context.window_minutes,
+ "start": overall_start,
+ "end": overall_end,
+ "minutes": calc_window_minutes(overall_start, overall_end),
}
- result["request_params"] = {"candidates": len(candidates)}
+ if segment_results:
+ result["segments"] = segment_results
+ result["request_params"] = {"candidates": counts_total["fetched"]}
return result
except Exception:
- counts["errors"] += 1
+ counts_total["errors"] += 1
self.db.rollback()
- self.logger.error("%s: 灏忕エ鎶撳彇澶辫触", spec.code, exc_info=True)
+ self.logger.error("%s: 小票抓取失败", spec.code, exc_info=True)
raise
- # ------------------------------------------------------------------ helpers
def _fetch_existing_ticket_ids(self) -> set[int]:
sql = """
SELECT DISTINCT
diff --git a/etl_billiards/tasks/payments_dwd_task.py b/etl_billiards/tasks/payments_dwd_task.py
index e811f7e..c169b03 100644
--- a/etl_billiards/tasks/payments_dwd_task.py
+++ b/etl_billiards/tasks/payments_dwd_task.py
@@ -3,6 +3,7 @@ from .base_dwd_task import BaseDwdTask
from loaders.facts.payment import PaymentLoader
from models.parsers import TypeParser
import json
+from utils.windowing import build_window_segments
class PaymentsDwdTask(BaseDwdTask):
"""
@@ -17,8 +18,20 @@ class PaymentsDwdTask(BaseDwdTask):
def execute(self) -> dict:
self.logger.info(f"Starting {self.get_task_code()} task")
- window_start, window_end, _ = self._get_time_window()
- self.logger.info(f"Processing window: {window_start} to {window_end}")
+ base_start, base_end, _ = self._get_time_window()
+ segments = build_window_segments(
+ self.config,
+ base_start,
+ base_end,
+ tz=self.tz,
+ override_only=True,
+ )
+ if not segments:
+ segments = [(base_start, base_end)]
+
+ total_segments = len(segments)
+ if total_segments > 1:
+ self.logger.info(f"{self.get_task_code()}: ????? {total_segments} ?")
loader = PaymentLoader(self.db, logger=self.logger)
store_id = self.config.get("app.store_id")
@@ -27,36 +40,42 @@ class PaymentsDwdTask(BaseDwdTask):
total_updated = 0
total_skipped = 0
- # Iterate ODS Data
- batches = self.iter_ods_rows(
- table_name="billiards_ods.payment_transactions",
- columns=["site_id", "pay_id", "payload", "fetched_at"],
- start_time=window_start,
- end_time=window_end
- )
+ for idx, (window_start, window_end) in enumerate(segments, start=1):
+ self.logger.info(
+ f"Processing window {idx}/{total_segments}: {window_start} to {window_end}"
+ )
+ batches = self.iter_ods_rows(
+ table_name="billiards_ods.payment_transactions",
+ columns=["site_id", "pay_id", "payload", "fetched_at"],
+ start_time=window_start,
+ end_time=window_end
+ )
- for batch in batches:
- if not batch:
- continue
-
- parsed_rows = []
- for row in batch:
- payload = self.parse_payload(row)
- if not payload:
+ for batch in batches:
+ if not batch:
continue
-
- parsed = self._parse_payment(payload, store_id)
- if parsed:
- parsed_rows.append(parsed)
-
- if parsed_rows:
- inserted, updated, skipped = loader.upsert_payments(parsed_rows, store_id)
- total_inserted += inserted
- total_updated += updated
- total_skipped += skipped
- self.db.commit()
-
+ parsed_rows = []
+ for row in batch:
+ payload = self.parse_payload(row)
+ if not payload:
+ continue
+
+ parsed = self._parse_payment(payload, store_id)
+ if parsed:
+ parsed_rows.append(parsed)
+
+ if parsed_rows:
+ inserted, updated, skipped = loader.upsert_payments(parsed_rows, store_id)
+ total_inserted += inserted
+ total_updated += updated
+ total_skipped += skipped
+
+ self.db.commit()
+
+ overall_start = segments[0][0]
+ overall_end = segments[-1][1]
+
self.logger.info(
"Task %s completed. inserted=%s updated=%s skipped=%s",
self.get_task_code(),
@@ -64,7 +83,7 @@ class PaymentsDwdTask(BaseDwdTask):
total_updated,
total_skipped,
)
-
+
return {
"status": "SUCCESS",
"counts": {
@@ -72,8 +91,8 @@ class PaymentsDwdTask(BaseDwdTask):
"updated": total_updated,
"skipped": total_skipped,
},
- "window_start": window_start,
- "window_end": window_end,
+ "window_start": overall_start,
+ "window_end": overall_end,
}
def _parse_payment(self, raw: dict, store_id: int) -> dict:
diff --git a/etl_billiards/tasks/ticket_dwd_task.py b/etl_billiards/tasks/ticket_dwd_task.py
index 34f76e2..58ac47c 100644
--- a/etl_billiards/tasks/ticket_dwd_task.py
+++ b/etl_billiards/tasks/ticket_dwd_task.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from .base_dwd_task import BaseDwdTask
from loaders.facts.ticket import TicketLoader
+from utils.windowing import build_window_segments
class TicketDwdTask(BaseDwdTask):
"""
@@ -19,51 +20,66 @@ class TicketDwdTask(BaseDwdTask):
def execute(self) -> dict:
self.logger.info(f"Starting {self.get_task_code()} task")
- # 1. Get Time Window (Incremental Load)
- window_start, window_end, _ = self._get_time_window()
- self.logger.info(f"Processing window: {window_start} to {window_end}")
+ base_start, base_end, _ = self._get_time_window()
+ segments = build_window_segments(
+ self.config,
+ base_start,
+ base_end,
+ tz=self.tz,
+ override_only=True,
+ )
+ if not segments:
+ segments = [(base_start, base_end)]
+
+ total_segments = len(segments)
+ if total_segments > 1:
+ self.logger.info(f"{self.get_task_code()}: ????? {total_segments} ?")
- # 2. Initialize Loader
loader = TicketLoader(self.db, logger=self.logger)
store_id = self.config.get("app.store_id")
total_inserted = 0
total_errors = 0
- # 3. Iterate ODS Data
- # We query ods_ticket_detail based on fetched_at
- batches = self.iter_ods_rows(
- table_name="billiards_ods.settlement_ticket_details",
- columns=["payload", "fetched_at", "source_file", "record_index"],
- start_time=window_start,
- end_time=window_end
+ for idx, (window_start, window_end) in enumerate(segments, start=1):
+ self.logger.info(
+ f"Processing window {idx}/{total_segments}: {window_start} to {window_end}"
+ )
+ batches = self.iter_ods_rows(
+ table_name="billiards_ods.settlement_ticket_details",
+ columns=["payload", "fetched_at", "source_file", "record_index"],
+ start_time=window_start,
+ end_time=window_end
+ )
+
+ for batch in batches:
+ if not batch:
+ continue
+
+ tickets = []
+ for row in batch:
+ payload = self.parse_payload(row)
+ if payload:
+ tickets.append(payload)
+
+ inserted, errors = loader.process_tickets(tickets, store_id)
+ total_inserted += inserted
+ total_errors += errors
+
+ self.db.commit()
+
+ overall_start = segments[0][0]
+ overall_end = segments[-1][1]
+
+ self.logger.info(
+ f"Task {self.get_task_code()} completed. Inserted: {total_inserted}, Errors: {total_errors}"
)
- for batch in batches:
- if not batch:
- continue
-
- # Extract payloads
- tickets = []
- for row in batch:
- payload = self.parse_payload(row)
- if payload:
- tickets.append(payload)
-
- # Process Batch
- inserted, errors = loader.process_tickets(tickets, store_id)
- total_inserted += inserted
- total_errors += errors
-
- # 4. Commit
- self.db.commit()
-
- self.logger.info(f"Task {self.get_task_code()} completed. Inserted: {total_inserted}, Errors: {total_errors}")
-
return {
"status": "success",
"inserted": total_inserted,
"errors": total_errors,
- "window_start": window_start.isoformat(),
- "window_end": window_end.isoformat()
+ "window_start": overall_start.isoformat(),
+ "window_end": overall_end.isoformat()
}
+
diff --git a/etl_billiards/tests/unit/task_test_utils.py b/etl_billiards/tests/unit/task_test_utils.py
index a21954b..47ef95e 100644
--- a/etl_billiards/tests/unit/task_test_utils.py
+++ b/etl_billiards/tests/unit/task_test_utils.py
@@ -4,6 +4,8 @@ from __future__ import annotations
import json
import os
+import re
+from types import SimpleNamespace
from contextlib import contextmanager
from dataclasses import dataclass
from pathlib import Path
@@ -99,16 +101,87 @@ def dump_offline_payload(spec: TaskSpec, archive_dir: Path) -> Path:
class FakeCursor:
"""极简游标桩对象,记录 SQL/参数并支持上下文管理,供 FakeDBOperations 与 SCD2Handler 使用。"""
- def __init__(self, recorder: List[Dict]):
+ def __init__(self, recorder: List[Dict], db_ops=None):
self.recorder = recorder
+ self._db_ops = db_ops
+ self._pending_rows: List[Tuple] = []
+ self._fetchall_rows: List[Tuple] = []
+ self.rowcount = 0
+ self.connection = SimpleNamespace(encoding="UTF8")
# pylint: disable=unused-argument
def execute(self, sql: str, params=None):
- self.recorder.append({"sql": sql.strip(), "params": params})
+ sql_text = sql.decode("utf-8", errors="ignore") if isinstance(sql, (bytes, bytearray)) else str(sql)
+ self.recorder.append({"sql": sql_text.strip(), "params": params})
+ self._fetchall_rows = []
+
+ # Handle information_schema queries for schema-aware inserts.
+ lowered = sql_text.lower()
+ if "from information_schema.columns" in lowered:
+ table_name = None
+ if params and len(params) >= 2:
+ table_name = params[1]
+ self._fetchall_rows = self._fake_columns(table_name)
+ return
+ if "from information_schema.table_constraints" in lowered:
+ self._fetchall_rows = []
+ return
+
+ if self._pending_rows:
+ self.rowcount = len(self._pending_rows)
+ self._record_upserts(sql_text)
+ self._pending_rows = []
+ else:
+ self.rowcount = 0
def fetchone(self):
return None
+ def fetchall(self):
+ return list(self._fetchall_rows)
+
+ def mogrify(self, template, args):
+ self._pending_rows.append(tuple(args))
+ return b"(?)"
+
+ def _record_upserts(self, sql_text: str):
+ if not self._db_ops:
+ return
+ match = re.search(r"insert\s+into\s+[^\(]+\(([^)]*)\)\s+values", sql_text, re.I)
+ if not match:
+ return
+ columns = [c.strip().strip('"') for c in match.group(1).split(",")]
+ rows = []
+ for idx, row in enumerate(self._pending_rows):
+ if len(row) != len(columns):
+ continue
+ row_dict = {}
+ for col, val in zip(columns, row):
+ if col == "record_index" and val in (None, ""):
+ row_dict[col] = idx
+ continue
+ if hasattr(val, "adapted"):
+ row_dict[col] = json.dumps(val.adapted, ensure_ascii=False)
+ else:
+ row_dict[col] = val
+ rows.append(row_dict)
+ if rows:
+ self._db_ops.upserts.append(
+ {"sql": sql_text.strip(), "count": len(rows), "page_size": len(rows), "rows": rows}
+ )
+
+ @staticmethod
+ def _fake_columns(_table_name: str | None) -> List[Tuple[str, str, str]]:
+ return [
+ ("id", "bigint", "int8"),
+ ("sitegoodsstockid", "bigint", "int8"),
+ ("record_index", "integer", "int4"),
+ ("source_file", "text", "text"),
+ ("source_endpoint", "text", "text"),
+ ("fetched_at", "timestamp with time zone", "timestamptz"),
+ ("payload", "jsonb", "jsonb"),
+ ]
+
def __enter__(self):
return self
@@ -119,11 +192,12 @@ class FakeCursor:
class FakeConnection:
"""仿 psycopg 连接对象,仅满足 SCD2Handler 对 cursor 的最小需求,并缓存执行过的语句。"""
- def __init__(self):
+ def __init__(self, db_ops):
self.statements: List[Dict] = []
+ self._db_ops = db_ops
def cursor(self):
- return FakeCursor(self.statements)
+ return FakeCursor(self.statements, self._db_ops)
class FakeDBOperations:
@@ -134,7 +208,7 @@ class FakeDBOperations:
self.executes: List[Dict] = []
self.commits = 0
self.rollbacks = 0
- self.conn = FakeConnection()
+ self.conn = FakeConnection(self)
# Pre-seeded query results (FIFO) to let tests control DB-returned rows
self.query_results: List[List[Dict]] = []
diff --git a/etl_billiards/tests/unit/test_config.py b/etl_billiards/tests/unit/test_config.py
index c79bc4d..861f3c7 100644
--- a/etl_billiards/tests/unit/test_config.py
+++ b/etl_billiards/tests/unit/test_config.py
@@ -6,7 +6,7 @@ from config.defaults import DEFAULTS
def test_config_load():
"""测试配置加载"""
- config = AppConfig.load()
+ config = AppConfig.load({"app": {"store_id": 1}})
assert config.get("app.timezone") == DEFAULTS["app"]["timezone"]
def test_config_override():
@@ -19,6 +19,6 @@ def test_config_override():
def test_config_get_nested():
"""测试嵌套配置获取"""
- config = AppConfig.load()
+ config = AppConfig.load({"app": {"store_id": 1}})
assert config.get("db.batch_size") == 1000
assert config.get("nonexistent.key", "default") == "default"
diff --git a/etl_billiards/utils/windowing.py b/etl_billiards/utils/windowing.py
new file mode 100644
index 0000000..b15ee21
--- /dev/null
+++ b/etl_billiards/utils/windowing.py
@@ -0,0 +1,97 @@
+# -*- coding: utf-8 -*-
+"""Time window helpers for ETL and validation tasks."""
+from __future__ import annotations
+
+from datetime import datetime, timedelta, time
+from typing import List, Tuple
+from zoneinfo import ZoneInfo
+
+
+def _ensure_tz(dt: datetime, tz: ZoneInfo | None) -> datetime:
+ if tz is None:
+ return dt
+ if dt.tzinfo is None:
+ return dt.replace(tzinfo=tz)
+ return dt.astimezone(tz)
+
+
+def _next_month_start(dt: datetime, tz: ZoneInfo | None) -> datetime:
+ year = dt.year
+ month = dt.month
+ if month == 12:
+ year += 1
+ month = 1
+ else:
+ month += 1
+ return datetime(year, month, 1, tzinfo=tz)
+
+
+def calc_window_minutes(start: datetime, end: datetime) -> int:
+ if end <= start:
+ return 0
+ return max(1, int((end - start).total_seconds() // 60))
+
+
+def split_window(
+ start: datetime,
+ end: datetime,
+ *,
+ tz: ZoneInfo | None,
+ split_unit: str | None,
+ compensation_hours: int | float | None,
+) -> List[Tuple[datetime, datetime]]:
+ start = _ensure_tz(start, tz)
+ end = _ensure_tz(end, tz)
+
+ comp = int(compensation_hours or 0)
+ if comp:
+ start = start - timedelta(hours=comp)
+ end = end + timedelta(hours=comp)
+
+ if end <= start:
+ return []
+
+ unit = (split_unit or "").strip().lower()
+ if unit in ("", "none", "off", "false", "0"):
+ return [(start, end)]
+
+ if unit not in ("month", "monthly"):
+ return [(start, end)]
+
+ windows: List[Tuple[datetime, datetime]] = []
+ cur = start
+ while cur < end:
+ boundary = _next_month_start(cur, tz)
+ nxt = boundary if boundary < end else end
+ if nxt <= cur:
+ break
+ windows.append((cur, nxt))
+ cur = nxt
+ return windows
+
+
+def build_window_segments(
+ cfg,
+ start: datetime,
+ end: datetime,
+ *,
+ tz: ZoneInfo | None,
+ override_only: bool,
+) -> List[Tuple[datetime, datetime]]:
+ split_unit = cfg.get("run.window_split.unit", "month")
+ compensation_hours = cfg.get("run.window_split.compensation_hours", 0)
+
+ if override_only:
+ override_start = cfg.get("run.window_override.start")
+ override_end = cfg.get("run.window_override.end")
+ if not (override_start and override_end):
+ split_unit = "none"
+ compensation_hours = 0
+
+ return split_window(
+ start,
+ end,
+ tz=tz,
+ split_unit=split_unit,
+ compensation_hours=compensation_hours,
+ )
diff --git a/requirements.txt b/requirements.txt
index 1a61b91..b903978 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,3 +2,4 @@ requests
psycopg2-binary
python-dateutil
tzdata
+flask>=2.3
diff --git a/tmp/README_FULL.md b/tmp/README_FULL.md
index 5140e3e..7d6c726 100644
--- a/tmp/README_FULL.md
+++ b/tmp/README_FULL.md
@@ -14,7 +14,7 @@
**环境要求**:Python 3.10+;PostgreSQL;`.env` 关键项:
- `PG_DSN=postgresql://local-Python:Neo-local-1991125@100.64.0.4:5432/LLZQ-test`
-- `INGEST_SOURCE_DIR=C:\dev\LLTQ\export\test-json-doc`
+- `INGEST_SOURCE_DIR=export/test-json-doc`
**安装依赖**:
```bash
@@ -28,7 +28,7 @@ pip install -r requirements.txt
python -m etl_billiards.cli.main --tasks INIT_ODS_SCHEMA,INIT_DWD_SCHEMA --pipeline-flow INGEST_ONLY
# 灌入示例 JSON 到 ODS(可用 .env 的 INGEST_SOURCE_DIR 覆盖)
-python -m etl_billiards.cli.main --tasks MANUAL_INGEST --pipeline-flow INGEST_ONLY --ingest-source "C:\dev\LLTQ\export\test-json-doc"
+python -m etl_billiards.cli.main --tasks MANUAL_INGEST --pipeline-flow INGEST_ONLY --ingest-source "export/test-json-doc"
# 从 ODS 装载 DWD
python -m etl_billiards.cli.main --tasks DWD_LOAD_FROM_ODS --pipeline-flow INGEST_ONLY
@@ -46,7 +46,7 @@ python -m etl_billiards.cli.main --tasks DWD_QUALITY_CHECK --pipeline-flow INGES
---
## 3. 配置与路径
-- 示例数据目录:`C:\dev\LLTQ\export\test-json-doc`(可由 `.env` 的 `INGEST_SOURCE_DIR` 覆盖)。
+- 示例数据目录:`export/test-json-doc`(可由 `.env` 的 `INGEST_SOURCE_DIR` 覆盖)。
- 日志/导出目录:`LOG_ROOT`、`EXPORT_ROOT` 见 `.env`。
- 报表:`etl_billiards/reports/dwd_quality_report.json`。
- DDL:`etl_billiards/database/schema_ODS_doc.sql`、`etl_billiards/database/schema_dwd_doc.sql`。
diff --git a/tmp/etl_billiards_misc/backups/manual_ingest_task.py b/tmp/etl_billiards_misc/backups/manual_ingest_task.py
index dca6230..f846718 100644
--- a/tmp/etl_billiards_misc/backups/manual_ingest_task.py
+++ b/tmp/etl_billiards_misc/backups/manual_ingest_task.py
@@ -20,7 +20,7 @@ class ManualIngestTask(BaseTask):
super().__init__(config, db_connection, api_client, logger)
self._table_columns_cache: dict[str, list[str]] = {}
- # 鏂囦欢鍏抽敭璇?-> 鐩爣琛紙鍖归厤 C:\dev\LLTQ\export\temp\source-data-doc 涓嬬ず鑼?JSON 鍚嶇О锛? FILE_MAPPING: list[tuple[tuple[str, ...], str]] = [
+ # 鏂囦欢鍏抽敭璇?-> 鐩爣琛紙鍖归厤 export/temp/source-data-doc 涓嬬ず鑼?JSON 鍚嶇О锛? FILE_MAPPING: list[tuple[tuple[str, ...], str]] = [
(("浼氬憳妗f", "member_profiles"), "billiards_ods.member_profiles"),
(("浣欓鍙樻洿璁板綍", "member_balance_changes"), "billiards_ods.member_balance_changes"),
(("鍌ㄥ€煎崱鍒楄〃", "member_stored_value_cards"), "billiards_ods.member_stored_value_cards"),
@@ -84,7 +84,7 @@ class ManualIngestTask(BaseTask):
data_dir = (
self.config.get("manual.data_dir")
or self.config.get("pipeline.ingest_source_dir")
- or r"c:\dev\LLTQ\ETL\feiqiu-ETL\etl_billiards\tests\testdata_json"
+ or r"tests/testdata_json"
)
if not os.path.exists(data_dir):
self.logger.error("Data directory not found: %s", data_dir)
diff --git a/tmp/etl_billiards_misc/backups/manual_ingest_task.py.bak_20251209 b/tmp/etl_billiards_misc/backups/manual_ingest_task.py.bak_20251209
index 14ed8ae..874a295 100644
--- a/tmp/etl_billiards_misc/backups/manual_ingest_task.py.bak_20251209
+++ b/tmp/etl_billiards_misc/backups/manual_ingest_task.py.bak_20251209
@@ -79,7 +79,7 @@ class ManualIngestTask(BaseTask):
data_dir = (
self.config.get("manual.data_dir")
or self.config.get("pipeline.ingest_source_dir")
- or r"c:\dev\LLTQ\ETL\feiqiu-ETL\etl_billiards\tests\testdata_json"
+ or r"tests/testdata_json"
)
if not os.path.exists(data_dir):
self.logger.error("Data directory not found: %s", data_dir)
diff --git a/tmp/etl_billiards_misc/tmp & Delete/schema_ODS_doc.sql.rewrite2.bak b/tmp/etl_billiards_misc/tmp & Delete/schema_ODS_doc.sql.rewrite2.bak
index b43bc12..b77de51 100644
--- a/tmp/etl_billiards_misc/tmp & Delete/schema_ODS_doc.sql.rewrite2.bak
+++ b/tmp/etl_billiards_misc/tmp & Delete/schema_ODS_doc.sql.rewrite2.bak
@@ -25,7 +25,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.member_profiles (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.member_profiles IS 'ODS 原始明细表:会员档案/会员账户信息。来源:C:/dev/LLTQ/export/test-json-doc/member_profiles.json;分析:member_profiles-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.member_profiles IS 'ODS 原始明细表:会员档案/会员账户信息。来源:export/test-json-doc/member_profiles.json;分析:member_profiles-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.member_profiles.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】tenant_id。';
COMMENT ON COLUMN billiards_ods.member_profiles.register_site_id IS '【说明】会员的注册门店 ID。 【示例】2790685415443269(用于会员的注册门店 ID)。 【JSON字段】register_site_id。';
COMMENT ON COLUMN billiards_ods.member_profiles.site_name IS '【说明】注册门店名称,属于冗余字段,用于直接展示。 【示例】朗朗桌球(注册门店名称,属于冗余字段,用于直接展示)。 【JSON字段】site_name。';
@@ -42,7 +42,7 @@ COMMENT ON COLUMN billiards_ods.member_profiles.status IS '【说明】帐户状
COMMENT ON COLUMN billiards_ods.member_profiles.user_status IS '【说明】用户账号状态(偏“用户逻辑”层面的状态)。 【示例】1(用于用户账号状态(偏“用户逻辑”层面的状态))。 【JSON字段】user_status。';
COMMENT ON COLUMN billiards_ods.member_profiles.create_time IS '【说明】会员账户的创建时间(即这条档案/这张卡在系统中被创建的时间)。 【示例】2025-11-08 01:29:33(用于会员账户的创建时间(即这条档案/这张卡在系统中被创建的时间))。 【JSON字段】create_time。';
COMMENT ON COLUMN billiards_ods.member_profiles.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】member_profiles.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.member_profiles.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/member_profiles.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.member_profiles.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/member_profiles.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.member_profiles.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.member_profiles.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
@@ -79,7 +79,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.member_balance_changes (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.member_balance_changes IS 'ODS 原始明细表:会员余额变更流水。来源:C:/dev/LLTQ/export/test-json-doc/member_balance_changes.json;分析:member_balance_changes-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.member_balance_changes IS 'ODS 原始明细表:会员余额变更流水。来源:export/test-json-doc/member_balance_changes.json;分析:member_balance_changes-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.member_balance_changes.tenant_id IS '【说明】租户/商户 ID,本数据中是固定值(同一品牌/商户)。 【示例】2790683160709957(用于租户/商户 ID,本数据中是固定值(同一品牌/商户))。 【JSON字段】tenant_id。';
COMMENT ON COLUMN billiards_ods.member_balance_changes.site_id IS '【说明】非 0:记录所属的具体门店 ID(与其他 JSON 内的 site_id 一致)。 【示例】2790685415443269(用于非 0:记录所属的具体门店 ID(与其他 JSON 内的 site_id 一致))。 【JSON字段】site_id。';
COMMENT ON COLUMN billiards_ods.member_balance_changes.register_site_id IS '【说明】会员卡的“注册门店 ID”,即办卡所在门店。 【示例】2790685415443269(用于会员卡的“注册门店 ID”,即办卡所在门店)。 【JSON字段】register_site_id。';
@@ -106,7 +106,7 @@ COMMENT ON COLUMN billiards_ods.member_balance_changes.operator_name IS '【说
COMMENT ON COLUMN billiards_ods.member_balance_changes.is_delete IS '【说明】逻辑删除标记(0=否,1=是)。。 【示例】0(用于逻辑删除标记(0=否,1=是))。 【JSON字段】is_delete。';
COMMENT ON COLUMN billiards_ods.member_balance_changes.create_time IS '【说明】本条余额变更记录的创建时间,通常接近交易发生时间。 【示例】2025-11-09 22:52:48(用于本条余额变更记录的创建时间,通常接近交易发生时间)。 【JSON字段】create_time。';
COMMENT ON COLUMN billiards_ods.member_balance_changes.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】member_balance_changes.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.member_balance_changes.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/member_balance_changes.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.member_balance_changes.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/member_balance_changes.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.member_balance_changes.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.member_balance_changes.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
@@ -187,7 +187,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.member_stored_value_cards (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.member_stored_value_cards IS 'ODS 原始明细表:会员储值/卡券账户列表。来源:C:/dev/LLTQ/export/test-json-doc/member_stored_value_cards.json;分析:member_stored_value_cards-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.member_stored_value_cards IS 'ODS 原始明细表:会员储值/卡券账户列表。来源:export/test-json-doc/member_stored_value_cards.json;分析:member_stored_value_cards-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenant_id IS '【说明】租户/品牌 ID,与其他 JSON 中 tenant_id 一致。 【示例】2790683160709957(用于租户/品牌 ID,与其他 JSON 中 tenant_id 一致)。 【JSON字段】tenant_id。';
COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenant_member_id IS '【说明】当前商户(品牌/租户)中会员的主键 ID。 【示例】2955204541320325(用于当前商户(品牌/租户)中会员的主键 ID)。 【JSON字段】tenant_member_id。';
COMMENT ON COLUMN billiards_ods.member_stored_value_cards.system_member_id IS '【说明】系统级会员 ID(跨门店统一主键)。 【示例】2955204540009605(用于系统级会员 ID(跨门店统一主键))。 【JSON字段】system_member_id。';
@@ -258,7 +258,7 @@ COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenantName IS '【说
COMMENT ON COLUMN billiards_ods.member_stored_value_cards.pdAssisnatLevel IS '【说明】允许使用的“陪打/助教等级”列表。 【示例】[](用于允许使用的“陪打/助教等级”列表)。 【JSON字段】pdAssisnatLevel。';
COMMENT ON COLUMN billiards_ods.member_stored_value_cards.cxAssisnatLevel IS '【说明】可能是“促销活动中的助教等级限制”(命名中 cx 多为“促销”缩写)。 【示例】[](用于可能是“促销活动中的助教等级限制”(命名中 cx 多为“促销”缩写))。 【JSON字段】cxAssisnatLevel。';
COMMENT ON COLUMN billiards_ods.member_stored_value_cards.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】member_stored_value_cards.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.member_stored_value_cards.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/member_stored_value_cards.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.member_stored_value_cards.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/member_stored_value_cards.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.member_stored_value_cards.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.member_stored_value_cards.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
@@ -331,7 +331,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.recharge_settlements (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.recharge_settlements IS 'ODS 原始明细表:充值结算记录。来源:C:/dev/LLTQ/export/test-json-doc/recharge_settlements.json;分析:recharge_settlements-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.recharge_settlements IS 'ODS 原始明细表:充值结算记录。来源:export/test-json-doc/recharge_settlements.json;分析:recharge_settlements-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.recharge_settlements.id IS '【说明】门店 ID。 【示例】NULL(用于门店 ID)。 【JSON字段】id。';
COMMENT ON COLUMN billiards_ods.recharge_settlements.tenantid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】tenantid。';
COMMENT ON COLUMN billiards_ods.recharge_settlements.siteid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】siteid。';
@@ -394,7 +394,7 @@ COMMENT ON COLUMN billiards_ods.recharge_settlements.isfirst IS '【说明】来
COMMENT ON COLUMN billiards_ods.recharge_settlements.rechargecardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】rechargecardamount。';
COMMENT ON COLUMN billiards_ods.recharge_settlements.giftcardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】giftcardamount。';
COMMENT ON COLUMN billiards_ods.recharge_settlements.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】recharge_settlements.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.recharge_settlements.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/recharge_settlements.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.recharge_settlements.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/recharge_settlements.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.recharge_settlements.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.recharge_settlements.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
@@ -467,7 +467,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.settlement_records (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.settlement_records IS 'ODS 原始明细表:结账/结算记录。来源:C:/dev/LLTQ/export/test-json-doc/settlement_records.json;分析:settlement_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.settlement_records IS 'ODS 原始明细表:结账/结算记录。来源:export/test-json-doc/settlement_records.json;分析:settlement_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.settlement_records.id IS '【说明】结账记录主键 ID(订单结算 ID)。 【示例】NULL(用于结账记录主键 ID(订单结算 ID))。 【JSON字段】id。';
COMMENT ON COLUMN billiards_ods.settlement_records.tenantid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】tenantid。';
COMMENT ON COLUMN billiards_ods.settlement_records.siteid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】siteid。';
@@ -530,7 +530,7 @@ COMMENT ON COLUMN billiards_ods.settlement_records.isfirst IS '【说明】来
COMMENT ON COLUMN billiards_ods.settlement_records.rechargecardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】rechargecardamount。';
COMMENT ON COLUMN billiards_ods.settlement_records.giftcardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】giftcardamount。';
COMMENT ON COLUMN billiards_ods.settlement_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】settlement_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.settlement_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/settlement_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.settlement_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/settlement_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.settlement_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.settlement_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
@@ -555,7 +555,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.assistant_cancellation_records (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.assistant_cancellation_records IS 'ODS 原始明细表:助教作废/取消记录。来源:C:/dev/LLTQ/export/test-json-doc/assistant_cancellation_records.json;分析:assistant_cancellation_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.assistant_cancellation_records IS 'ODS 原始明细表:助教作废/取消记录。来源:export/test-json-doc/assistant_cancellation_records.json;分析:assistant_cancellation_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.id IS '【说明】本表主键 ID,用于唯一标识一条记录。 【示例】2957675849518789(本表主键 ID,用于唯一标识一条记录)。 【JSON字段】id。';
COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.siteId IS '【说明】门店 ID,即该废除记录所在门店。 【示例】2790685415443269(用于门店 ID,即该废除记录所在门店)。 【JSON字段】siteId。';
COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.siteProfile IS '【说明】门店信息快照。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(用于门店信息快照)。 【JSON字段】siteProfile。';
@@ -570,7 +570,7 @@ COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableName IS '【
COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.trashReason IS '【说明】用于记录“废除原因”的文本描述,例如“顾客临时有事取消”“录入错误”“更换助教”等。 【示例】NULL(用于记录“废除原因”的文本描述,例如“顾客临时有事取消”“录入错误”“更换助教”等)。 【JSON字段】trashReason。';
COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.createTime IS '【说明】这条“助教废除记录”被创建的时间,即系统正式记录“废除”操作的时刻。 【示例】2025-11-09 19:23:29(用于这条“助教废除记录”被创建的时间,即系统正式记录“废除”操作的时刻)。 【JSON字段】createTime。';
COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】assistant_cancellation_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/assistant_cancellation_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/assistant_cancellation_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
@@ -644,7 +644,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.assistant_accounts_master (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.assistant_accounts_master IS 'ODS 原始明细表:助教档案主数据。来源:C:/dev/LLTQ/export/test-json-doc/assistant_accounts_master.json;分析:assistant_accounts_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.assistant_accounts_master IS 'ODS 原始明细表:助教档案主数据。来源:export/test-json-doc/assistant_accounts_master.json;分析:assistant_accounts_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.assistant_accounts_master.id IS '【说明】助教账号主键 ID,在“助教流水.json”中对应 site_assistant_id。 【示例】2947562271297029(用于助教账号主键 ID,在“助教流水.json”中对应 site_assistant_id)。 【JSON字段】id。';
COMMENT ON COLUMN billiards_ods.assistant_accounts_master.tenant_id IS '【说明】品牌/租户 ID,对应“非球科技”系统中该商户的唯一标识。 【示例】2790683160709957(用于品牌/租户 ID,对应“非球科技”系统中该商户的唯一标识)。 【JSON字段】tenant_id。';
COMMENT ON COLUMN billiards_ods.assistant_accounts_master.site_id IS '【说明】门店 ID,对应本次数据的这家球房(朗朗桌球)。 【示例】2790685415443269(用于门店 ID,对应本次数据的这家球房(朗朗桌球))。 【JSON字段】site_id。';
@@ -708,7 +708,7 @@ COMMENT ON COLUMN billiards_ods.assistant_accounts_master.light_equipment_id IS
COMMENT ON COLUMN billiards_ods.assistant_accounts_master.entry_sign_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】0(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】entry_sign_status。';
COMMENT ON COLUMN billiards_ods.assistant_accounts_master.resign_sign_status IS '【说明】离职协议签署状态,类似上面。 【示例】0(用于离职协议签署状态,类似上面)。 【JSON字段】resign_sign_status。';
COMMENT ON COLUMN billiards_ods.assistant_accounts_master.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】assistant_accounts_master.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.assistant_accounts_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/assistant_accounts_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.assistant_accounts_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/assistant_accounts_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.assistant_accounts_master.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.assistant_accounts_master.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
@@ -784,7 +784,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.assistant_service_records (
fetched_at TIMESTAMPTZ DEFAULT now()
);
-COMMENT ON TABLE billiards_ods.assistant_service_records IS 'ODS 原始明细表:助教服务流水。来源:C:/dev/LLTQ/export/test-json-doc/assistant_service_records.json;分析:assistant_service_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.assistant_service_records IS 'ODS 原始明细表:助教服务流水。来源:export/test-json-doc/assistant_service_records.json;分析:assistant_service_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.assistant_service_records.id IS '【说明】本条助教流水记录的主键 ID(流水唯一标识)。 【示例】2957913441292165(用于本条助教流水记录的主键 ID(流水唯一标识))。 【JSON字段】id。';
COMMENT ON COLUMN billiards_ods.assistant_service_records.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】tenant_id。';
COMMENT ON COLUMN billiards_ods.assistant_service_records.site_id IS '【说明】门店 ID,本数据中指“朗朗桌球”这一家门店。 【示例】2790685415443269(用于门店 ID,本数据中指“朗朗桌球”这一家门店)。 【JSON字段】site_id。';
@@ -851,7 +851,7 @@ COMMENT ON COLUMN billiards_ods.assistant_service_records.is_not_responding IS '
COMMENT ON COLUMN billiards_ods.assistant_service_records.is_confirm IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。。 【示例】2(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【JSON字段】is_confirm。';
COMMENT ON COLUMN billiards_ods.assistant_service_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
COMMENT ON COLUMN billiards_ods.assistant_service_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】assistant_service_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.assistant_service_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/assistant_service_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.assistant_service_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/assistant_service_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.assistant_service_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
@@ -887,7 +887,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.site_tables_master (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.site_tables_master IS 'ODS 原始明细表:门店桌台主数据。来源:C:/dev/LLTQ/export/test-json-doc/site_tables_master.json;分析:site_tables_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.site_tables_master IS 'ODS 原始明细表:门店桌台主数据。来源:export/test-json-doc/site_tables_master.json;分析:site_tables_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.site_tables_master.id IS '【说明】台桌主键 ID。 【示例】2791964216463493(用于台桌主键 ID)。 【JSON字段】id。';
COMMENT ON COLUMN billiards_ods.site_tables_master.site_id IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【JSON字段】site_id。';
COMMENT ON COLUMN billiards_ods.site_tables_master.siteName IS '【说明】门店名称快照,冗余字段,配合 site_id 使用。 【示例】朗朗桌球(用于门店名称快照,冗余字段,配合 site_id 使用)。 【JSON字段】siteName。';
@@ -913,7 +913,7 @@ COMMENT ON COLUMN billiards_ods.site_tables_master.table_status IS '【说明】
COMMENT ON COLUMN billiards_ods.site_tables_master.temporary_light_second IS '【说明】临时点灯时长(秒),例如手动临时开灯一段时间。 【示例】0(用于临时点灯时长(秒),例如手动临时开灯一段时间)。 【JSON字段】temporary_light_second。';
COMMENT ON COLUMN billiards_ods.site_tables_master.virtual_table IS '【说明】当前值:全部为 0。 【示例】0(用于当前值:全部为 0)。 【JSON字段】virtual_table。';
COMMENT ON COLUMN billiards_ods.site_tables_master.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】site_tables_master.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.site_tables_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/site_tables_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.site_tables_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/site_tables_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.site_tables_master.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.site_tables_master.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
@@ -945,7 +945,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.table_fee_discount_records (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.table_fee_discount_records IS 'ODS 原始明细表:台费折扣记录。来源:C:/dev/LLTQ/export/test-json-doc/table_fee_discount_records.json;分析:table_fee_discount_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.table_fee_discount_records IS 'ODS 原始明细表:台费折扣记录。来源:export/test-json-doc/table_fee_discount_records.json;分析:table_fee_discount_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.table_fee_discount_records.id IS '【说明】台费打折 / 调整流水主键 ID。 【示例】2957913441881989(用于台费打折 / 调整流水主键 ID)。 【JSON字段】id。';
COMMENT ON COLUMN billiards_ods.table_fee_discount_records.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】tenant_id。';
COMMENT ON COLUMN billiards_ods.table_fee_discount_records.site_id IS '【说明】门店 ID,本批数据全部为同一家门店(朗朗桌球)。 【示例】2790685415443269(用于门店 ID,本批数据全部为同一家门店(朗朗桌球))。 【JSON字段】site_id。';
@@ -967,7 +967,7 @@ COMMENT ON COLUMN billiards_ods.table_fee_discount_records.order_trade_no IS '
COMMENT ON COLUMN billiards_ods.table_fee_discount_records.is_delete IS '【说明】逻辑删除标记(0=否,1=是)。。 【示例】0(用于逻辑删除标记(0=否,1=是))。 【JSON字段】is_delete。';
COMMENT ON COLUMN billiards_ods.table_fee_discount_records.create_time IS '【说明】台费调整记录的创建时间,即打折操作被执行的时间戳。 【示例】2025-11-09 23:25:11(用于台费调整记录的创建时间,即打折操作被执行的时间戳)。 【JSON字段】create_time。';
COMMENT ON COLUMN billiards_ods.table_fee_discount_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】table_fee_discount_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.table_fee_discount_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/table_fee_discount_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.table_fee_discount_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/table_fee_discount_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.table_fee_discount_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.table_fee_discount_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
@@ -1018,7 +1018,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.table_fee_transactions (
fetched_at TIMESTAMPTZ DEFAULT now()
);
-COMMENT ON TABLE billiards_ods.table_fee_transactions IS 'ODS 原始明细表:台费流水。来源:C:/dev/LLTQ/export/test-json-doc/table_fee_transactions.json;分析:table_fee_transactions-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.table_fee_transactions IS 'ODS 原始明细表:台费流水。来源:export/test-json-doc/table_fee_transactions.json;分析:table_fee_transactions-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.table_fee_transactions.id IS '【说明】台费流水记录主键(事实表主键)。 【示例】2957924029058885(用于台费流水记录主键(事实表主键))。 【JSON字段】id。';
COMMENT ON COLUMN billiards_ods.table_fee_transactions.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】tenant_id。';
COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_id IS '【说明】门店 ID,本次数据全部来自同一门店(朗朗桌球)。 【示例】2790685415443269(用于门店 ID,本次数据全部来自同一门店(朗朗桌球))。 【JSON字段】site_id。';
@@ -1060,7 +1060,7 @@ COMMENT ON COLUMN billiards_ods.table_fee_transactions.salesman_user_id IS '【
COMMENT ON COLUMN billiards_ods.table_fee_transactions.create_time IS '【说明】这条台费流水记录的创建时间,通常接近结账时间。 【示例】2025-11-09 23:35:57(用于这条台费流水记录的创建时间,通常接近结账时间)。 【JSON字段】create_time。';
COMMENT ON COLUMN billiards_ods.table_fee_transactions.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
COMMENT ON COLUMN billiards_ods.table_fee_transactions.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】table_fee_transactions.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.table_fee_transactions.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/table_fee_transactions.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.table_fee_transactions.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/table_fee_transactions.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.table_fee_transactions.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
@@ -1090,7 +1090,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.goods_stock_movements (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.goods_stock_movements IS 'ODS 原始明细表:商品库存变动流水。来源:C:/dev/LLTQ/export/test-json-doc/goods_stock_movements.json;分析:goods_stock_movements-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.goods_stock_movements IS 'ODS 原始明细表:商品库存变动流水。来源:export/test-json-doc/goods_stock_movements.json;分析:goods_stock_movements-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.goods_stock_movements.siteGoodsStockId IS '【说明】门店某个“商品库存记录”的主键 ID。 【示例】2957911857581957(用于门店某个“商品库存记录”的主键 ID)。 【JSON字段】siteGoodsStockId。';
COMMENT ON COLUMN billiards_ods.goods_stock_movements.tenantId IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】tenantId。';
COMMENT ON COLUMN billiards_ods.goods_stock_movements.siteId IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【JSON字段】siteId。';
@@ -1111,7 +1111,7 @@ COMMENT ON COLUMN billiards_ods.goods_stock_movements.remark IS '【说明】备
COMMENT ON COLUMN billiards_ods.goods_stock_movements.operatorName IS '【说明】执行此次库存变动的操作人。 【示例】收银员:郑丽珊(用于执行此次库存变动的操作人)。 【JSON字段】operatorName。';
COMMENT ON COLUMN billiards_ods.goods_stock_movements.createTime IS '【说明】这条库存变动记录的创建时间,即发生库存变更的时间点。 【示例】2025-11-09 23:23:34(用于这条库存变动记录的创建时间,即发生库存变更的时间点)。 【JSON字段】createTime。';
COMMENT ON COLUMN billiards_ods.goods_stock_movements.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】goods_stock_movements.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.goods_stock_movements.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/goods_stock_movements.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.goods_stock_movements.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/goods_stock_movements.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.goods_stock_movements.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.goods_stock_movements.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
@@ -1134,7 +1134,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.stock_goods_category_tree (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.stock_goods_category_tree IS 'ODS 原始明细表:商品分类树。来源:C:/dev/LLTQ/export/test-json-doc/stock_goods_category_tree.json;分析:stock_goods_category_tree-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.stock_goods_category_tree IS 'ODS 原始明细表:商品分类树。来源:export/test-json-doc/stock_goods_category_tree.json;分析:stock_goods_category_tree-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.id IS '【说明】分类节点主键 ID(在商品分类维度中的唯一标识)。 【示例】2790683528350533(用于分类节点主键 ID(在商品分类维度中的唯一标识))。 【JSON字段】id。';
COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.tenant_id IS '【说明】租户 ID(品牌/商户 ID)。 【示例】2790683160709957(用于租户 ID(品牌/商户 ID))。 【JSON字段】tenant_id。';
COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.category_name IS '【说明】分类名称(实际业务分类名称)。 【示例】槟榔(用于分类名称(实际业务分类名称))。 【JSON字段】category_name。';
@@ -1147,7 +1147,7 @@ COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.categoryBoxes IS '【
COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.sort IS '【说明】分类的排序序号,用于前端展示顺序的控制。 【示例】1(分类的排序序号,用于前端展示顺序的控制)。 【JSON字段】sort。';
COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.is_warehousing IS '【说明】本文件可视为“所有参与库存管理的商品分类清单”,因此均为 1。 【示例】1(用于本文件可视为“所有参与库存管理的商品分类清单”,因此均为 1)。 【JSON字段】is_warehousing。';
COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】stock_goods_category_tree.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/stock_goods_category_tree.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/stock_goods_category_tree.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
@@ -1173,7 +1173,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.goods_stock_summary (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.goods_stock_summary IS 'ODS 原始明细表:商品库存汇总。来源:C:/dev/LLTQ/export/test-json-doc/goods_stock_summary.json;分析:goods_stock_summary-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.goods_stock_summary IS 'ODS 原始明细表:商品库存汇总。来源:export/test-json-doc/goods_stock_summary.json;分析:goods_stock_summary-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.goods_stock_summary.siteGoodsId IS '【说明】门店商品 ID,本库存汇总表的主键,对应某个具体商品在本店的唯一标识。 【示例】2791953867886725(用于门店商品 ID,本库存汇总表的主键,对应某个具体商品在本店的唯一标识)。 【JSON字段】siteGoodsId。';
COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsName IS '【说明】商品名称,冗余于门店商品档案的 goods_name。 【示例】东方树叶(用于商品名称,冗余于门店商品档案的 goods_name)。 【JSON字段】goodsName。';
COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsUnit IS '【说明】商品的计量单位(售卖单位)。 【示例】瓶(用于商品的计量单位(售卖单位))。 【JSON字段】goodsUnit。';
@@ -1189,7 +1189,7 @@ COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeSaleMoney IS '【说明
COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeInventory IS '【说明】查询区间内的 盘点调整净变动量(盘盈–盘亏)。 【示例】0(用于查询区间内的 盘点调整净变动量(盘盈–盘亏))。 【JSON字段】rangeInventory。';
COMMENT ON COLUMN billiards_ods.goods_stock_summary.currentStock IS '【说明】导出时刻的实时库存数量。 【示例】118(用于导出时刻的实时库存数量)。 【JSON字段】currentStock。';
COMMENT ON COLUMN billiards_ods.goods_stock_summary.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】goods_stock_summary.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.goods_stock_summary.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/goods_stock_summary.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.goods_stock_summary.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/goods_stock_summary.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.goods_stock_summary.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.goods_stock_summary.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
@@ -1212,7 +1212,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.payment_transactions (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.payment_transactions IS 'ODS 原始明细表:支付流水。来源:C:/dev/LLTQ/export/test-json-doc/payment_transactions.json;分析:payment_transactions-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.payment_transactions IS 'ODS 原始明细表:支付流水。来源:export/test-json-doc/payment_transactions.json;分析:payment_transactions-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.payment_transactions.id IS '【说明】支付流水记录的主键 ID。 【示例】2957924026486597(用于支付流水记录的主键 ID)。 【JSON字段】id。';
COMMENT ON COLUMN billiards_ods.payment_transactions.site_id IS '【说明】支付记录所属的门店 ID。 【示例】2790685415443269(用于支付记录所属的门店 ID)。 【JSON字段】site_id。';
COMMENT ON COLUMN billiards_ods.payment_transactions.siteProfile IS '【说明】门店信息快照,与其他 JSON 中的 siteProfile 结构一致。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(用于门店信息快照,与其他 JSON 中的 siteProfile 结构一致)。 【JSON字段】siteProfile。';
@@ -1225,7 +1225,7 @@ COMMENT ON COLUMN billiards_ods.payment_transactions.create_time IS '【说明
COMMENT ON COLUMN billiards_ods.payment_transactions.payment_method IS '【说明】支付方式枚举,例如微信、支付宝、现金、银行卡、储值卡等某一种。 【示例】4(用于支付方式枚举,例如微信、支付宝、现金、银行卡、储值卡等某一种)。 【JSON字段】payment_method。';
COMMENT ON COLUMN billiards_ods.payment_transactions.online_pay_channel IS '【说明】每一笔结账单(settleList.id)对应一条支付记录(当前样本中是一条记录,relate_id 唯一)。 【示例】0(用于每一笔结账单(settleList.id)对应一条支付记录(当前样本中是一条记录,relate_id 唯一))。 【JSON字段】online_pay_channel。';
COMMENT ON COLUMN billiards_ods.payment_transactions.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】payment_transactions.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.payment_transactions.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/payment_transactions.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.payment_transactions.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/payment_transactions.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.payment_transactions.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.payment_transactions.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
@@ -1269,7 +1269,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.refund_transactions (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.refund_transactions IS 'ODS 原始明细表:退款流水。来源:C:/dev/LLTQ/export/test-json-doc/refund_transactions.json;分析:refund_transactions-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.refund_transactions IS 'ODS 原始明细表:退款流水。来源:export/test-json-doc/refund_transactions.json;分析:refund_transactions-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.refund_transactions.id IS '【说明】本条 退款流水 的唯一 ID。 【示例】2955202296416389(用于本条 退款流水 的唯一 ID)。 【JSON字段】id。';
COMMENT ON COLUMN billiards_ods.refund_transactions.tenant_id IS '【说明】租户/品牌 ID,全系统维度标识该商户。 【示例】2790683160709957(用于租户/品牌 ID,全系统维度标识该商户)。 【JSON字段】tenant_id。';
COMMENT ON COLUMN billiards_ods.refund_transactions.tenantName IS '【说明】租户(商户)名称。 【示例】朗朗桌球(用于租户(商户)名称)。 【JSON字段】tenantName。';
@@ -1303,7 +1303,7 @@ COMMENT ON COLUMN billiards_ods.refund_transactions.is_delete IS '【说明】
COMMENT ON COLUMN billiards_ods.refund_transactions.balance_frozen_amount IS '【说明】涉及会员储值卡退款时,暂时冻结的余额金额。 【示例】0.0(用于涉及会员储值卡退款时,暂时冻结的余额金额)。 【JSON字段】balance_frozen_amount。';
COMMENT ON COLUMN billiards_ods.refund_transactions.card_frozen_amount IS '【说明】与上一个类似,偏向“某张卡的被冻结金额”,也与会员卡/储值账户相关。 【示例】0.0(用于与上一个类似,偏向“某张卡的被冻结金额”,也与会员卡/储值账户相关)。 【JSON字段】card_frozen_amount。';
COMMENT ON COLUMN billiards_ods.refund_transactions.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】refund_transactions.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.refund_transactions.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/refund_transactions.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.refund_transactions.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/refund_transactions.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.refund_transactions.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.refund_transactions.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
@@ -1341,7 +1341,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.platform_coupon_redemption_records (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.platform_coupon_redemption_records IS 'ODS 原始明细表:平台券核销/使用记录。来源:C:/dev/LLTQ/export/test-json-doc/platform_coupon_redemption_records.json;分析:platform_coupon_redemption_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.platform_coupon_redemption_records IS 'ODS 原始明细表:平台券核销/使用记录。来源:export/test-json-doc/platform_coupon_redemption_records.json;分析:platform_coupon_redemption_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.id IS '【说明】本条平台验券记录在本系统内的主键 ID。 【示例】2957929042218501(用于本条平台验券记录在本系统内的主键 ID)。 【JSON字段】id。';
COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.verify_id IS '【说明】平台核销记录 ID(某些平台会为每一次核销生成一个唯一 ID)。 【示例】7570689090418149418(用于平台核销记录 ID(某些平台会为每一次核销生成一个唯一 ID))。 【JSON字段】verify_id。';
COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.certificate_id IS '【说明】平台侧的凭证 ID(通常由第三方团购平台生成的券实例 ID)。 【示例】5008024789379597447(用于平台侧的凭证 ID(通常由第三方团购平台生成的券实例 ID))。 【JSON字段】certificate_id。';
@@ -1369,7 +1369,7 @@ COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.operator_name
COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.is_delete IS '【说明】把平台验券记录挂到本门店的一条订单上。 【示例】0(用于把平台验券记录挂到本门店的一条订单上)。 【JSON字段】is_delete。';
COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.siteProfile IS '【说明】门店信息快照。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(用于门店信息快照)。 【JSON字段】siteProfile。';
COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】platform_coupon_redemption_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/platform_coupon_redemption_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/platform_coupon_redemption_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
@@ -1412,7 +1412,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.tenant_goods_master (
fetched_at TIMESTAMPTZ DEFAULT now()
);
-COMMENT ON TABLE billiards_ods.tenant_goods_master IS 'ODS 原始明细表:租户商品主数据。来源:C:/dev/LLTQ/export/test-json-doc/tenant_goods_master.json;分析:tenant_goods_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.tenant_goods_master IS 'ODS 原始明细表:租户商品主数据。来源:export/test-json-doc/tenant_goods_master.json;分析:tenant_goods_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.tenant_goods_master.id IS '【说明】商品档案主键 ID,唯一标识一条商品。 【示例】2791925230096261(用于商品档案主键 ID,唯一标识一条商品)。 【JSON字段】id。';
COMMENT ON COLUMN billiards_ods.tenant_goods_master.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】tenant_id。';
COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_name IS '【说明】商品名称(前台展示名称)。 【示例】东方树叶(用于商品名称(前台展示名称))。 【JSON字段】goods_name。';
@@ -1446,7 +1446,7 @@ COMMENT ON COLUMN billiards_ods.tenant_goods_master.create_time IS '【说明】
COMMENT ON COLUMN billiards_ods.tenant_goods_master.update_time IS '【说明】商品档案最近一次修改时间。 【示例】2025-10-29 23:51:38(用于商品档案最近一次修改时间)。 【JSON字段】update_time。';
COMMENT ON COLUMN billiards_ods.tenant_goods_master.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
COMMENT ON COLUMN billiards_ods.tenant_goods_master.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】tenant_goods_master.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.tenant_goods_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/tenant_goods_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.tenant_goods_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/tenant_goods_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.tenant_goods_master.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
@@ -1492,7 +1492,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.group_buy_packages (
payload JSONB NOT NULL
);
-COMMENT ON TABLE billiards_ods.group_buy_packages IS 'ODS 原始明细表:团购套餐主数据。来源:C:/dev/LLTQ/export/test-json-doc/group_buy_packages.json;分析:group_buy_packages-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.group_buy_packages IS 'ODS 原始明细表:团购套餐主数据。来源:export/test-json-doc/group_buy_packages.json;分析:group_buy_packages-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.group_buy_packages.id IS '【说明】门店侧套餐 ID,本文件内部的主键。 【示例】2939215004469573(用于门店侧套餐 ID,本文件内部的主键)。 【JSON字段】id。';
COMMENT ON COLUMN billiards_ods.group_buy_packages.package_id IS '【说明】“上层套餐 ID” 或“总部/系统级套餐 ID”。 【示例】1814707240811572(用于“上层套餐 ID” 或“总部/系统级套餐 ID”)。 【JSON字段】package_id。';
COMMENT ON COLUMN billiards_ods.group_buy_packages.package_name IS '【说明】团购套餐名称,用于前台展示和核销界面。 【示例】早场特惠一小时(团购套餐名称,用于前台展示和核销界面)。 【JSON字段】package_name。';
@@ -1529,7 +1529,7 @@ COMMENT ON COLUMN billiards_ods.group_buy_packages.area_tag_type IS '【说明
COMMENT ON COLUMN billiards_ods.group_buy_packages.creator_name IS '【说明】创建人信息,一般包含“角色:姓名”。 【示例】店长:郑丽珊(用于创建人信息,一般包含“角色:姓名”)。 【JSON字段】creator_name。';
COMMENT ON COLUMN billiards_ods.group_buy_packages.create_time IS '【说明】该套餐在系统中创建的时间。 【示例】2025-10-27 18:24:09(用于该套餐在系统中创建的时间)。 【JSON字段】create_time。';
COMMENT ON COLUMN billiards_ods.group_buy_packages.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】group_buy_packages.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.group_buy_packages.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/group_buy_packages.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.group_buy_packages.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/group_buy_packages.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.group_buy_packages.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.group_buy_packages.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
@@ -1584,7 +1584,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.group_buy_redemption_records (
fetched_at TIMESTAMPTZ DEFAULT now()
);
-COMMENT ON TABLE billiards_ods.group_buy_redemption_records IS 'ODS 原始明细表:团购核销记录。来源:C:/dev/LLTQ/export/test-json-doc/group_buy_redemption_records.json;分析:group_buy_redemption_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.group_buy_redemption_records IS 'ODS 原始明细表:团购核销记录。来源:export/test-json-doc/group_buy_redemption_records.json;分析:group_buy_redemption_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.id IS '【说明】本条“团购套餐流水”记录的 主键 ID。 【示例】2957924029615941(用于本条“团购套餐流水”记录的 主键 ID)。 【JSON字段】id。';
COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】tenant_id。';
COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.site_id IS '【说明】门店 ID,与其它 JSON 中一致。 【示例】2790685415443269(用于门店 ID,与其它 JSON 中一致)。 【JSON字段】site_id。';
@@ -1630,7 +1630,7 @@ COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.is_delete IS '【
COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.create_time IS '【说明】本条团购套餐使用流水创建时间(即券核销时间,或与结账时间接近)。 【示例】2025-11-09 23:35:57(用于本条团购套餐使用流水创建时间(即券核销时间,或与结账时间接近))。 【JSON字段】create_time。';
COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】group_buy_redemption_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/group_buy_redemption_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/group_buy_redemption_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
@@ -1679,7 +1679,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.settlement_ticket_details (
fetched_at TIMESTAMPTZ DEFAULT now()
);
-COMMENT ON TABLE billiards_ods.settlement_ticket_details IS 'ODS 原始明细表:结算小票明细。来源:C:/dev/LLTQ/export/test-json-doc/settlement_ticket_details.json;分析:settlement_ticket_details-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.settlement_ticket_details IS 'ODS 原始明细表:结算小票明细。来源:export/test-json-doc/settlement_ticket_details.json;分析:settlement_ticket_details-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderSettleId IS '【说明】结算单 ID(和顶层字段相同,再次冗余)。 【示例】2957922914357125(用于结算单 ID(和顶层字段相同,再次冗余))。 【JSON字段】orderSettleId。';
COMMENT ON COLUMN billiards_ods.settlement_ticket_details.actualPayment IS '【说明】本单实际支付金额总和(顾客本次实际付出:现金 + 线上 + 会员余额等)。 【示例】NULL(用于本单实际支付金额总和(顾客本次实际付出:现金 + 线上 + 会员余额等))。 【JSON字段】actualPayment。';
COMMENT ON COLUMN billiards_ods.settlement_ticket_details.adjustAmount IS '【说明】人工调价/整单调整金额(例如手工改价、折扣调整),是所有类型的手工调整合计。 【示例】NULL(用于人工调价/整单调整金额(例如手工改价、折扣调整),是所有类型的手工调整合计)。 【JSON字段】adjustAmount。';
@@ -1720,7 +1720,7 @@ COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderItem IS '【说
COMMENT ON COLUMN billiards_ods.settlement_ticket_details.tenantMemberCardLogs IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】tenantMemberCardLogs。';
COMMENT ON COLUMN billiards_ods.settlement_ticket_details.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
COMMENT ON COLUMN billiards_ods.settlement_ticket_details.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】settlement_ticket_details.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.settlement_ticket_details.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/settlement_ticket_details.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.settlement_ticket_details.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/settlement_ticket_details.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.settlement_ticket_details.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
@@ -1776,7 +1776,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.store_goods_master (
fetched_at TIMESTAMPTZ DEFAULT now()
);
-COMMENT ON TABLE billiards_ods.store_goods_master IS 'ODS 原始明细表:门店商品主数据。来源:C:/dev/LLTQ/export/test-json-doc/store_goods_master.json;分析:store_goods_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.store_goods_master IS 'ODS 原始明细表:门店商品主数据。来源:export/test-json-doc/store_goods_master.json;分析:store_goods_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.store_goods_master.id IS '【说明】门店商品 ID,门店维度的商品主键。 【示例】2793025851560005(用于门店商品 ID,门店维度的商品主键)。 【JSON字段】id。';
COMMENT ON COLUMN billiards_ods.store_goods_master.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】tenant_id。';
COMMENT ON COLUMN billiards_ods.store_goods_master.site_id IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【JSON字段】site_id。';
@@ -1823,7 +1823,7 @@ COMMENT ON COLUMN billiards_ods.store_goods_master.create_time IS '【说明】
COMMENT ON COLUMN billiards_ods.store_goods_master.update_time IS '【说明】最后一次修改该商品档案的时间(包括价格调整、状态变更等)。 【示例】2025-11-09 07:23:47(用于最后一次修改该商品档案的时间(包括价格调整、状态变更等))。 【JSON字段】update_time。';
COMMENT ON COLUMN billiards_ods.store_goods_master.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
COMMENT ON COLUMN billiards_ods.store_goods_master.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】store_goods_master.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.store_goods_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/store_goods_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.store_goods_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/store_goods_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.store_goods_master.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
@@ -1885,7 +1885,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.store_goods_sales_records (
fetched_at TIMESTAMPTZ DEFAULT now()
);
-COMMENT ON TABLE billiards_ods.store_goods_sales_records IS 'ODS 原始明细表:门店商品销售流水。来源:C:/dev/LLTQ/export/test-json-doc/store_goods_sales_records.json;分析:store_goods_sales_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
+COMMENT ON TABLE billiards_ods.store_goods_sales_records IS 'ODS 原始明细表:门店商品销售流水。来源:export/test-json-doc/store_goods_sales_records.json;分析:store_goods_sales_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。';
COMMENT ON COLUMN billiards_ods.store_goods_sales_records.id IS '【说明】本条「门店销售流水」记录的主键 ID。 【示例】2957924029550406(用于本条「门店销售流水」记录的主键 ID)。 【JSON字段】id。';
COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】tenant_id。';
COMMENT ON COLUMN billiards_ods.store_goods_sales_records.site_id IS '【说明】门店 ID(系统主键)。 【示例】2790685415443269(用于门店 ID(系统主键))。 【JSON字段】site_id。';
@@ -1939,7 +1939,7 @@ COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_goods_category_
COMMENT ON COLUMN billiards_ods.store_goods_sales_records.create_time IS '【说明】销售记录创建时间,通常就是结账时间或录入时间。 【示例】2025-11-09 23:35:57(用于销售记录创建时间,通常就是结账时间或录入时间)。 【JSON字段】create_time。';
COMMENT ON COLUMN billiards_ods.store_goods_sales_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。';
COMMENT ON COLUMN billiards_ods.store_goods_sales_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】store_goods_sales_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。';
-COMMENT ON COLUMN billiards_ods.store_goods_sales_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/store_goods_sales_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
+COMMENT ON COLUMN billiards_ods.store_goods_sales_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】export/test-json-doc/store_goods_sales_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。';
COMMENT ON COLUMN billiards_ods.store_goods_sales_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。';
diff --git a/tmp/etl_billiards_misc/草稿.txt b/tmp/etl_billiards_misc/草稿.txt
index a430af7..5d333cf 100644
--- a/tmp/etl_billiards_misc/草稿.txt
+++ b/tmp/etl_billiards_misc/草稿.txt
@@ -1,5 +1,5 @@
-一个用于开发的示例目录:C:\dev\LLTQ\export\test-json-doc
+一个用于开发的示例目录:export/test-json-doc
我建议完全删除LLZQ-test数据库中名称是billiards_ods的Schema下全部表和内容。根据非球接口API.md文档重建表,表名
@@ -18,7 +18,7 @@
下面开始重建数据库的ODS。
-一个用于开发的示例目录:C:\dev\LLTQ\export\test-json-doc。是测试用的json数据,并且已经按照现行逻辑进行了重命名。对应.md是Json数据的分析。
+一个用于开发的示例目录:export/test-json-doc。是测试用的json数据,并且已经按照现行逻辑进行了重命名。对应.md是Json数据的分析。
用于数据库ODS层的构建和Python文件的编写。
我建议完全删除LLZQ-test数据库中名称是billiards_ods的Schema下全部表和内容。根据上述示例目录的json和md文档重建表,表名就按对应json文件名来,字段名就是json字段名。
我理解ODS层本来就说Json文件的数据库留档,我这么理解对么?
diff --git a/tmp/rewrite_schema_dwd_doc_comments.py b/tmp/rewrite_schema_dwd_doc_comments.py
index 8802ecf..16a4746 100644
--- a/tmp/rewrite_schema_dwd_doc_comments.py
+++ b/tmp/rewrite_schema_dwd_doc_comments.py
@@ -5,9 +5,9 @@ import re
from collections import deque
from pathlib import Path
-ROOT = Path(r"C:\dev\LLTQ\ETL\feiqiu-ETL")
+ROOT = Path(".")
SQL_PATH = ROOT / "etl_billiards" / "database" / "schema_dwd_doc.sql"
-DOC_DIR = Path(r"C:\dev\LLTQ\export\test-json-doc")
+DOC_DIR = ROOT / "etl_billiards" / "export" / "test-json-doc"
DWD_TASK_PATH = ROOT / "etl_billiards" / "tasks" / "dwd_load_task.py"
SCD_COLS = {"scd2_start_time", "scd2_end_time", "scd2_is_current", "scd2_version"}
diff --git a/tmp/rewrite_schema_ods_doc_comments.py b/tmp/rewrite_schema_ods_doc_comments.py
index 399ff5e..db121ea 100644
--- a/tmp/rewrite_schema_ods_doc_comments.py
+++ b/tmp/rewrite_schema_ods_doc_comments.py
@@ -4,8 +4,8 @@ import re
from pathlib import Path
from collections import defaultdict
-SQL_PATH = Path(r"C:\dev\LLTQ\ETL\feiqiu-ETL\etl_billiards\database\schema_ODS_doc.sql")
-DOC_DIR = Path(r"C:\dev\LLTQ\export\test-json-doc")
+SQL_PATH = Path("etl_billiards") / "database" / "schema_ODS_doc.sql"
+DOC_DIR = Path("etl_billiards") / "export" / "test-json-doc"
TABLE_CN = {
"member_profiles": "会员档案/会员账户信息",
@@ -449,7 +449,7 @@ def build_comment_block(table: str, columns, analysis_text: str, records):
table_comment = (
f"ODS 原始明细表:{table_cn}。"
- f"来源:C:/dev/LLTQ/export/test-json-doc/{table}.json;分析:{table}-Analysis.md。"
+ f"来源:etl_billiards/export/test-json-doc/{table}.json;分析:{table}-Analysis.md。"
f"字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。"
)
@@ -481,7 +481,7 @@ def build_comment_block(table: str, columns, analysis_text: str, records):
if col == "source_file":
ex = f"{table}.json"
elif col == "source_endpoint":
- ex = f"C:/dev/LLTQ/export/test-json-doc/{table}.json"
+ ex = f"etl_billiards/export/test-json-doc/{table}.json"
else:
ex = "2025-11-10T00:00:00+08:00"
elif col == "payload":