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 的图形化工具。

" + "

功能包括:

" + "" + ) + + 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":