Files
feiqiu-ETL/etl_billiards/scheduled_tasks.json
2026-02-04 21:39:01 +08:00

331 lines
854 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"tasks": {
"8f669bfd": {
"id": "8f669bfd",
"name": "日常同步 (2h)",
"task_codes": [
"ODS_GOODS_CATEGORY",
"ODS_RECHARGE_SETTLE",
"ODS_TENANT_GOODS",
"ODS_SETTLEMENT_TICKET",
"ODS_GROUP_PACKAGE",
"ODS_ASSISTANT_ABOLISH",
"ODS_MEMBER",
"ODS_ASSISTANT_LEDGER",
"ODS_STORE_GOODS",
"ODS_TABLE_USE",
"ODS_TABLE_FEE_DISCOUNT",
"ODS_MEMBER_BALANCE",
"ODS_TABLES",
"ODS_STORE_GOODS_SALES",
"ODS_INVENTORY_STOCK",
"ODS_REFUND",
"ODS_ASSISTANT_ACCOUNT",
"ODS_PLATFORM_COUPON",
"ODS_INVENTORY_CHANGE",
"ODS_GROUP_BUY_REDEMPTION",
"ODS_PAYMENT",
"ODS_SETTLEMENT_RECORDS",
"ODS_MEMBER_CARD",
"DWD_LOAD_FROM_ODS"
],
"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-02-03T17:26:49.822562",
"next_run": "2026-02-03T18:26:49.822562",
"run_count": 27,
"last_status": "成功",
"execution_history": [
{
"task_id": "7898901d",
"executed_at": "2026-02-03T17:26:49.822562",
"status": "success",
"exit_code": 0,
"duration_seconds": 234.96317,
"summary": "【DWD 装载】维表新增: 0条, 维表更新: 17条, 事实表新增: 28条, 事实表更新: 0条\n 维表: dim_table: +0, ~9, dim_assistant: +0, ~1, dim_member: +0, ~1, dim_store_goods: +0, ~6\n 事实表: dwd_settlement_head: +7, ~0, dwd_table_fee_log: +5, ~0, dwd_member_balance_change: +1, ~0, dwd_groupbuy_redemption: +6, ~0, dwd_platform_coupon_redemption: +2, ~0, dwd_payment: +7, ~0\n【错误】2026-02-03 17:26:51 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-03 17:26:51 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0; 2026-02-03 17:26:52 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-03 15:26:49 --window-end 2026-02-03 17:26:49\n2026-02-03 17:26:50 [INFO] etl_billiards: 配置加载完成\n2026-02-03 17:26:50 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-03 17:26:50 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-03 17:26:50 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=1ba620e80f0d4ee3959adf99e2cc48f9\n2026-02-03 17:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-8228-20260203-172650\n2026-02-03 17:26:50 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-03 17:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:26:51 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-03 17:26:51 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-8229-20260203-172651\n2026-02-03 17:26:51 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-03 17:26:51 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:26:51 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 17:26:51 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-8230-20260203-172651\n2026-02-03 17:26:51 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-03 17:26:51 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:26:52 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-03 17:26:52 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-8231-20260203-172652\n2026-02-03 17:26:52 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:26:52 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00] 未发现需要抓取的小票\n2026-02-03 17:26:52 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-03 17:26:53 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-8232-20260203-172653\n2026-02-03 17:26:53 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-03 17:26:53 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:26:53 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-03 17:26:53 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-8233-20260203-172653\n2026-02-03 17:26:53 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-03 17:26:53 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:26:53 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 17:26:54 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-8234-20260203-172654\n2026-02-03 17:26:54 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-03 17:26:54 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:26:55 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 1, 'updated': 0, 'skipped': 555, 'errors': 0}\n2026-02-03 17:26:56 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-8235-20260203-172656\n2026-02-03 17:26:56 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-03 17:26:56 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:26:56 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 1, 'inserted': 0, 'updated': 0, 'skipped': 1, 'errors': 0}\n2026-02-03 17:26:56 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-8236-20260203-172656\n2026-02-03 17:26:56 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-03 17:26:56 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:26:57 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 6, 'updated': 0, 'skipped': 166, 'errors': 0}\n2026-02-03 17:26:57 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-8237-20260203-172657\n2026-02-03 17:26:57 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-03 17:26:57 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:27:23 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10026, 'inserted': 5, 'updated': 0, 'skipped': 10021, 'errors': 0}\n2026-02-03 17:27:23 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-8238-20260203-172723\n2026-02-03 17:27:23 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-03 17:27:23 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:27:31 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1779, 'inserted': 0, 'updated': 0, 'skipped': 1779, 'errors': 0}\n2026-02-03 17:27:31 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-8239-20260203-172731\n2026-02-03 17:27:31 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-03 17:27:31 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:28:00 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2449, 'inserted': 1, 'updated': 0, 'skipped': 2448, 'errors': 0}\n2026-02-03 17:28:00 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-8240-20260203-172800\n2026-02-03 17:28:00 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-03 17:28:00 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:28:01 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 9, 'updated': 0, 'skipped': 65, 'errors': 0}\n2026-02-03 17:28:01 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-8241-20260203-172801\n2026-02-03 17:28:01 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-03 17:28:01 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:28:01 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 17:28:02 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-8242-20260203-172802\n2026-02-03 17:28:02 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-03 17:28:02 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:28:04 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 6, 'updated': 0, 'skipped': 166, 'errors': 0}\n2026-02-03 17:28:05 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-8243-20260203-172805\n2026-02-03 17:28:05 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-03 17:28:05 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:28:06 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 39, 'inserted': 0, 'updated': 0, 'skipped': 39, 'errors': 0}\n2026-02-03 17:28:06 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-8244-20260203-172806\n2026-02-03 17:28:06 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-03 17:28:06 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:28:07 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 1, 'updated': 0, 'skipped': 68, 'errors': 0}\n2026-02-03 17:28:08 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-8245-20260203-172808\n2026-02-03 17:28:08 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-03 17:28:08 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:28:59 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17575, 'inserted': 2, 'updated': 0, 'skipped': 17573, 'errors': 0}\n2026-02-03 17:28:59 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-8246-20260203-172859\n2026-02-03 17:28:59 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-03 17:28:59 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:29:01 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 18, 'inserted': 7, 'updated': 0, 'skipped': 11, 'errors': 0}\n2026-02-03 17:29:01 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-8247-20260203-172901\n2026-02-03 17:29:01 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-03 17:29:01 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:29:45 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8125, 'inserted': 6, 'updated': 0, 'skipped': 8119, 'errors': 0}\n2026-02-03 17:29:46 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-8248-20260203-172946\n2026-02-03 17:29:46 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-03 17:29:46 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:30:25 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11793, 'inserted': 7, 'updated': 0, 'skipped': 11786, 'errors': 0}\n2026-02-03 17:30:27 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-8249-20260203-173027\n2026-02-03 17:30:27 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-03 17:30:27 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:30:28 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 13, 'inserted': 7, 'updated': 0, 'skipped': 6, 'errors': 0}\n2026-02-03 17:30:29 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-8250-20260203-173029\n2026-02-03 17:30:29 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-03 17:30:29 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:30:32 [INFO] etl_billiards: ODS_MEMBER_CARD ODS 任务完成: {'fetched': 945, 'inserted': 0, 'updated': 0, 'skipped': 945, 'errors': 0}\n2026-02-03 17:30:32 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8251-20260203-173032\n2026-02-03 17:30:32 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-03 17:30:32 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8251-20260203-173032\n2026-02-03 17:30:32 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-03 13:26:49+08:00 ~ 2026-02-03 19:26:49+08:00]\n2026-02-03 17:30:32 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-03 17:30:32 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.40s\n2026-02-03 17:30:32 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-03 17:30:33 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.52s\n2026-02-03 17:30:33 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-03 17:30:33 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.22s\n2026-02-03 17:30:33 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-03 17:30:33 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.21s\n2026-02-03 17:30:33 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-03 17:30:33 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.23s\n2026-02-03 17:30:33 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-03 17:30:34 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.31s\n2026-02-03 17:30:34 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-03 17:30:34 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.64s\n2026-02-03 17:30:34 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-03 17:30:35 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.55s\n2026-02-03 17:30:35 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-03 17:30:35 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.41s\n2026-02-03 17:30:35 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-03 17:30:36 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.63s\n2026-02-03 17:30:36 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-03 17:30:36 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.18s\n2026-02-03 17:30:36 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-03 17:30:36 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.18s\n2026-02-03 17:30:36 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-03 17:30:37 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.24s\n2026-02-03 17:30:37 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-03 17:30:37 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.23s\n2026-02-03 17:30:37 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-03 17:30:37 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.16s\n2026-02-03 17:30:37 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-03 17:30:37 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.16s\n2026-02-03 17:30:37 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-03 17:30:37 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.16s\n2026-02-03 17:30:37 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-03 17:30:38 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.27s\n2026-02-03 17:30:38 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-03 17:30:38 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.26s\n2026-02-03 17:30:38 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-03 17:30:38 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.21s\n2026-02-03 17:30:38 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-03 17:30:38 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.22s\n2026-02-03 17:30:38 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-03 17:30:38 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.19s\n2026-02-03 17:30:38 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-03 17:30:39 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.18s\n2026-02-03 17:30:39 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-03 17:30:39 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.21s\n2026-02-03 17:30:39 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-03 17:30:39 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.20s\n2026-02-03 17:30:39 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-03 17:30:39 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.29s\n2026-02-03 17:30:39 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-03 17:30:40 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.27s\n2026-02-03 17:30:40 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-03 17:30:40 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.33s\n2026-02-03 17:30:40 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-03 17:30:41 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.88s\n2026-02-03 17:30:41 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-03 17:30:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.72s\n2026-02-03 17:30:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-03 17:30:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.41s\n2026-02-03 17:30:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-03 17:30:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.39s\n2026-02-03 17:30:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-03 17:30:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.37s\n2026-02-03 17:30:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 17:30:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.21s\n2026-02-03 17:30:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 17:30:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.22s\n2026-02-03 17:30:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-03 17:30:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.18s\n2026-02-03 17:30:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-03 17:30:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.18s\n2026-02-03 17:30:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-03 17:30:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.23s\n2026-02-03 17:30:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-03 17:30:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.18s\n2026-02-03 17:30:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-03 17:30:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.22s\n2026-02-03 17:30:44 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 9, 'skipped': 65}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 7, 'skipped': 67}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 1, 'skipped': 68}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 1, 'skipped': 68}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 1, 'skipped': 555}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 6, 'skipped': 166}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 6, 'skipped': 166}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 7, 'updated': 0, 'processed': 7}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 7, 'updated': 0, 'processed': 7}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 5, 'updated': 0, 'processed': 5}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 5, 'updated': 0, 'processed': 5}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 1, 'updated': 0, 'processed': 1}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 1, 'updated': 0, 'processed': 1}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 6, 'updated': 0, 'processed': 6}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 6, 'updated': 0, 'processed': 6}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 2, 'updated': 0, 'processed': 2}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 2, 'updated': 0, 'processed': 2}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 7, 'updated': 0, 'processed': 7}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-03 17:30:44 [INFO] etl_billiards: 所有任务执行完成\n2026-02-03 17:30:44 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "ed01246f",
"executed_at": "2026-02-03T16:26:49.644837",
"status": "success",
"exit_code": 0,
"duration_seconds": 210.896258,
"summary": "【DWD 装载】维表新增: 0条, 维表更新: 15条, 事实表新增: 21条, 事实表更新: 0条\n 维表: dim_table: +0, ~9, dim_member: +0, ~1, dim_member_card_account: +0, ~2, dim_store_goods: +0, ~3\n 事实表: dwd_settlement_head: +4, ~0, dwd_table_fee_log: +4, ~0, dwd_assistant_service_log: +1, ~0, dwd_member_balance_change: +1, ~0, dwd_groupbuy_redemption: +3, ~0, dwd_platform_coupon_redemption: +4, ~0, dwd_payment: +4, ~0\n【错误】2026-02-03 16:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-03 16:26:51 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0; 2026-02-03 16:26:52 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-03 14:26:49 --window-end 2026-02-03 16:26:49\n2026-02-03 16:26:50 [INFO] etl_billiards: 配置加载完成\n2026-02-03 16:26:50 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-03 16:26:50 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-03 16:26:50 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=d51504180a204e24aa52eaf221022b78\n2026-02-03 16:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-8204-20260203-162650\n2026-02-03 16:26:50 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-03 16:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-03 16:26:51 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-8205-20260203-162651\n2026-02-03 16:26:51 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-03 16:26:51 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:26:51 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 16:26:51 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-8206-20260203-162651\n2026-02-03 16:26:51 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-03 16:26:51 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:26:52 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-03 16:26:52 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-8207-20260203-162652\n2026-02-03 16:26:52 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:26:53 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00] 未发现需要抓取的小票\n2026-02-03 16:26:53 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-03 16:26:53 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-8208-20260203-162653\n2026-02-03 16:26:53 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-03 16:26:53 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:26:53 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-03 16:26:54 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-8209-20260203-162654\n2026-02-03 16:26:54 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-03 16:26:54 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:26:54 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 16:26:54 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-8210-20260203-162654\n2026-02-03 16:26:54 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-03 16:26:54 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:26:56 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 1, 'updated': 0, 'skipped': 555, 'errors': 0}\n2026-02-03 16:26:56 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-8211-20260203-162656\n2026-02-03 16:26:56 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-03 16:26:56 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:26:56 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 1, 'inserted': 1, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 16:26:57 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-8212-20260203-162657\n2026-02-03 16:26:57 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-03 16:26:57 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:26:57 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 3, 'updated': 0, 'skipped': 169, 'errors': 0}\n2026-02-03 16:26:58 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-8213-20260203-162658\n2026-02-03 16:26:58 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-03 16:26:58 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:27:23 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10021, 'inserted': 4, 'updated': 0, 'skipped': 10017, 'errors': 0}\n2026-02-03 16:27:23 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-8214-20260203-162723\n2026-02-03 16:27:23 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-03 16:27:23 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:27:31 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1779, 'inserted': 0, 'updated': 0, 'skipped': 1779, 'errors': 0}\n2026-02-03 16:27:31 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-8215-20260203-162731\n2026-02-03 16:27:31 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-03 16:27:31 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:27:59 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2448, 'inserted': 1, 'updated': 0, 'skipped': 2447, 'errors': 0}\n2026-02-03 16:28:00 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-8216-20260203-162800\n2026-02-03 16:28:00 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-03 16:28:00 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:28:00 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 9, 'updated': 0, 'skipped': 65, 'errors': 0}\n2026-02-03 16:28:01 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-8217-20260203-162801\n2026-02-03 16:28:01 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-03 16:28:01 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:28:01 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 16:28:02 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-8218-20260203-162802\n2026-02-03 16:28:02 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-03 16:28:02 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:28:04 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 3, 'updated': 0, 'skipped': 169, 'errors': 0}\n2026-02-03 16:28:04 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-8219-20260203-162804\n2026-02-03 16:28:04 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-03 16:28:04 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:28:05 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 39, 'inserted': 0, 'updated': 0, 'skipped': 39, 'errors': 0}\n2026-02-03 16:28:05 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-8220-20260203-162805\n2026-02-03 16:28:05 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-03 16:28:05 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:28:06 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-03 16:28:06 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-8221-20260203-162806\n2026-02-03 16:28:06 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-03 16:28:06 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:28:52 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17573, 'inserted': 4, 'updated': 0, 'skipped': 17569, 'errors': 0}\n2026-02-03 16:28:52 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-8222-20260203-162852\n2026-02-03 16:28:52 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-03 16:28:52 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:28:52 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 12, 'inserted': 7, 'updated': 0, 'skipped': 5, 'errors': 0}\n2026-02-03 16:28:53 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-8223-20260203-162853\n2026-02-03 16:28:53 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-03 16:28:53 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:29:34 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8119, 'inserted': 3, 'updated': 0, 'skipped': 8116, 'errors': 0}\n2026-02-03 16:29:34 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-8224-20260203-162934\n2026-02-03 16:29:34 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-03 16:29:34 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:30:04 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11786, 'inserted': 4, 'updated': 0, 'skipped': 11782, 'errors': 0}\n2026-02-03 16:30:04 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-8225-20260203-163004\n2026-02-03 16:30:04 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-03 16:30:04 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:30:05 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 9, 'inserted': 4, 'updated': 0, 'skipped': 5, 'errors': 0}\n2026-02-03 16:30:05 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-8226-20260203-163005\n2026-02-03 16:30:05 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-03 16:30:05 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:30:08 [INFO] etl_billiards: ODS_MEMBER_CARD ODS 任务完成: {'fetched': 945, 'inserted': 2, 'updated': 0, 'skipped': 943, 'errors': 0}\n2026-02-03 16:30:09 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8227-20260203-163009\n2026-02-03 16:30:09 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-03 16:30:09 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8227-20260203-163009\n2026-02-03 16:30:09 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-03 12:26:49+08:00 ~ 2026-02-03 18:26:49+08:00]\n2026-02-03 16:30:09 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-03 16:30:09 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.38s\n2026-02-03 16:30:09 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-03 16:30:10 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.48s\n2026-02-03 16:30:10 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-03 16:30:10 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.24s\n2026-02-03 16:30:10 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-03 16:30:10 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.22s\n2026-02-03 16:30:10 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-03 16:30:10 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.21s\n2026-02-03 16:30:10 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-03 16:30:11 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.23s\n2026-02-03 16:30:11 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-03 16:30:11 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.43s\n2026-02-03 16:30:11 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-03 16:30:11 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.22s\n2026-02-03 16:30:11 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-03 16:30:12 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.38s\n2026-02-03 16:30:12 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-03 16:30:12 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.64s\n2026-02-03 16:30:12 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-03 16:30:12 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.18s\n2026-02-03 16:30:12 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-03 16:30:13 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.19s\n2026-02-03 16:30:13 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-03 16:30:13 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.25s\n2026-02-03 16:30:13 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-03 16:30:13 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.24s\n2026-02-03 16:30:13 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-03 16:30:13 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.17s\n2026-02-03 16:30:13 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-03 16:30:13 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.17s\n2026-02-03 16:30:13 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-03 16:30:14 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.17s\n2026-02-03 16:30:14 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-03 16:30:14 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.26s\n2026-02-03 16:30:14 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-03 16:30:14 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.27s\n2026-02-03 16:30:14 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-03 16:30:15 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.42s\n2026-02-03 16:30:15 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-03 16:30:15 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.39s\n2026-02-03 16:30:15 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-03 16:30:15 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.40s\n2026-02-03 16:30:15 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-03 16:30:15 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.20s\n2026-02-03 16:30:15 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-03 16:30:16 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.24s\n2026-02-03 16:30:16 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-03 16:30:16 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.24s\n2026-02-03 16:30:16 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-03 16:30:16 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.40s\n2026-02-03 16:30:16 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-03 16:30:17 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.68s\n2026-02-03 16:30:17 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-03 16:30:17 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.31s\n2026-02-03 16:30:17 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-03 16:30:18 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.18s\n2026-02-03 16:30:18 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-03 16:30:18 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.20s\n2026-02-03 16:30:18 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-03 16:30:18 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.23s\n2026-02-03 16:30:18 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-03 16:30:18 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.25s\n2026-02-03 16:30:18 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-03 16:30:18 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.26s\n2026-02-03 16:30:18 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 16:30:19 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.19s\n2026-02-03 16:30:19 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 16:30:19 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.22s\n2026-02-03 16:30:19 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-03 16:30:19 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.19s\n2026-02-03 16:30:19 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-03 16:30:19 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.19s\n2026-02-03 16:30:19 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-03 16:30:20 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.24s\n2026-02-03 16:30:20 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-03 16:30:20 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.18s\n2026-02-03 16:30:20 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-03 16:30:20 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.19s\n2026-02-03 16:30:20 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 9, 'skipped': 65}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 8, 'skipped': 66}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 1, 'skipped': 555}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 2, 'skipped': 943}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 3, 'skipped': 169}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 3, 'skipped': 169}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 1, 'updated': 0, 'processed': 1}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 1, 'updated': 0, 'processed': 1}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 1, 'updated': 0, 'processed': 1}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 1, 'updated': 0, 'processed': 1}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 3, 'updated': 0, 'processed': 3}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 3, 'updated': 0, 'processed': 3}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-03 16:30:20 [INFO] etl_billiards: 所有任务执行完成\n2026-02-03 16:30:20 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "0651aefe",
"executed_at": "2026-02-03T15:26:49.556007",
"status": "success",
"exit_code": 0,
"duration_seconds": 200.458922,
"summary": "【DWD 装载】维表新增: 0条, 维表更新: 11条, 事实表新增: 12条, 事实表更新: 0条\n 维表: dim_table: +0, ~8, dim_store_goods: +0, ~3\n 事实表: dwd_settlement_head: +2, ~0, dwd_table_fee_log: +1, ~0, dwd_groupbuy_redemption: +2, ~0, dwd_platform_coupon_redemption: +5, ~0, dwd_payment: +2, ~0\n【错误】2026-02-03 15:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-03 15:26:51 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0; 2026-02-03 15:26:52 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-03 13:26:49 --window-end 2026-02-03 15:26:49\n2026-02-03 15:26:49 [INFO] etl_billiards: 配置加载完成\n2026-02-03 15:26:49 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-03 15:26:49 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-03 15:26:50 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=590c8c7b6161420bb40031f1b888feff\n2026-02-03 15:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-8180-20260203-152650\n2026-02-03 15:26:50 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-03 15:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-03 15:26:51 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-8181-20260203-152651\n2026-02-03 15:26:51 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-03 15:26:51 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:26:51 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 15:26:51 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-8182-20260203-152651\n2026-02-03 15:26:51 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-03 15:26:51 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:26:52 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-03 15:26:52 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-8183-20260203-152652\n2026-02-03 15:26:52 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:26:52 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00] 未发现需要抓取的小票\n2026-02-03 15:26:52 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-03 15:26:52 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-8184-20260203-152652\n2026-02-03 15:26:52 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-03 15:26:52 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:26:53 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-03 15:26:53 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-8185-20260203-152653\n2026-02-03 15:26:53 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-03 15:26:53 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:26:53 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 15:26:53 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-8186-20260203-152653\n2026-02-03 15:26:53 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-03 15:26:53 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:26:55 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-03 15:26:55 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-8187-20260203-152655\n2026-02-03 15:26:55 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-03 15:26:55 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:26:55 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 15:26:56 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-8188-20260203-152656\n2026-02-03 15:26:56 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-03 15:26:56 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:26:56 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 3, 'updated': 0, 'skipped': 169, 'errors': 0}\n2026-02-03 15:26:56 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-8189-20260203-152656\n2026-02-03 15:26:56 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-03 15:26:56 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:27:21 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10018, 'inserted': 1, 'updated': 0, 'skipped': 10017, 'errors': 0}\n2026-02-03 15:27:21 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-8190-20260203-152721\n2026-02-03 15:27:21 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-03 15:27:21 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:27:29 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1779, 'inserted': 0, 'updated': 0, 'skipped': 1779, 'errors': 0}\n2026-02-03 15:27:29 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-8191-20260203-152729\n2026-02-03 15:27:29 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-03 15:27:29 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:27:57 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2447, 'inserted': 0, 'updated': 0, 'skipped': 2447, 'errors': 0}\n2026-02-03 15:27:57 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-8192-20260203-152757\n2026-02-03 15:27:57 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-03 15:27:57 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:27:58 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 8, 'updated': 0, 'skipped': 66, 'errors': 0}\n2026-02-03 15:27:58 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-8193-20260203-152758\n2026-02-03 15:27:58 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-03 15:27:58 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:27:58 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 15:27:58 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-8194-20260203-152758\n2026-02-03 15:27:58 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-03 15:27:58 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:28:01 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 3, 'updated': 0, 'skipped': 169, 'errors': 0}\n2026-02-03 15:28:01 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-8195-20260203-152801\n2026-02-03 15:28:01 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-03 15:28:01 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:28:02 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 39, 'inserted': 0, 'updated': 0, 'skipped': 39, 'errors': 0}\n2026-02-03 15:28:02 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-8196-20260203-152802\n2026-02-03 15:28:02 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-03 15:28:02 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:28:04 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-03 15:28:04 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-8197-20260203-152804\n2026-02-03 15:28:04 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-03 15:28:04 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:28:46 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17569, 'inserted': 5, 'updated': 0, 'skipped': 17564, 'errors': 0}\n2026-02-03 15:28:46 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-8198-20260203-152846\n2026-02-03 15:28:46 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-03 15:28:46 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:28:46 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 5, 'inserted': 4, 'updated': 0, 'skipped': 1, 'errors': 0}\n2026-02-03 15:28:46 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-8199-20260203-152846\n2026-02-03 15:28:46 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-03 15:28:46 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:29:28 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8116, 'inserted': 2, 'updated': 0, 'skipped': 8114, 'errors': 0}\n2026-02-03 15:29:29 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-8200-20260203-152929\n2026-02-03 15:29:29 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-03 15:29:29 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:29:56 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11782, 'inserted': 2, 'updated': 0, 'skipped': 11780, 'errors': 0}\n2026-02-03 15:29:56 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-8201-20260203-152956\n2026-02-03 15:29:56 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-03 15:29:56 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:29:56 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 5, 'inserted': 2, 'updated': 0, 'skipped': 3, 'errors': 0}\n2026-02-03 15:29:57 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-8202-20260203-152957\n2026-02-03 15:29:57 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-03 15:29:57 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:30:00 [INFO] etl_billiards: ODS_MEMBER_CARD ODS 任务完成: {'fetched': 945, 'inserted': 0, 'updated': 0, 'skipped': 945, 'errors': 0}\n2026-02-03 15:30:00 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8203-20260203-153000\n2026-02-03 15:30:00 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-03 15:30:00 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8203-20260203-153000\n2026-02-03 15:30:00 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-03 11:26:49+08:00 ~ 2026-02-03 17:26:49+08:00]\n2026-02-03 15:30:00 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-03 15:30:01 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.42s\n2026-02-03 15:30:01 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-03 15:30:01 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.45s\n2026-02-03 15:30:01 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-03 15:30:01 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.20s\n2026-02-03 15:30:01 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-03 15:30:01 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.19s\n2026-02-03 15:30:01 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-03 15:30:02 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.17s\n2026-02-03 15:30:02 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-03 15:30:02 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.19s\n2026-02-03 15:30:02 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-03 15:30:02 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.24s\n2026-02-03 15:30:02 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-03 15:30:02 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.21s\n2026-02-03 15:30:02 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-03 15:30:03 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.33s\n2026-02-03 15:30:03 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-03 15:30:03 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.59s\n2026-02-03 15:30:03 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-03 15:30:03 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.18s\n2026-02-03 15:30:03 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-03 15:30:04 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.21s\n2026-02-03 15:30:04 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-03 15:30:04 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.23s\n2026-02-03 15:30:04 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-03 15:30:04 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.23s\n2026-02-03 15:30:04 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-03 15:30:04 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.18s\n2026-02-03 15:30:04 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-03 15:30:04 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.17s\n2026-02-03 15:30:04 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-03 15:30:05 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.17s\n2026-02-03 15:30:05 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-03 15:30:05 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.27s\n2026-02-03 15:30:05 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-03 15:30:05 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.27s\n2026-02-03 15:30:05 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-03 15:30:05 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.21s\n2026-02-03 15:30:05 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-03 15:30:06 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.23s\n2026-02-03 15:30:06 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-03 15:30:06 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.19s\n2026-02-03 15:30:06 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-03 15:30:06 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.18s\n2026-02-03 15:30:06 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-03 15:30:06 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.19s\n2026-02-03 15:30:06 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-03 15:30:06 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.19s\n2026-02-03 15:30:06 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-03 15:30:07 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.25s\n2026-02-03 15:30:07 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-03 15:30:07 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.19s\n2026-02-03 15:30:07 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-03 15:30:07 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.19s\n2026-02-03 15:30:07 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-03 15:30:07 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.19s\n2026-02-03 15:30:07 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-03 15:30:07 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.18s\n2026-02-03 15:30:07 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-03 15:30:08 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.18s\n2026-02-03 15:30:08 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-03 15:30:08 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.24s\n2026-02-03 15:30:08 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-03 15:30:08 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.27s\n2026-02-03 15:30:08 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 15:30:08 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.19s\n2026-02-03 15:30:08 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 15:30:08 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.20s\n2026-02-03 15:30:08 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-03 15:30:09 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.18s\n2026-02-03 15:30:09 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-03 15:30:09 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.18s\n2026-02-03 15:30:09 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-03 15:30:09 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.23s\n2026-02-03 15:30:09 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-03 15:30:09 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.17s\n2026-02-03 15:30:09 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-03 15:30:09 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.17s\n2026-02-03 15:30:09 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 8, 'skipped': 66}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 8, 'skipped': 66}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 3, 'skipped': 169}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 3, 'skipped': 169}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 2, 'updated': 0, 'processed': 2}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 2, 'updated': 0, 'processed': 2}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 1, 'updated': 0, 'processed': 1}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 1, 'updated': 0, 'processed': 1}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 2, 'updated': 0, 'processed': 2}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 2, 'updated': 0, 'processed': 2}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 5, 'updated': 0, 'processed': 5}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 5, 'updated': 0, 'processed': 5}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 2, 'updated': 0, 'processed': 2}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-03 15:30:09 [INFO] etl_billiards: 所有任务执行完成\n2026-02-03 15:30:09 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "a0245b61",
"executed_at": "2026-02-03T14:26:49.404241",
"status": "success",
"exit_code": 0,
"duration_seconds": 306.454686,
"summary": "【DWD 装载】维表新增: 0条, 维表更新: 3条, 事实表新增: 3条, 事实表更新: 0条\n 维表: dim_table: +0, ~3\n 事实表: dwd_platform_coupon_redemption: +3, ~0\n【错误】2026-02-03 14:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-03 14:26:52 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0; 2026-02-03 14:26:54 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-03 12:26:49 --window-end 2026-02-03 14:26:49\n2026-02-03 14:26:49 [INFO] etl_billiards: 配置加载完成\n2026-02-03 14:26:49 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-03 14:26:49 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-03 14:26:50 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=1480cc6d221746d98eed1ec3b0f88a8b\n2026-02-03 14:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-8156-20260203-142650\n2026-02-03 14:26:50 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-03 14:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-03 14:26:51 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-8157-20260203-142651\n2026-02-03 14:26:51 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-03 14:26:51 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:26:52 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 14:26:53 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-8158-20260203-142652\n2026-02-03 14:26:53 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-03 14:26:53 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:26:54 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-03 14:26:54 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-8159-20260203-142654\n2026-02-03 14:26:54 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:26:55 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00] 未发现需要抓取的小票\n2026-02-03 14:26:55 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-03 14:26:55 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-8160-20260203-142655\n2026-02-03 14:26:55 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-03 14:26:55 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:26:56 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-03 14:26:56 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-8161-20260203-142656\n2026-02-03 14:26:56 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-03 14:26:56 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:26:56 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 14:26:57 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-8162-20260203-142657\n2026-02-03 14:26:57 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-03 14:26:57 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:27:00 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-03 14:27:01 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-8163-20260203-142701\n2026-02-03 14:27:01 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-03 14:27:01 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:27:01 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 14:27:01 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-8164-20260203-142701\n2026-02-03 14:27:01 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-03 14:27:01 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:27:02 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-03 14:27:03 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-8165-20260203-142703\n2026-02-03 14:27:03 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-03 14:27:03 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:27:42 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10016, 'inserted': 0, 'updated': 0, 'skipped': 10016, 'errors': 0}\n2026-02-03 14:27:43 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-8166-20260203-142743\n2026-02-03 14:27:43 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-03 14:27:43 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:27:53 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1779, 'inserted': 0, 'updated': 0, 'skipped': 1779, 'errors': 0}\n2026-02-03 14:27:54 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-8167-20260203-142754\n2026-02-03 14:27:54 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-03 14:27:54 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:28:23 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2447, 'inserted': 0, 'updated': 0, 'skipped': 2447, 'errors': 0}\n2026-02-03 14:28:23 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-8168-20260203-142823\n2026-02-03 14:28:23 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-03 14:28:23 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:28:24 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 4, 'updated': 0, 'skipped': 70, 'errors': 0}\n2026-02-03 14:28:24 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-8169-20260203-142824\n2026-02-03 14:28:24 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-03 14:28:24 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:28:24 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 14:28:25 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-8170-20260203-142825\n2026-02-03 14:28:25 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-03 14:28:25 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:28:28 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-03 14:28:28 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-8171-20260203-142828\n2026-02-03 14:28:28 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-03 14:28:28 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:28:29 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 39, 'inserted': 0, 'updated': 0, 'skipped': 39, 'errors': 0}\n2026-02-03 14:28:29 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-8172-20260203-142829\n2026-02-03 14:28:29 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-03 14:28:29 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:28:31 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-03 14:28:31 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-8173-20260203-142831\n2026-02-03 14:28:31 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-03 14:28:31 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:29:40 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17564, 'inserted': 3, 'updated': 0, 'skipped': 17561, 'errors': 0}\n2026-02-03 14:29:40 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-8174-20260203-142940\n2026-02-03 14:29:40 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-03 14:29:40 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:29:41 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 1, 'inserted': 0, 'updated': 0, 'skipped': 1, 'errors': 0}\n2026-02-03 14:29:41 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-8175-20260203-142941\n2026-02-03 14:29:41 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-03 14:29:41 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:30:35 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8114, 'inserted': 0, 'updated': 0, 'skipped': 8114, 'errors': 0}\n2026-02-03 14:30:35 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-8176-20260203-143035\n2026-02-03 14:30:35 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-03 14:30:35 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:31:18 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11780, 'inserted': 0, 'updated': 0, 'skipped': 11780, 'errors': 0}\n2026-02-03 14:31:19 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-8177-20260203-143119\n2026-02-03 14:31:19 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-03 14:31:19 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:31:20 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 3, 'inserted': 0, 'updated': 0, 'skipped': 3, 'errors': 0}\n2026-02-03 14:31:20 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-8178-20260203-143120\n2026-02-03 14:31:20 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-03 14:31:20 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:31:32 [INFO] etl_billiards: ODS_MEMBER_CARD ODS 任务完成: {'fetched': 945, 'inserted': 0, 'updated': 0, 'skipped': 945, 'errors': 0}\n2026-02-03 14:31:32 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8179-20260203-143132\n2026-02-03 14:31:32 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-03 14:31:32 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8179-20260203-143132\n2026-02-03 14:31:32 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-03 10:26:49+08:00 ~ 2026-02-03 16:26:49+08:00]\n2026-02-03 14:31:32 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-03 14:31:32 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.45s\n2026-02-03 14:31:32 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-03 14:31:33 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.48s\n2026-02-03 14:31:33 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-03 14:31:33 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.24s\n2026-02-03 14:31:33 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-03 14:31:33 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.26s\n2026-02-03 14:31:33 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-03 14:31:34 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.19s\n2026-02-03 14:31:34 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-03 14:31:34 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.20s\n2026-02-03 14:31:34 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-03 14:31:34 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.28s\n2026-02-03 14:31:34 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-03 14:31:34 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.22s\n2026-02-03 14:31:34 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-03 14:31:35 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.43s\n2026-02-03 14:31:35 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-03 14:31:36 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 1.06s\n2026-02-03 14:31:36 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-03 14:31:36 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.51s\n2026-02-03 14:31:36 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-03 14:31:36 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.27s\n2026-02-03 14:31:36 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-03 14:31:37 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 1.00s\n2026-02-03 14:31:37 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-03 14:31:38 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.34s\n2026-02-03 14:31:38 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-03 14:31:39 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.98s\n2026-02-03 14:31:39 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-03 14:31:39 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.23s\n2026-02-03 14:31:39 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-03 14:31:40 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.51s\n2026-02-03 14:31:40 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-03 14:31:40 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.71s\n2026-02-03 14:31:40 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-03 14:31:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 1.36s\n2026-02-03 14:31:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-03 14:31:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.62s\n2026-02-03 14:31:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-03 14:31:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.64s\n2026-02-03 14:31:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-03 14:31:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.60s\n2026-02-03 14:31:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-03 14:31:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.49s\n2026-02-03 14:31:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-03 14:31:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.59s\n2026-02-03 14:31:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-03 14:31:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.80s\n2026-02-03 14:31:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-03 14:31:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.36s\n2026-02-03 14:31:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-03 14:31:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.89s\n2026-02-03 14:31:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-03 14:31:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.28s\n2026-02-03 14:31:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-03 14:31:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.59s\n2026-02-03 14:31:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-03 14:31:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.37s\n2026-02-03 14:31:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-03 14:31:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.66s\n2026-02-03 14:31:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-03 14:31:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 1.42s\n2026-02-03 14:31:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-03 14:31:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.45s\n2026-02-03 14:31:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 14:31:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.98s\n2026-02-03 14:31:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 14:31:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.34s\n2026-02-03 14:31:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-03 14:31:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.31s\n2026-02-03 14:31:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-03 14:31:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.69s\n2026-02-03 14:31:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-03 14:31:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 1.48s\n2026-02-03 14:31:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-03 14:31:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.29s\n2026-02-03 14:31:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-03 14:31:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.39s\n2026-02-03 14:31:55 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 3, 'skipped': 71}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 3, 'skipped': 71}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 3, 'updated': 0, 'processed': 3}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 3, 'updated': 0, 'processed': 3}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-03 14:31:55 [INFO] etl_billiards: 所有任务执行完成\n2026-02-03 14:31:55 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "f44a3e9d",
"executed_at": "2026-02-03T13:26:49.269103",
"status": "success",
"exit_code": 0,
"duration_seconds": 188.737971,
"summary": "【DWD 装载】维表新增: 0条, 维表更新: 4条, 事实表新增: 11条, 事实表更新: 0条\n 维表: dim_table: +0, ~3, dim_store_goods: +0, ~1\n 事实表: dwd_settlement_head: +3, ~0, dwd_table_fee_log: +2, ~0, dwd_groupbuy_redemption: +3, ~0, dwd_payment: +3, ~0\n【错误】2026-02-03 13:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-03 13:26:51 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0; 2026-02-03 13:26:52 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-03 11:26:49 --window-end 2026-02-03 13:26:49\n2026-02-03 13:26:49 [INFO] etl_billiards: 配置加载完成\n2026-02-03 13:26:49 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-03 13:26:49 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-03 13:26:49 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=f5e361059d8546dd987f07cb28fd4190\n2026-02-03 13:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-8132-20260203-132650\n2026-02-03 13:26:50 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-03 13:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-03 13:26:50 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-8133-20260203-132650\n2026-02-03 13:26:50 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-03 13:26:50 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:26:51 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 13:26:51 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-8134-20260203-132651\n2026-02-03 13:26:51 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-03 13:26:51 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:26:52 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-03 13:26:52 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-8135-20260203-132652\n2026-02-03 13:26:52 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:26:52 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00] 未发现需要抓取的小票\n2026-02-03 13:26:52 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-03 13:26:52 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-8136-20260203-132652\n2026-02-03 13:26:52 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-03 13:26:52 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:26:53 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-03 13:26:53 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-8137-20260203-132653\n2026-02-03 13:26:53 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-03 13:26:53 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:26:53 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 13:26:53 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-8138-20260203-132653\n2026-02-03 13:26:53 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-03 13:26:53 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:26:55 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-03 13:26:56 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-8139-20260203-132656\n2026-02-03 13:26:56 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-03 13:26:56 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:26:56 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 13:26:56 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-8140-20260203-132656\n2026-02-03 13:26:56 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-03 13:26:56 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:26:57 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 1, 'updated': 0, 'skipped': 171, 'errors': 0}\n2026-02-03 13:26:57 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-8141-20260203-132657\n2026-02-03 13:26:57 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-03 13:26:57 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:27:19 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10016, 'inserted': 2, 'updated': 0, 'skipped': 10014, 'errors': 0}\n2026-02-03 13:27:19 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-8142-20260203-132719\n2026-02-03 13:27:19 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-03 13:27:19 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:27:26 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1779, 'inserted': 0, 'updated': 0, 'skipped': 1779, 'errors': 0}\n2026-02-03 13:27:26 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-8143-20260203-132726\n2026-02-03 13:27:26 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-03 13:27:26 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:27:53 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2447, 'inserted': 0, 'updated': 0, 'skipped': 2447, 'errors': 0}\n2026-02-03 13:27:53 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-8144-20260203-132753\n2026-02-03 13:27:53 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-03 13:27:53 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:27:54 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 3, 'updated': 0, 'skipped': 71, 'errors': 0}\n2026-02-03 13:27:54 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-8145-20260203-132754\n2026-02-03 13:27:54 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-03 13:27:54 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:27:54 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 13:27:54 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-8146-20260203-132754\n2026-02-03 13:27:54 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-03 13:27:54 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:27:56 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 1, 'updated': 0, 'skipped': 171, 'errors': 0}\n2026-02-03 13:27:57 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-8147-20260203-132757\n2026-02-03 13:27:57 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-03 13:27:57 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:27:57 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 39, 'inserted': 0, 'updated': 0, 'skipped': 39, 'errors': 0}\n2026-02-03 13:27:57 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-8148-20260203-132757\n2026-02-03 13:27:57 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-03 13:27:57 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:27:58 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-03 13:27:59 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-8149-20260203-132759\n2026-02-03 13:27:59 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-03 13:27:59 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:28:40 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17561, 'inserted': 0, 'updated': 0, 'skipped': 17561, 'errors': 0}\n2026-02-03 13:28:40 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-8150-20260203-132840\n2026-02-03 13:28:40 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-03 13:28:40 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:28:40 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 1, 'inserted': 1, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 13:28:41 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-8151-20260203-132841\n2026-02-03 13:28:41 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-03 13:28:41 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:29:20 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8114, 'inserted': 3, 'updated': 0, 'skipped': 8111, 'errors': 0}\n2026-02-03 13:29:20 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-8152-20260203-132920\n2026-02-03 13:29:20 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-03 13:29:20 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:29:44 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11780, 'inserted': 3, 'updated': 0, 'skipped': 11777, 'errors': 0}\n2026-02-03 13:29:45 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-8153-20260203-132945\n2026-02-03 13:29:45 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-03 13:29:45 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:29:45 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 3, 'inserted': 3, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 13:29:45 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-8154-20260203-132945\n2026-02-03 13:29:45 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-03 13:29:45 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:29:48 [INFO] etl_billiards: ODS_MEMBER_CARD ODS 任务完成: {'fetched': 945, 'inserted': 0, 'updated': 0, 'skipped': 945, 'errors': 0}\n2026-02-03 13:29:48 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8155-20260203-132948\n2026-02-03 13:29:48 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-03 13:29:48 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8155-20260203-132948\n2026-02-03 13:29:48 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-03 09:26:49+08:00 ~ 2026-02-03 15:26:49+08:00]\n2026-02-03 13:29:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-03 13:29:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.38s\n2026-02-03 13:29:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-03 13:29:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.48s\n2026-02-03 13:29:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-03 13:29:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.21s\n2026-02-03 13:29:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-03 13:29:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.20s\n2026-02-03 13:29:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-03 13:29:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.16s\n2026-02-03 13:29:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-03 13:29:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.18s\n2026-02-03 13:29:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-03 13:29:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.25s\n2026-02-03 13:29:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-03 13:29:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.21s\n2026-02-03 13:29:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-03 13:29:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.41s\n2026-02-03 13:29:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-03 13:29:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.62s\n2026-02-03 13:29:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-03 13:29:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.18s\n2026-02-03 13:29:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-03 13:29:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.20s\n2026-02-03 13:29:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-03 13:29:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.24s\n2026-02-03 13:29:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-03 13:29:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.24s\n2026-02-03 13:29:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-03 13:29:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.17s\n2026-02-03 13:29:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-03 13:29:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.17s\n2026-02-03 13:29:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-03 13:29:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.17s\n2026-02-03 13:29:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-03 13:29:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.27s\n2026-02-03 13:29:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-03 13:29:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.25s\n2026-02-03 13:29:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-03 13:29:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.21s\n2026-02-03 13:29:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-03 13:29:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.21s\n2026-02-03 13:29:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-03 13:29:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.18s\n2026-02-03 13:29:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-03 13:29:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.19s\n2026-02-03 13:29:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-03 13:29:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.21s\n2026-02-03 13:29:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-03 13:29:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.20s\n2026-02-03 13:29:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-03 13:29:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.24s\n2026-02-03 13:29:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-03 13:29:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.21s\n2026-02-03 13:29:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-03 13:29:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.19s\n2026-02-03 13:29:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-03 13:29:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.21s\n2026-02-03 13:29:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-03 13:29:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.18s\n2026-02-03 13:29:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-03 13:29:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.18s\n2026-02-03 13:29:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-03 13:29:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.24s\n2026-02-03 13:29:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-03 13:29:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.23s\n2026-02-03 13:29:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 13:29:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.20s\n2026-02-03 13:29:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 13:29:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.19s\n2026-02-03 13:29:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-03 13:29:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.18s\n2026-02-03 13:29:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-03 13:29:57 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.19s\n2026-02-03 13:29:57 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-03 13:29:57 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.24s\n2026-02-03 13:29:57 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-03 13:29:57 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.25s\n2026-02-03 13:29:57 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-03 13:29:57 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.22s\n2026-02-03 13:29:57 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 3, 'skipped': 71}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 3, 'skipped': 71}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 1, 'skipped': 171}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 1, 'skipped': 171}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 3, 'updated': 0, 'processed': 3}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 3, 'updated': 0, 'processed': 3}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 2, 'updated': 0, 'processed': 2}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 2, 'updated': 0, 'processed': 2}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 3, 'updated': 0, 'processed': 3}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 3, 'updated': 0, 'processed': 3}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 3, 'updated': 0, 'processed': 3}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-03 13:29:57 [INFO] etl_billiards: 所有任务执行完成\n2026-02-03 13:29:57 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "fce387f3",
"executed_at": "2026-02-03T12:26:49.192367",
"status": "success",
"exit_code": 0,
"duration_seconds": 180.537483,
"summary": "【错误】2026-02-03 12:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-03 12:26:50 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0; 2026-02-03 12:26:51 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-03 10:26:49 --window-end 2026-02-03 12:26:49\n2026-02-03 12:26:49 [INFO] etl_billiards: 配置加载完成\n2026-02-03 12:26:49 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-03 12:26:49 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-03 12:26:49 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=b2b5c7f9c11d49a4a46ca59f9129fdcf\n2026-02-03 12:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-8108-20260203-122650\n2026-02-03 12:26:50 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-03 12:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-03 12:26:50 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-8109-20260203-122650\n2026-02-03 12:26:50 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-03 12:26:50 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:26:50 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 12:26:51 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-8110-20260203-122651\n2026-02-03 12:26:51 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-03 12:26:51 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:26:51 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-03 12:26:51 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-8111-20260203-122651\n2026-02-03 12:26:51 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:26:52 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00] 未发现需要抓取的小票\n2026-02-03 12:26:52 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-03 12:26:52 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-8112-20260203-122652\n2026-02-03 12:26:52 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-03 12:26:52 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:26:52 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-03 12:26:53 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-8113-20260203-122653\n2026-02-03 12:26:53 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-03 12:26:53 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:26:53 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 12:26:53 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-8114-20260203-122653\n2026-02-03 12:26:53 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-03 12:26:53 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:26:55 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-03 12:26:55 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-8115-20260203-122655\n2026-02-03 12:26:55 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-03 12:26:55 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:26:55 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 12:26:55 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-8116-20260203-122655\n2026-02-03 12:26:55 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-03 12:26:55 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:26:56 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-03 12:26:56 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-8117-20260203-122656\n2026-02-03 12:26:56 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-03 12:26:56 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:27:18 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10014, 'inserted': 0, 'updated': 0, 'skipped': 10014, 'errors': 0}\n2026-02-03 12:27:18 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-8118-20260203-122718\n2026-02-03 12:27:18 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-03 12:27:18 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:27:25 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1779, 'inserted': 0, 'updated': 0, 'skipped': 1779, 'errors': 0}\n2026-02-03 12:27:25 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-8119-20260203-122725\n2026-02-03 12:27:25 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-03 12:27:25 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:27:52 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2447, 'inserted': 0, 'updated': 0, 'skipped': 2447, 'errors': 0}\n2026-02-03 12:27:52 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-8120-20260203-122752\n2026-02-03 12:27:52 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-03 12:27:52 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:27:53 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 1, 'updated': 0, 'skipped': 73, 'errors': 0}\n2026-02-03 12:27:53 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-8121-20260203-122753\n2026-02-03 12:27:53 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-03 12:27:53 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:27:53 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 12:27:53 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-8122-20260203-122753\n2026-02-03 12:27:53 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-03 12:27:53 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:27:54 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-03 12:27:54 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-8123-20260203-122754\n2026-02-03 12:27:54 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-03 12:27:54 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:27:54 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 39, 'inserted': 0, 'updated': 0, 'skipped': 39, 'errors': 0}\n2026-02-03 12:27:54 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-8124-20260203-122754\n2026-02-03 12:27:54 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-03 12:27:54 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:27:56 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-03 12:27:56 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-8125-20260203-122756\n2026-02-03 12:27:56 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-03 12:27:56 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:28:35 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17561, 'inserted': 0, 'updated': 0, 'skipped': 17561, 'errors': 0}\n2026-02-03 12:28:36 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-8126-20260203-122836\n2026-02-03 12:28:36 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-03 12:28:36 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:28:36 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 12:28:36 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-8127-20260203-122836\n2026-02-03 12:28:36 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-03 12:28:36 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:29:13 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8111, 'inserted': 0, 'updated': 0, 'skipped': 8111, 'errors': 0}\n2026-02-03 12:29:13 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-8128-20260203-122913\n2026-02-03 12:29:13 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-03 12:29:13 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:29:37 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11777, 'inserted': 0, 'updated': 0, 'skipped': 11777, 'errors': 0}\n2026-02-03 12:29:37 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-8129-20260203-122937\n2026-02-03 12:29:37 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-03 12:29:37 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:29:37 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 12:29:37 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-8130-20260203-122937\n2026-02-03 12:29:37 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-03 12:29:37 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:29:40 [INFO] etl_billiards: ODS_MEMBER_CARD ODS 任务完成: {'fetched': 945, 'inserted': 0, 'updated': 0, 'skipped': 945, 'errors': 0}\n2026-02-03 12:29:40 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8131-20260203-122940\n2026-02-03 12:29:40 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-03 12:29:40 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8131-20260203-122940\n2026-02-03 12:29:40 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-03 08:26:49+08:00 ~ 2026-02-03 14:26:49+08:00]\n2026-02-03 12:29:40 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-03 12:29:40 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.39s\n2026-02-03 12:29:40 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-03 12:29:41 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.48s\n2026-02-03 12:29:41 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-03 12:29:41 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.19s\n2026-02-03 12:29:41 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-03 12:29:41 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.20s\n2026-02-03 12:29:41 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-03 12:29:41 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.16s\n2026-02-03 12:29:41 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-03 12:29:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.17s\n2026-02-03 12:29:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-03 12:29:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.22s\n2026-02-03 12:29:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-03 12:29:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.20s\n2026-02-03 12:29:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-03 12:29:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.33s\n2026-02-03 12:29:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-03 12:29:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.64s\n2026-02-03 12:29:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-03 12:29:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.17s\n2026-02-03 12:29:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-03 12:29:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.18s\n2026-02-03 12:29:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-03 12:29:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.18s\n2026-02-03 12:29:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-03 12:29:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.19s\n2026-02-03 12:29:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-03 12:29:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.20s\n2026-02-03 12:29:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-03 12:29:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.16s\n2026-02-03 12:29:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-03 12:29:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.16s\n2026-02-03 12:29:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-03 12:29:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.28s\n2026-02-03 12:29:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-03 12:29:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.24s\n2026-02-03 12:29:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-03 12:29:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.21s\n2026-02-03 12:29:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-03 12:29:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.19s\n2026-02-03 12:29:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-03 12:29:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.18s\n2026-02-03 12:29:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-03 12:29:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.17s\n2026-02-03 12:29:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-03 12:29:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.18s\n2026-02-03 12:29:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-03 12:29:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.18s\n2026-02-03 12:29:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-03 12:29:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.24s\n2026-02-03 12:29:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-03 12:29:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.18s\n2026-02-03 12:29:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-03 12:29:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.17s\n2026-02-03 12:29:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-03 12:29:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.17s\n2026-02-03 12:29:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-03 12:29:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.19s\n2026-02-03 12:29:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-03 12:29:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.18s\n2026-02-03 12:29:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-03 12:29:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.24s\n2026-02-03 12:29:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-03 12:29:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.25s\n2026-02-03 12:29:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 12:29:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.24s\n2026-02-03 12:29:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 12:29:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.49s\n2026-02-03 12:29:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-03 12:29:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.19s\n2026-02-03 12:29:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-03 12:29:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.20s\n2026-02-03 12:29:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-03 12:29:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.21s\n2026-02-03 12:29:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-03 12:29:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.17s\n2026-02-03 12:29:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-03 12:29:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.19s\n2026-02-03 12:29:49 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 1, 'skipped': 73}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-03 12:29:49 [INFO] etl_billiards: 所有任务执行完成\n2026-02-03 12:29:49 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "b97e838a",
"executed_at": "2026-02-03T11:26:49.120246",
"status": "success",
"exit_code": 0,
"duration_seconds": 185.84853,
"summary": "【DWD 装载】维表新增: 0条, 维表更新: 1条, 事实表新增: 2条, 事实表更新: 0条\n 维表: dim_table: +0, ~1\n 事实表: dwd_platform_coupon_redemption: +2, ~0\n【错误】2026-02-03 11:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-03 11:26:50 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0; 2026-02-03 11:26:51 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-03 09:26:49 --window-end 2026-02-03 11:26:49\n2026-02-03 11:26:49 [INFO] etl_billiards: 配置加载完成\n2026-02-03 11:26:49 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-03 11:26:49 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-03 11:26:49 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=ac0413975e2843eebf968075ec9903f4\n2026-02-03 11:26:49 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-8084-20260203-112649\n2026-02-03 11:26:49 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-03 11:26:49 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-03 11:26:50 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-8085-20260203-112650\n2026-02-03 11:26:50 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-03 11:26:50 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:26:50 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 11:26:50 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-8086-20260203-112650\n2026-02-03 11:26:50 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-03 11:26:50 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:26:51 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-03 11:26:51 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-8087-20260203-112651\n2026-02-03 11:26:51 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:26:51 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00] 未发现需要抓取的小票\n2026-02-03 11:26:51 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-03 11:26:52 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-8088-20260203-112652\n2026-02-03 11:26:52 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-03 11:26:52 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:26:52 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-03 11:26:52 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-8089-20260203-112652\n2026-02-03 11:26:52 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-03 11:26:52 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:26:52 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 11:26:53 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-8090-20260203-112653\n2026-02-03 11:26:53 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-03 11:26:53 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:26:54 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-03 11:26:55 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-8091-20260203-112655\n2026-02-03 11:26:55 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-03 11:26:55 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:26:55 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 11:26:55 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-8092-20260203-112655\n2026-02-03 11:26:55 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-03 11:26:55 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:26:55 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-03 11:26:56 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-8093-20260203-112656\n2026-02-03 11:26:56 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-03 11:26:56 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:27:17 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10014, 'inserted': 0, 'updated': 0, 'skipped': 10014, 'errors': 0}\n2026-02-03 11:27:17 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-8094-20260203-112717\n2026-02-03 11:27:17 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-03 11:27:17 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:27:25 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1779, 'inserted': 0, 'updated': 0, 'skipped': 1779, 'errors': 0}\n2026-02-03 11:27:25 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-8095-20260203-112725\n2026-02-03 11:27:25 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-03 11:27:25 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:27:53 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2447, 'inserted': 0, 'updated': 0, 'skipped': 2447, 'errors': 0}\n2026-02-03 11:27:53 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-8096-20260203-112753\n2026-02-03 11:27:53 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-03 11:27:53 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:27:53 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 1, 'updated': 0, 'skipped': 73, 'errors': 0}\n2026-02-03 11:27:54 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-8097-20260203-112754\n2026-02-03 11:27:54 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-03 11:27:54 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:27:54 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 11:27:54 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-8098-20260203-112754\n2026-02-03 11:27:54 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-03 11:27:54 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:27:55 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-03 11:27:55 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-8099-20260203-112755\n2026-02-03 11:27:55 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-03 11:27:55 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:27:55 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 39, 'inserted': 0, 'updated': 0, 'skipped': 39, 'errors': 0}\n2026-02-03 11:27:55 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-8100-20260203-112755\n2026-02-03 11:27:55 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-03 11:27:55 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:27:57 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-03 11:27:57 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-8101-20260203-112757\n2026-02-03 11:27:57 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-03 11:27:57 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:28:38 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17561, 'inserted': 2, 'updated': 0, 'skipped': 17559, 'errors': 0}\n2026-02-03 11:28:38 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-8102-20260203-112838\n2026-02-03 11:28:38 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-03 11:28:38 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:28:38 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 11:28:38 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-8103-20260203-112838\n2026-02-03 11:28:38 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-03 11:28:38 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:29:17 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8111, 'inserted': 0, 'updated': 0, 'skipped': 8111, 'errors': 0}\n2026-02-03 11:29:17 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-8104-20260203-112917\n2026-02-03 11:29:17 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-03 11:29:17 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:29:41 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11777, 'inserted': 0, 'updated': 0, 'skipped': 11777, 'errors': 0}\n2026-02-03 11:29:41 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-8105-20260203-112941\n2026-02-03 11:29:41 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-03 11:29:41 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:29:41 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 11:29:42 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-8106-20260203-112942\n2026-02-03 11:29:42 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-03 11:29:42 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:29:44 [INFO] etl_billiards: ODS_MEMBER_CARD ODS 任务完成: {'fetched': 945, 'inserted': 0, 'updated': 0, 'skipped': 945, 'errors': 0}\n2026-02-03 11:29:45 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8107-20260203-112945\n2026-02-03 11:29:45 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-03 11:29:45 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8107-20260203-112945\n2026-02-03 11:29:45 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-03 07:26:49+08:00 ~ 2026-02-03 13:26:49+08:00]\n2026-02-03 11:29:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-03 11:29:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.51s\n2026-02-03 11:29:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-03 11:29:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.46s\n2026-02-03 11:29:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-03 11:29:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.21s\n2026-02-03 11:29:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-03 11:29:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.20s\n2026-02-03 11:29:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-03 11:29:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.19s\n2026-02-03 11:29:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-03 11:29:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.17s\n2026-02-03 11:29:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-03 11:29:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.23s\n2026-02-03 11:29:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-03 11:29:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.20s\n2026-02-03 11:29:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-03 11:29:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.38s\n2026-02-03 11:29:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-03 11:29:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.61s\n2026-02-03 11:29:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-03 11:29:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.18s\n2026-02-03 11:29:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-03 11:29:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.18s\n2026-02-03 11:29:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-03 11:29:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.19s\n2026-02-03 11:29:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-03 11:29:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.24s\n2026-02-03 11:29:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-03 11:29:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.17s\n2026-02-03 11:29:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-03 11:29:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.16s\n2026-02-03 11:29:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-03 11:29:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.16s\n2026-02-03 11:29:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-03 11:29:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.26s\n2026-02-03 11:29:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-03 11:29:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.25s\n2026-02-03 11:29:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-03 11:29:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.21s\n2026-02-03 11:29:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-03 11:29:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.21s\n2026-02-03 11:29:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-03 11:29:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.18s\n2026-02-03 11:29:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-03 11:29:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.18s\n2026-02-03 11:29:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-03 11:29:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.20s\n2026-02-03 11:29:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-03 11:29:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.20s\n2026-02-03 11:29:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-03 11:29:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.24s\n2026-02-03 11:29:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-03 11:29:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.19s\n2026-02-03 11:29:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-03 11:29:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.18s\n2026-02-03 11:29:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-03 11:29:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.18s\n2026-02-03 11:29:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-03 11:29:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.19s\n2026-02-03 11:29:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-03 11:29:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.17s\n2026-02-03 11:29:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-03 11:29:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.26s\n2026-02-03 11:29:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-03 11:29:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.24s\n2026-02-03 11:29:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 11:29:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.19s\n2026-02-03 11:29:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 11:29:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.19s\n2026-02-03 11:29:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-03 11:29:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.24s\n2026-02-03 11:29:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-03 11:29:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.25s\n2026-02-03 11:29:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-03 11:29:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.23s\n2026-02-03 11:29:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-03 11:29:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.19s\n2026-02-03 11:29:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-03 11:29:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.25s\n2026-02-03 11:29:54 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 1, 'skipped': 73}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 1, 'skipped': 73}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 2, 'updated': 0, 'processed': 2}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 2, 'updated': 0, 'processed': 2}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-03 11:29:54 [INFO] etl_billiards: 所有任务执行完成\n2026-02-03 11:29:54 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "feed33b6",
"executed_at": "2026-02-03T10:26:49.023312",
"status": "success",
"exit_code": 0,
"duration_seconds": 182.126621,
"summary": "【DWD 装载】维表新增: 0条, 维表更新: 1条, 事实表新增: 1条, 事实表更新: 0条\n 维表: dim_table: +0, ~1\n 事实表: dwd_platform_coupon_redemption: +1, ~0\n【错误】2026-02-03 10:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-03 10:26:50 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0; 2026-02-03 10:26:51 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-03 08:26:49 --window-end 2026-02-03 10:26:49\n2026-02-03 10:26:49 [INFO] etl_billiards: 配置加载完成\n2026-02-03 10:26:49 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-03 10:26:49 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-03 10:26:49 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=8f61e130cb8d440e9e7dfb48e761a717\n2026-02-03 10:26:49 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-8060-20260203-102649\n2026-02-03 10:26:49 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-03 10:26:49 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-03 10:26:50 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-8061-20260203-102650\n2026-02-03 10:26:50 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-03 10:26:50 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:26:50 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 10:26:50 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-8062-20260203-102650\n2026-02-03 10:26:50 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-03 10:26:50 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:26:51 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-03 10:26:51 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-8063-20260203-102651\n2026-02-03 10:26:51 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:26:52 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00] 未发现需要抓取的小票\n2026-02-03 10:26:52 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-03 10:26:52 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-8064-20260203-102652\n2026-02-03 10:26:52 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-03 10:26:52 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:26:52 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-03 10:26:53 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-8065-20260203-102653\n2026-02-03 10:26:53 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-03 10:26:53 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:26:53 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 10:26:53 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-8066-20260203-102653\n2026-02-03 10:26:53 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-03 10:26:53 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:26:55 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-03 10:26:55 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-8067-20260203-102655\n2026-02-03 10:26:55 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-03 10:26:55 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:26:55 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 3, 'inserted': 0, 'updated': 0, 'skipped': 3, 'errors': 0}\n2026-02-03 10:26:55 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-8068-20260203-102655\n2026-02-03 10:26:55 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-03 10:26:55 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:26:56 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-03 10:26:56 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-8069-20260203-102656\n2026-02-03 10:26:56 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-03 10:26:56 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:27:17 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10014, 'inserted': 0, 'updated': 0, 'skipped': 10014, 'errors': 0}\n2026-02-03 10:27:17 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-8070-20260203-102717\n2026-02-03 10:27:17 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-03 10:27:17 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:27:25 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1779, 'inserted': 0, 'updated': 0, 'skipped': 1779, 'errors': 0}\n2026-02-03 10:27:25 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-8071-20260203-102725\n2026-02-03 10:27:25 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-03 10:27:25 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:27:51 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2447, 'inserted': 0, 'updated': 0, 'skipped': 2447, 'errors': 0}\n2026-02-03 10:27:52 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-8072-20260203-102752\n2026-02-03 10:27:52 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-03 10:27:52 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:27:52 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 1, 'updated': 0, 'skipped': 73, 'errors': 0}\n2026-02-03 10:27:52 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-8073-20260203-102752\n2026-02-03 10:27:52 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-03 10:27:52 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:27:52 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 10:27:53 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-8074-20260203-102753\n2026-02-03 10:27:53 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-03 10:27:53 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:27:53 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-03 10:27:53 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-8075-20260203-102753\n2026-02-03 10:27:53 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-03 10:27:53 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:27:54 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 39, 'inserted': 0, 'updated': 0, 'skipped': 39, 'errors': 0}\n2026-02-03 10:27:54 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-8076-20260203-102754\n2026-02-03 10:27:54 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-03 10:27:54 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:27:55 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-03 10:27:55 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-8077-20260203-102755\n2026-02-03 10:27:55 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-03 10:27:55 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:28:36 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17559, 'inserted': 1, 'updated': 0, 'skipped': 17558, 'errors': 0}\n2026-02-03 10:28:36 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-8078-20260203-102836\n2026-02-03 10:28:36 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-03 10:28:36 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:28:37 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 10:28:37 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-8079-20260203-102837\n2026-02-03 10:28:37 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-03 10:28:37 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:29:13 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8111, 'inserted': 0, 'updated': 0, 'skipped': 8111, 'errors': 0}\n2026-02-03 10:29:13 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-8080-20260203-102913\n2026-02-03 10:29:13 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-03 10:29:13 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:29:37 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11777, 'inserted': 0, 'updated': 0, 'skipped': 11777, 'errors': 0}\n2026-02-03 10:29:37 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-8081-20260203-102937\n2026-02-03 10:29:37 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-03 10:29:37 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:29:37 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 1, 'inserted': 0, 'updated': 0, 'skipped': 1, 'errors': 0}\n2026-02-03 10:29:37 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-8082-20260203-102937\n2026-02-03 10:29:37 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-03 10:29:37 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:29:40 [INFO] etl_billiards: ODS_MEMBER_CARD ODS 任务完成: {'fetched': 945, 'inserted': 0, 'updated': 0, 'skipped': 945, 'errors': 0}\n2026-02-03 10:29:40 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8083-20260203-102940\n2026-02-03 10:29:40 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-03 10:29:40 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8083-20260203-102940\n2026-02-03 10:29:40 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-03 06:26:49+08:00 ~ 2026-02-03 12:26:49+08:00]\n2026-02-03 10:29:40 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-03 10:29:41 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.38s\n2026-02-03 10:29:41 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-03 10:29:41 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.52s\n2026-02-03 10:29:41 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-03 10:29:41 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.22s\n2026-02-03 10:29:41 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-03 10:29:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.20s\n2026-02-03 10:29:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-03 10:29:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.18s\n2026-02-03 10:29:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-03 10:29:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.19s\n2026-02-03 10:29:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-03 10:29:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.23s\n2026-02-03 10:29:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-03 10:29:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.22s\n2026-02-03 10:29:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-03 10:29:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.41s\n2026-02-03 10:29:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-03 10:29:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.62s\n2026-02-03 10:29:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-03 10:29:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.19s\n2026-02-03 10:29:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-03 10:29:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.22s\n2026-02-03 10:29:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-03 10:29:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.42s\n2026-02-03 10:29:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-03 10:29:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.70s\n2026-02-03 10:29:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-03 10:29:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.32s\n2026-02-03 10:29:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-03 10:29:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.17s\n2026-02-03 10:29:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-03 10:29:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.17s\n2026-02-03 10:29:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-03 10:29:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.26s\n2026-02-03 10:29:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-03 10:29:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.25s\n2026-02-03 10:29:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-03 10:29:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.22s\n2026-02-03 10:29:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-03 10:29:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.22s\n2026-02-03 10:29:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-03 10:29:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.20s\n2026-02-03 10:29:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-03 10:29:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.18s\n2026-02-03 10:29:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-03 10:29:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.20s\n2026-02-03 10:29:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-03 10:29:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.21s\n2026-02-03 10:29:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-03 10:29:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.25s\n2026-02-03 10:29:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-03 10:29:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.20s\n2026-02-03 10:29:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-03 10:29:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.19s\n2026-02-03 10:29:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-03 10:29:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.18s\n2026-02-03 10:29:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-03 10:29:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.20s\n2026-02-03 10:29:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-03 10:29:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.18s\n2026-02-03 10:29:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-03 10:29:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.23s\n2026-02-03 10:29:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-03 10:29:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.24s\n2026-02-03 10:29:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 10:29:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.20s\n2026-02-03 10:29:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 10:29:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.22s\n2026-02-03 10:29:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-03 10:29:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.23s\n2026-02-03 10:29:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-03 10:29:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.23s\n2026-02-03 10:29:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-03 10:29:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.24s\n2026-02-03 10:29:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-03 10:29:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.18s\n2026-02-03 10:29:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-03 10:29:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.18s\n2026-02-03 10:29:51 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 1, 'skipped': 73}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 1, 'skipped': 73}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 1, 'updated': 0, 'processed': 1}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 1, 'updated': 0, 'processed': 1}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-03 10:29:51 [INFO] etl_billiards: 所有任务执行完成\n2026-02-03 10:29:51 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "59850fcc",
"executed_at": "2026-02-03T09:26:48.960752",
"status": "success",
"exit_code": 0,
"duration_seconds": 179.520466,
"summary": "【错误】2026-02-03 09:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-03 09:26:50 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0; 2026-02-03 09:26:51 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-03 07:26:48 --window-end 2026-02-03 09:26:48\n2026-02-03 09:26:49 [INFO] etl_billiards: 配置加载完成\n2026-02-03 09:26:49 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-03 09:26:49 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-03 09:26:49 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=44852a60f7da486bb6106866008a2506\n2026-02-03 09:26:49 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-8036-20260203-092649\n2026-02-03 09:26:49 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-03 09:26:49 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-03 09:26:50 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-8037-20260203-092650\n2026-02-03 09:26:50 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-03 09:26:50 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:26:50 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 09:26:50 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-8038-20260203-092650\n2026-02-03 09:26:50 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-03 09:26:50 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:26:51 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-03 09:26:51 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-8039-20260203-092651\n2026-02-03 09:26:51 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:26:51 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00] 未发现需要抓取的小票\n2026-02-03 09:26:51 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-03 09:26:52 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-8040-20260203-092652\n2026-02-03 09:26:52 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-03 09:26:52 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:26:52 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-03 09:26:52 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-8041-20260203-092652\n2026-02-03 09:26:52 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-03 09:26:52 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:26:52 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 09:26:53 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-8042-20260203-092653\n2026-02-03 09:26:53 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-03 09:26:53 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:26:54 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-03 09:26:55 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-8043-20260203-092655\n2026-02-03 09:26:55 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-03 09:26:55 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:26:55 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 4, 'inserted': 0, 'updated': 0, 'skipped': 4, 'errors': 0}\n2026-02-03 09:26:55 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-8044-20260203-092655\n2026-02-03 09:26:55 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-03 09:26:55 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:26:55 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-03 09:26:56 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-8045-20260203-092656\n2026-02-03 09:26:56 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-03 09:26:56 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:27:18 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10014, 'inserted': 0, 'updated': 0, 'skipped': 10014, 'errors': 0}\n2026-02-03 09:27:19 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-8046-20260203-092719\n2026-02-03 09:27:19 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-03 09:27:19 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:27:26 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1779, 'inserted': 0, 'updated': 0, 'skipped': 1779, 'errors': 0}\n2026-02-03 09:27:26 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-8047-20260203-092726\n2026-02-03 09:27:26 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-03 09:27:26 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:27:52 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2447, 'inserted': 0, 'updated': 0, 'skipped': 2447, 'errors': 0}\n2026-02-03 09:27:52 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-8048-20260203-092752\n2026-02-03 09:27:52 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-03 09:27:52 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:27:53 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 0, 'updated': 0, 'skipped': 74, 'errors': 0}\n2026-02-03 09:27:53 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-8049-20260203-092753\n2026-02-03 09:27:53 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-03 09:27:53 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:27:53 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 09:27:53 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-8050-20260203-092753\n2026-02-03 09:27:53 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-03 09:27:53 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:27:54 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-03 09:27:54 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-8051-20260203-092754\n2026-02-03 09:27:54 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-03 09:27:54 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:27:54 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 39, 'inserted': 0, 'updated': 0, 'skipped': 39, 'errors': 0}\n2026-02-03 09:27:55 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-8052-20260203-092755\n2026-02-03 09:27:55 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-03 09:27:55 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:27:55 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-03 09:27:56 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-8053-20260203-092756\n2026-02-03 09:27:56 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-03 09:27:56 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:28:36 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17558, 'inserted': 0, 'updated': 0, 'skipped': 17558, 'errors': 0}\n2026-02-03 09:28:37 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-8054-20260203-092837\n2026-02-03 09:28:37 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-03 09:28:37 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:28:37 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 1, 'inserted': 0, 'updated': 0, 'skipped': 1, 'errors': 0}\n2026-02-03 09:28:37 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-8055-20260203-092837\n2026-02-03 09:28:37 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-03 09:28:37 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:29:13 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8111, 'inserted': 0, 'updated': 0, 'skipped': 8111, 'errors': 0}\n2026-02-03 09:29:13 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-8056-20260203-092913\n2026-02-03 09:29:13 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-03 09:29:13 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:29:36 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11777, 'inserted': 0, 'updated': 0, 'skipped': 11777, 'errors': 0}\n2026-02-03 09:29:36 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-8057-20260203-092936\n2026-02-03 09:29:36 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-03 09:29:36 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:29:36 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 2, 'inserted': 0, 'updated': 0, 'skipped': 2, 'errors': 0}\n2026-02-03 09:29:36 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-8058-20260203-092936\n2026-02-03 09:29:36 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-03 09:29:36 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:29:39 [INFO] etl_billiards: ODS_MEMBER_CARD ODS 任务完成: {'fetched': 945, 'inserted': 0, 'updated': 0, 'skipped': 945, 'errors': 0}\n2026-02-03 09:29:39 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8059-20260203-092939\n2026-02-03 09:29:39 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-03 09:29:39 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8059-20260203-092939\n2026-02-03 09:29:39 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-03 05:26:48+08:00 ~ 2026-02-03 11:26:48+08:00]\n2026-02-03 09:29:39 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-03 09:29:39 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.37s\n2026-02-03 09:29:39 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-03 09:29:40 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.45s\n2026-02-03 09:29:40 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-03 09:29:40 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.16s\n2026-02-03 09:29:40 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-03 09:29:40 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.16s\n2026-02-03 09:29:40 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-03 09:29:40 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.17s\n2026-02-03 09:29:40 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-03 09:29:40 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.18s\n2026-02-03 09:29:40 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-03 09:29:41 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.25s\n2026-02-03 09:29:41 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-03 09:29:41 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.21s\n2026-02-03 09:29:41 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-03 09:29:41 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.36s\n2026-02-03 09:29:41 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-03 09:29:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.57s\n2026-02-03 09:29:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-03 09:29:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.19s\n2026-02-03 09:29:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-03 09:29:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.18s\n2026-02-03 09:29:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-03 09:29:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.19s\n2026-02-03 09:29:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-03 09:29:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.19s\n2026-02-03 09:29:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-03 09:29:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.16s\n2026-02-03 09:29:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-03 09:29:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.22s\n2026-02-03 09:29:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-03 09:29:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.16s\n2026-02-03 09:29:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-03 09:29:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.27s\n2026-02-03 09:29:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-03 09:29:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.27s\n2026-02-03 09:29:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-03 09:29:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.23s\n2026-02-03 09:29:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-03 09:29:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.22s\n2026-02-03 09:29:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-03 09:29:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.20s\n2026-02-03 09:29:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-03 09:29:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.18s\n2026-02-03 09:29:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-03 09:29:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.20s\n2026-02-03 09:29:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-03 09:29:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.20s\n2026-02-03 09:29:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-03 09:29:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.25s\n2026-02-03 09:29:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-03 09:29:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.19s\n2026-02-03 09:29:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-03 09:29:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.18s\n2026-02-03 09:29:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-03 09:29:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.18s\n2026-02-03 09:29:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-03 09:29:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.19s\n2026-02-03 09:29:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-03 09:29:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.18s\n2026-02-03 09:29:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-03 09:29:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.24s\n2026-02-03 09:29:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-03 09:29:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.24s\n2026-02-03 09:29:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 09:29:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.20s\n2026-02-03 09:29:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 09:29:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.19s\n2026-02-03 09:29:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-03 09:29:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.18s\n2026-02-03 09:29:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-03 09:29:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.18s\n2026-02-03 09:29:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-03 09:29:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.22s\n2026-02-03 09:29:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-03 09:29:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.18s\n2026-02-03 09:29:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-03 09:29:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.18s\n2026-02-03 09:29:48 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-03 09:29:48 [INFO] etl_billiards: 所有任务执行完成\n2026-02-03 09:29:48 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "e899db8e",
"executed_at": "2026-02-03T08:26:48.917342",
"status": "success",
"exit_code": 0,
"duration_seconds": 190.12797,
"summary": "【DWD 装载】维表新增: 0条, 维表更新: 50条, 事实表新增: 0条, 事实表更新: 0条\n 维表: dim_store_goods: +0, ~50\n【错误】2026-02-03 08:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-03 08:26:50 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0; 2026-02-03 08:26:51 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-03 06:26:48 --window-end 2026-02-03 08:26:48\n2026-02-03 08:26:49 [INFO] etl_billiards: 配置加载完成\n2026-02-03 08:26:49 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-03 08:26:49 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-03 08:26:49 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=86095867d4614b32bf01f84b9f37e59d\n2026-02-03 08:26:49 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-8012-20260203-082649\n2026-02-03 08:26:49 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-03 08:26:49 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:26:50 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-03 08:26:50 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-8013-20260203-082650\n2026-02-03 08:26:50 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-03 08:26:50 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:26:50 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 08:26:50 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-8014-20260203-082650\n2026-02-03 08:26:50 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-03 08:26:50 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:26:51 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-03 08:26:51 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-8015-20260203-082651\n2026-02-03 08:26:51 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:26:52 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00] 未发现需要抓取的小票\n2026-02-03 08:26:52 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-03 08:26:52 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-8016-20260203-082652\n2026-02-03 08:26:52 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-03 08:26:52 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:26:52 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-03 08:26:52 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-8017-20260203-082652\n2026-02-03 08:26:52 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-03 08:26:52 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:26:53 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 08:26:53 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-8018-20260203-082653\n2026-02-03 08:26:53 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-03 08:26:53 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:26:55 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-03 08:26:55 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-8019-20260203-082655\n2026-02-03 08:26:55 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-03 08:26:55 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:26:55 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 4, 'inserted': 0, 'updated': 0, 'skipped': 4, 'errors': 0}\n2026-02-03 08:26:55 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-8020-20260203-082655\n2026-02-03 08:26:55 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-03 08:26:55 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:26:56 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 57, 'updated': 0, 'skipped': 115, 'errors': 0}\n2026-02-03 08:26:56 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-8021-20260203-082656\n2026-02-03 08:26:56 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-03 08:26:56 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:27:17 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10014, 'inserted': 0, 'updated': 0, 'skipped': 10014, 'errors': 0}\n2026-02-03 08:27:17 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-8022-20260203-082717\n2026-02-03 08:27:17 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-03 08:27:17 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:27:25 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1779, 'inserted': 0, 'updated': 0, 'skipped': 1779, 'errors': 0}\n2026-02-03 08:27:25 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-8023-20260203-082725\n2026-02-03 08:27:25 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-03 08:27:25 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:27:55 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2447, 'inserted': 0, 'updated': 0, 'skipped': 2447, 'errors': 0}\n2026-02-03 08:27:55 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-8024-20260203-082755\n2026-02-03 08:27:55 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-03 08:27:55 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:27:56 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 0, 'updated': 0, 'skipped': 74, 'errors': 0}\n2026-02-03 08:27:56 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-8025-20260203-082756\n2026-02-03 08:27:56 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-03 08:27:56 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:27:56 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 08:27:56 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-8026-20260203-082756\n2026-02-03 08:27:56 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-03 08:27:56 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:27:57 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-03 08:27:57 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-8027-20260203-082757\n2026-02-03 08:27:57 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-03 08:27:57 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:27:58 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 39, 'inserted': 0, 'updated': 0, 'skipped': 39, 'errors': 0}\n2026-02-03 08:27:58 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-8028-20260203-082758\n2026-02-03 08:27:58 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-03 08:27:58 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:27:59 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-03 08:27:59 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-8029-20260203-082759\n2026-02-03 08:27:59 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-03 08:27:59 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:28:38 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17558, 'inserted': 0, 'updated': 0, 'skipped': 17558, 'errors': 0}\n2026-02-03 08:28:39 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-8030-20260203-082839\n2026-02-03 08:28:39 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-03 08:28:39 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:28:39 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 2, 'inserted': 0, 'updated': 0, 'skipped': 2, 'errors': 0}\n2026-02-03 08:28:39 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-8031-20260203-082839\n2026-02-03 08:28:39 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-03 08:28:39 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:29:19 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8111, 'inserted': 0, 'updated': 0, 'skipped': 8111, 'errors': 0}\n2026-02-03 08:29:19 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-8032-20260203-082919\n2026-02-03 08:29:19 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-03 08:29:19 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:29:45 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11777, 'inserted': 0, 'updated': 0, 'skipped': 11777, 'errors': 0}\n2026-02-03 08:29:45 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-8033-20260203-082945\n2026-02-03 08:29:45 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-03 08:29:45 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:29:45 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 2, 'inserted': 0, 'updated': 0, 'skipped': 2, 'errors': 0}\n2026-02-03 08:29:45 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-8034-20260203-082945\n2026-02-03 08:29:45 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-03 08:29:45 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:29:49 [INFO] etl_billiards: ODS_MEMBER_CARD ODS 任务完成: {'fetched': 945, 'inserted': 0, 'updated': 0, 'skipped': 945, 'errors': 0}\n2026-02-03 08:29:49 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8035-20260203-082949\n2026-02-03 08:29:49 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-03 08:29:49 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8035-20260203-082949\n2026-02-03 08:29:49 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-03 04:26:48+08:00 ~ 2026-02-03 10:26:48+08:00]\n2026-02-03 08:29:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-03 08:29:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.44s\n2026-02-03 08:29:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-03 08:29:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.51s\n2026-02-03 08:29:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-03 08:29:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.16s\n2026-02-03 08:29:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-03 08:29:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.16s\n2026-02-03 08:29:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-03 08:29:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.17s\n2026-02-03 08:29:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-03 08:29:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.18s\n2026-02-03 08:29:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-03 08:29:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.27s\n2026-02-03 08:29:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-03 08:29:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.24s\n2026-02-03 08:29:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-03 08:29:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.39s\n2026-02-03 08:29:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-03 08:29:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.71s\n2026-02-03 08:29:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-03 08:29:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.18s\n2026-02-03 08:29:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-03 08:29:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.19s\n2026-02-03 08:29:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-03 08:29:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.27s\n2026-02-03 08:29:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-03 08:29:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.33s\n2026-02-03 08:29:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-03 08:29:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.16s\n2026-02-03 08:29:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-03 08:29:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.19s\n2026-02-03 08:29:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-03 08:29:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.20s\n2026-02-03 08:29:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-03 08:29:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.25s\n2026-02-03 08:29:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-03 08:29:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.27s\n2026-02-03 08:29:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-03 08:29:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.21s\n2026-02-03 08:29:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-03 08:29:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.20s\n2026-02-03 08:29:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-03 08:29:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.18s\n2026-02-03 08:29:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-03 08:29:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.22s\n2026-02-03 08:29:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-03 08:29:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.20s\n2026-02-03 08:29:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-03 08:29:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.20s\n2026-02-03 08:29:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-03 08:29:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.24s\n2026-02-03 08:29:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-03 08:29:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.19s\n2026-02-03 08:29:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-03 08:29:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.18s\n2026-02-03 08:29:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-03 08:29:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.19s\n2026-02-03 08:29:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-03 08:29:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.21s\n2026-02-03 08:29:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-03 08:29:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.18s\n2026-02-03 08:29:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-03 08:29:57 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.24s\n2026-02-03 08:29:57 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-03 08:29:57 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.25s\n2026-02-03 08:29:57 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 08:29:57 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.19s\n2026-02-03 08:29:57 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 08:29:57 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.20s\n2026-02-03 08:29:57 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-03 08:29:58 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.31s\n2026-02-03 08:29:58 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-03 08:29:58 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.19s\n2026-02-03 08:29:58 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-03 08:29:58 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.22s\n2026-02-03 08:29:58 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-03 08:29:58 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.17s\n2026-02-03 08:29:58 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-03 08:29:58 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.18s\n2026-02-03 08:29:58 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 50, 'skipped': 122}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 43, 'skipped': 129}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-03 08:29:59 [INFO] etl_billiards: 所有任务执行完成\n2026-02-03 08:29:59 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "8457c6e6",
"executed_at": "2026-02-03T07:25:51.667995",
"status": "success",
"exit_code": 0,
"duration_seconds": 203.449928,
"summary": "【错误】2026-02-03 07:32:05 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-03 07:32:06 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 1, 'inserted': 1; 2026-02-03 07:32:07 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-03 05:25:51 --window-end 2026-02-03 07:25:51\n2026-02-03 07:32:04 [INFO] etl_billiards: 配置加载完成\n2026-02-03 07:32:04 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-03 07:32:04 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-03 07:32:05 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=c79020f652284c4c81822b0f26f199b9\n2026-02-03 07:32:05 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-7988-20260203-073205\n2026-02-03 07:32:05 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-03 07:32:05 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:32:05 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-03 07:32:06 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-7989-20260203-073206\n2026-02-03 07:32:06 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-03 07:32:06 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:32:06 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 1, 'inserted': 1, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 07:32:06 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-7990-20260203-073206\n2026-02-03 07:32:06 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-03 07:32:06 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:32:07 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-03 07:32:07 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-7991-20260203-073207\n2026-02-03 07:32:07 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:32:07 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00] 未发现需要抓取的小票\n2026-02-03 07:32:07 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-03 07:32:08 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-7992-20260203-073208\n2026-02-03 07:32:08 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-03 07:32:08 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:32:08 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-03 07:32:08 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-7993-20260203-073208\n2026-02-03 07:32:08 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-03 07:32:08 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:32:08 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 07:32:09 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-7994-20260203-073209\n2026-02-03 07:32:09 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-03 07:32:09 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:32:11 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-03 07:32:11 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-7995-20260203-073211\n2026-02-03 07:32:11 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-03 07:32:11 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:32:11 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 7, 'inserted': 0, 'updated': 0, 'skipped': 7, 'errors': 0}\n2026-02-03 07:32:12 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-7996-20260203-073212\n2026-02-03 07:32:12 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-03 07:32:12 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:32:14 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-03 07:32:14 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-7997-20260203-073214\n2026-02-03 07:32:14 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-03 07:32:14 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:32:38 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10129, 'inserted': 0, 'updated': 0, 'skipped': 10129, 'errors': 0}\n2026-02-03 07:32:38 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-7998-20260203-073238\n2026-02-03 07:32:38 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-03 07:32:38 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:32:46 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1794, 'inserted': 0, 'updated': 0, 'skipped': 1794, 'errors': 0}\n2026-02-03 07:32:46 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-7999-20260203-073246\n2026-02-03 07:32:46 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-03 07:32:46 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:33:12 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2471, 'inserted': 0, 'updated': 0, 'skipped': 2471, 'errors': 0}\n2026-02-03 07:33:13 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-8000-20260203-073313\n2026-02-03 07:33:13 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-03 07:33:13 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:33:14 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 0, 'updated': 0, 'skipped': 74, 'errors': 0}\n2026-02-03 07:33:15 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-8001-20260203-073315\n2026-02-03 07:33:15 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-03 07:33:15 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:33:16 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 07:33:17 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-8002-20260203-073317\n2026-02-03 07:33:17 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-03 07:33:17 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:33:18 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-03 07:33:19 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-8003-20260203-073319\n2026-02-03 07:33:19 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-03 07:33:19 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:33:20 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 40, 'inserted': 0, 'updated': 0, 'skipped': 40, 'errors': 0}\n2026-02-03 07:33:20 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-8004-20260203-073320\n2026-02-03 07:33:20 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-03 07:33:20 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:33:22 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-03 07:33:22 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-8005-20260203-073322\n2026-02-03 07:33:22 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-03 07:33:22 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:34:03 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17558, 'inserted': 0, 'updated': 0, 'skipped': 17558, 'errors': 0}\n2026-02-03 07:34:03 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-8006-20260203-073403\n2026-02-03 07:34:03 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-03 07:34:03 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:34:04 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 5, 'inserted': 0, 'updated': 0, 'skipped': 5, 'errors': 0}\n2026-02-03 07:34:04 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-8007-20260203-073404\n2026-02-03 07:34:04 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-03 07:34:04 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:34:44 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8204, 'inserted': 0, 'updated': 0, 'skipped': 8204, 'errors': 0}\n2026-02-03 07:34:44 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-8008-20260203-073444\n2026-02-03 07:34:44 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-03 07:34:44 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:35:11 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11912, 'inserted': 0, 'updated': 0, 'skipped': 11912, 'errors': 0}\n2026-02-03 07:35:13 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-8009-20260203-073513\n2026-02-03 07:35:13 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-03 07:35:13 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:35:13 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 4, 'inserted': 0, 'updated': 0, 'skipped': 4, 'errors': 0}\n2026-02-03 07:35:13 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-8010-20260203-073513\n2026-02-03 07:35:13 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-03 07:35:13 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:35:17 [INFO] etl_billiards: ODS_MEMBER_CARD ODS 任务完成: {'fetched': 945, 'inserted': 0, 'updated': 0, 'skipped': 945, 'errors': 0}\n2026-02-03 07:35:18 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8011-20260203-073518\n2026-02-03 07:35:18 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-03 07:35:18 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8011-20260203-073518\n2026-02-03 07:35:18 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-03 03:25:51+08:00 ~ 2026-02-03 09:25:51+08:00]\n2026-02-03 07:35:18 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-03 07:35:18 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.44s\n2026-02-03 07:35:18 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-03 07:35:19 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.48s\n2026-02-03 07:35:19 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-03 07:35:19 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.18s\n2026-02-03 07:35:19 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-03 07:35:19 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.16s\n2026-02-03 07:35:19 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-03 07:35:19 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.18s\n2026-02-03 07:35:19 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-03 07:35:19 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.20s\n2026-02-03 07:35:19 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-03 07:35:19 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.23s\n2026-02-03 07:35:19 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-03 07:35:20 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.23s\n2026-02-03 07:35:20 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-03 07:35:20 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.43s\n2026-02-03 07:35:20 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-03 07:35:21 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.65s\n2026-02-03 07:35:21 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-03 07:35:21 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.21s\n2026-02-03 07:35:21 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-03 07:35:21 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.20s\n2026-02-03 07:35:21 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-03 07:35:21 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.22s\n2026-02-03 07:35:21 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-03 07:35:22 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.21s\n2026-02-03 07:35:22 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-03 07:35:22 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.16s\n2026-02-03 07:35:22 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-03 07:35:22 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.18s\n2026-02-03 07:35:22 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-03 07:35:22 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.16s\n2026-02-03 07:35:22 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-03 07:35:22 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.28s\n2026-02-03 07:35:22 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-03 07:35:23 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.27s\n2026-02-03 07:35:23 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-03 07:35:23 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.29s\n2026-02-03 07:35:23 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-03 07:35:23 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.20s\n2026-02-03 07:35:23 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-03 07:35:23 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.23s\n2026-02-03 07:35:23 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-03 07:35:24 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.21s\n2026-02-03 07:35:24 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-03 07:35:24 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.23s\n2026-02-03 07:35:24 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-03 07:35:24 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.21s\n2026-02-03 07:35:24 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-03 07:35:24 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.33s\n2026-02-03 07:35:24 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-03 07:35:25 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.20s\n2026-02-03 07:35:25 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-03 07:35:25 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.21s\n2026-02-03 07:35:25 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-03 07:35:25 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.18s\n2026-02-03 07:35:25 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-03 07:35:25 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.19s\n2026-02-03 07:35:25 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-03 07:35:25 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.19s\n2026-02-03 07:35:25 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-03 07:35:26 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.24s\n2026-02-03 07:35:26 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-03 07:35:26 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.25s\n2026-02-03 07:35:26 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 07:35:26 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.20s\n2026-02-03 07:35:26 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 07:35:26 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.20s\n2026-02-03 07:35:26 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-03 07:35:26 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.19s\n2026-02-03 07:35:26 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-03 07:35:27 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.19s\n2026-02-03 07:35:27 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-03 07:35:27 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.27s\n2026-02-03 07:35:27 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-03 07:35:27 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.19s\n2026-02-03 07:35:27 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-03 07:35:27 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.20s\n2026-02-03 07:35:27 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-03 07:35:27 [INFO] etl_billiards: 所有任务执行完成\n2026-02-03 07:35:27 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "7df114bf",
"executed_at": "2026-02-03T07:25:48.878438",
"status": "success",
"exit_code": 0,
"duration_seconds": 204.842007,
"summary": "【错误】2026-02-03 07:28:40 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-03 07:28:41 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 1, 'inserted': 1; 2026-02-03 07:28:41 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-03 05:25:48 --window-end 2026-02-03 07:25:48\n2026-02-03 07:28:39 [INFO] etl_billiards: 配置加载完成\n2026-02-03 07:28:39 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-03 07:28:39 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-03 07:28:39 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=0e514ecef7964063a979b5d3af2a43ac\n2026-02-03 07:28:40 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-7964-20260203-072840\n2026-02-03 07:28:40 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-03 07:28:40 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:28:40 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-03 07:28:40 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-7965-20260203-072840\n2026-02-03 07:28:40 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-03 07:28:40 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:28:41 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 1, 'inserted': 1, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 07:28:41 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-7966-20260203-072841\n2026-02-03 07:28:41 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-03 07:28:41 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:28:41 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-03 07:28:42 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-7967-20260203-072842\n2026-02-03 07:28:42 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:28:42 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00] 未发现需要抓取的小票\n2026-02-03 07:28:42 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-03 07:28:42 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-7968-20260203-072842\n2026-02-03 07:28:42 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-03 07:28:42 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:28:43 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-03 07:28:43 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-7969-20260203-072843\n2026-02-03 07:28:43 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-03 07:28:43 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:28:43 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 07:28:43 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-7970-20260203-072843\n2026-02-03 07:28:43 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-03 07:28:43 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:28:45 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-03 07:28:45 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-7971-20260203-072845\n2026-02-03 07:28:45 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-03 07:28:45 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:28:46 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 7, 'inserted': 0, 'updated': 0, 'skipped': 7, 'errors': 0}\n2026-02-03 07:28:46 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-7972-20260203-072846\n2026-02-03 07:28:46 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-03 07:28:46 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:28:46 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-03 07:28:47 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-7973-20260203-072847\n2026-02-03 07:28:47 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-03 07:28:47 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:29:09 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10129, 'inserted': 0, 'updated': 0, 'skipped': 10129, 'errors': 0}\n2026-02-03 07:29:10 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-7974-20260203-072910\n2026-02-03 07:29:10 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-03 07:29:10 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:29:17 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1794, 'inserted': 0, 'updated': 0, 'skipped': 1794, 'errors': 0}\n2026-02-03 07:29:17 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-7975-20260203-072917\n2026-02-03 07:29:17 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-03 07:29:17 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:29:44 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2471, 'inserted': 0, 'updated': 0, 'skipped': 2471, 'errors': 0}\n2026-02-03 07:29:44 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-7976-20260203-072944\n2026-02-03 07:29:44 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-03 07:29:44 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:29:45 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 0, 'updated': 0, 'skipped': 74, 'errors': 0}\n2026-02-03 07:29:45 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-7977-20260203-072945\n2026-02-03 07:29:45 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-03 07:29:45 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:29:45 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-03 07:29:45 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-7978-20260203-072945\n2026-02-03 07:29:45 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-03 07:29:45 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:29:46 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-03 07:29:46 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-7979-20260203-072946\n2026-02-03 07:29:46 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-03 07:29:46 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:29:47 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 40, 'inserted': 0, 'updated': 0, 'skipped': 40, 'errors': 0}\n2026-02-03 07:29:48 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-7980-20260203-072948\n2026-02-03 07:29:48 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-03 07:29:48 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:29:49 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-03 07:29:49 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-7981-20260203-072949\n2026-02-03 07:29:49 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-03 07:29:49 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:30:33 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17558, 'inserted': 0, 'updated': 0, 'skipped': 17558, 'errors': 0}\n2026-02-03 07:30:34 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-7982-20260203-073034\n2026-02-03 07:30:34 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-03 07:30:34 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:30:34 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 5, 'inserted': 0, 'updated': 0, 'skipped': 5, 'errors': 0}\n2026-02-03 07:30:34 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-7983-20260203-073034\n2026-02-03 07:30:34 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-03 07:30:34 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:31:17 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8204, 'inserted': 0, 'updated': 0, 'skipped': 8204, 'errors': 0}\n2026-02-03 07:31:18 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-7984-20260203-073118\n2026-02-03 07:31:18 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-03 07:31:18 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:31:48 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11912, 'inserted': 0, 'updated': 0, 'skipped': 11912, 'errors': 0}\n2026-02-03 07:31:48 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-7985-20260203-073148\n2026-02-03 07:31:48 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-03 07:31:48 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:31:48 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 4, 'inserted': 0, 'updated': 0, 'skipped': 4, 'errors': 0}\n2026-02-03 07:31:49 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-7986-20260203-073149\n2026-02-03 07:31:49 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-03 07:31:49 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:31:51 [INFO] etl_billiards: ODS_MEMBER_CARD ODS 任务完成: {'fetched': 945, 'inserted': 0, 'updated': 0, 'skipped': 945, 'errors': 0}\n2026-02-03 07:31:51 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7987-20260203-073151\n2026-02-03 07:31:51 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-03 07:31:51 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7987-20260203-073151\n2026-02-03 07:31:51 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-03 03:25:48+08:00 ~ 2026-02-03 09:25:48+08:00]\n2026-02-03 07:31:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-03 07:31:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.42s\n2026-02-03 07:31:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-03 07:31:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.49s\n2026-02-03 07:31:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-03 07:31:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.18s\n2026-02-03 07:31:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-03 07:31:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.17s\n2026-02-03 07:31:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-03 07:31:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.17s\n2026-02-03 07:31:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-03 07:31:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.18s\n2026-02-03 07:31:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-03 07:31:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.34s\n2026-02-03 07:31:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-03 07:31:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.25s\n2026-02-03 07:31:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-03 07:31:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.52s\n2026-02-03 07:31:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-03 07:31:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.72s\n2026-02-03 07:31:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-03 07:31:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.28s\n2026-02-03 07:31:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-03 07:31:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.37s\n2026-02-03 07:31:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-03 07:31:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.24s\n2026-02-03 07:31:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-03 07:31:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.20s\n2026-02-03 07:31:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-03 07:31:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.38s\n2026-02-03 07:31:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-03 07:31:57 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.21s\n2026-02-03 07:31:57 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-03 07:31:57 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.53s\n2026-02-03 07:31:57 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-03 07:31:58 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 1.18s\n2026-02-03 07:31:58 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-03 07:31:59 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.62s\n2026-02-03 07:31:59 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-03 07:31:59 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.22s\n2026-02-03 07:31:59 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-03 07:31:59 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.24s\n2026-02-03 07:31:59 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-03 07:32:00 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.20s\n2026-02-03 07:32:00 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-03 07:32:00 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.20s\n2026-02-03 07:32:00 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-03 07:32:00 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.21s\n2026-02-03 07:32:00 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-03 07:32:00 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.20s\n2026-02-03 07:32:00 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-03 07:32:00 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.25s\n2026-02-03 07:32:00 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-03 07:32:01 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.22s\n2026-02-03 07:32:01 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-03 07:32:01 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.20s\n2026-02-03 07:32:01 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-03 07:32:01 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.19s\n2026-02-03 07:32:01 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-03 07:32:01 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.21s\n2026-02-03 07:32:01 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-03 07:32:01 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.19s\n2026-02-03 07:32:01 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-03 07:32:02 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.25s\n2026-02-03 07:32:02 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-03 07:32:02 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.26s\n2026-02-03 07:32:02 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 07:32:02 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.19s\n2026-02-03 07:32:02 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-03 07:32:02 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.24s\n2026-02-03 07:32:02 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-03 07:32:03 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.19s\n2026-02-03 07:32:03 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-03 07:32:03 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.19s\n2026-02-03 07:32:03 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-03 07:32:03 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.23s\n2026-02-03 07:32:03 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-03 07:32:03 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.18s\n2026-02-03 07:32:03 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-03 07:32:03 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.20s\n2026-02-03 07:32:03 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-03 07:32:03 [INFO] etl_billiards: 所有任务执行完成\n2026-02-03 07:32:03 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "8d78ffd7",
"executed_at": "2026-02-02T17:16:58.004405",
"status": "success",
"exit_code": 0,
"duration_seconds": 213.637389,
"summary": "【DWD 装载】维表新增: 0条, 维表更新: 19条, 事实表新增: 37条, 事实表更新: 0条\n 维表: dim_table: +0, ~14, dim_store_goods: +0, ~5\n 事实表: dwd_settlement_head: +7, ~0, dwd_table_fee_log: +6, ~0, dwd_groupbuy_redemption: +9, ~0, dwd_platform_coupon_redemption: +8, ~0, dwd_payment: +7, ~0\n【错误】2026-02-02 17:16:59 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-02 17:16:59 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0; 2026-02-02 17:17:00 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-02 15:16:58 --window-end 2026-02-02 17:16:58\n2026-02-02 17:16:58 [INFO] etl_billiards: 配置加载完成\n2026-02-02 17:16:58 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-02 17:16:58 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-02 17:16:58 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=3b88b9a266794a5984ed5cdf5fc7fab4\n2026-02-02 17:16:58 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-7844-20260202-171658\n2026-02-02 17:16:58 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-02 17:16:58 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:16:59 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-02 17:16:59 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-7845-20260202-171659\n2026-02-02 17:16:59 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-02 17:16:59 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:16:59 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 17:17:00 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-7846-20260202-171700\n2026-02-02 17:17:00 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-02 17:17:00 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:17:00 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-02 17:17:00 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-7847-20260202-171700\n2026-02-02 17:17:01 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:17:01 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00] 未发现需要抓取的小票\n2026-02-02 17:17:01 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-02 17:17:01 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-7848-20260202-171701\n2026-02-02 17:17:01 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-02 17:17:01 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:17:02 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-02 17:17:02 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-7849-20260202-171702\n2026-02-02 17:17:02 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-02 17:17:02 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:17:02 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 17:17:02 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-7850-20260202-171702\n2026-02-02 17:17:02 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-02 17:17:02 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:17:04 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-02 17:17:05 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-7851-20260202-171705\n2026-02-02 17:17:05 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-02 17:17:05 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:17:05 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 17:17:05 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-7852-20260202-171705\n2026-02-02 17:17:05 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-02 17:17:05 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:17:06 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 5, 'updated': 0, 'skipped': 167, 'errors': 0}\n2026-02-02 17:17:06 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-7853-20260202-171706\n2026-02-02 17:17:06 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-02 17:17:06 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:17:36 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10042, 'inserted': 6, 'updated': 0, 'skipped': 10036, 'errors': 0}\n2026-02-02 17:17:36 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-7854-20260202-171736\n2026-02-02 17:17:36 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-02 17:17:36 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:17:43 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1777, 'inserted': 0, 'updated': 0, 'skipped': 1777, 'errors': 0}\n2026-02-02 17:17:44 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-7855-20260202-171744\n2026-02-02 17:17:44 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-02 17:17:44 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:18:12 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2451, 'inserted': 0, 'updated': 0, 'skipped': 2451, 'errors': 0}\n2026-02-02 17:18:12 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-7856-20260202-171812\n2026-02-02 17:18:12 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-02 17:18:12 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:18:13 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 14, 'updated': 0, 'skipped': 60, 'errors': 0}\n2026-02-02 17:18:13 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-7857-20260202-171813\n2026-02-02 17:18:13 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-02 17:18:13 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:18:13 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 17:18:13 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-7858-20260202-171813\n2026-02-02 17:18:13 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-02 17:18:13 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:18:15 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 5, 'updated': 0, 'skipped': 167, 'errors': 0}\n2026-02-02 17:18:16 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-7859-20260202-171816\n2026-02-02 17:18:16 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-02 17:18:16 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:18:16 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 40, 'inserted': 0, 'updated': 0, 'skipped': 40, 'errors': 0}\n2026-02-02 17:18:16 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-7860-20260202-171816\n2026-02-02 17:18:16 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-02 17:18:16 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:18:17 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-02 17:18:17 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-7861-20260202-171817\n2026-02-02 17:18:17 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-02 17:18:17 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:19:04 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17506, 'inserted': 8, 'updated': 0, 'skipped': 17498, 'errors': 0}\n2026-02-02 17:19:04 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-7862-20260202-171904\n2026-02-02 17:19:04 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-02 17:19:04 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:19:04 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 14, 'inserted': 6, 'updated': 0, 'skipped': 8, 'errors': 0}\n2026-02-02 17:19:04 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-7863-20260202-171904\n2026-02-02 17:19:04 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-02 17:19:04 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:19:48 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8142, 'inserted': 9, 'updated': 0, 'skipped': 8133, 'errors': 0}\n2026-02-02 17:19:48 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-7864-20260202-171948\n2026-02-02 17:19:48 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-02 17:19:48 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:20:19 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11820, 'inserted': 7, 'updated': 0, 'skipped': 11813, 'errors': 0}\n2026-02-02 17:20:19 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-7865-20260202-172019\n2026-02-02 17:20:19 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-02 17:20:19 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:20:20 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 19, 'inserted': 7, 'updated': 0, 'skipped': 12, 'errors': 0}\n2026-02-02 17:20:20 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-7866-20260202-172020\n2026-02-02 17:20:20 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-02 17:20:20 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:20:21 [ERROR] etl_billiards: ODS_MEMBER_CARD ODS 任务失败\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 17:20:21 [ERROR] etl_billiards: 任务 ODS_MEMBER_CARD 失败: 错误: 整数超出范围\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 112, in run_tasks\n self._run_single_task(task_code, run_uuid, store_id)\n ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 168, in _run_single_task\n result, _ = self._execute_ods_record_and_load(task_code, cursor_data, fetch_dir, run_id)\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 297, in _execute_ods_record_and_load\n result = task.execute(cursor_data)\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 17:20:21 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7867-20260202-172021\n2026-02-02 17:20:21 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-02 17:20:21 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7867-20260202-172021\n2026-02-02 17:20:21 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-02 13:16:58+08:00 ~ 2026-02-02 19:16:58+08:00]\n2026-02-02 17:20:21 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-02 17:20:22 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.40s\n2026-02-02 17:20:22 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-02 17:20:22 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.49s\n2026-02-02 17:20:22 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-02 17:20:22 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.22s\n2026-02-02 17:20:22 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-02 17:20:23 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.22s\n2026-02-02 17:20:23 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-02 17:20:23 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.18s\n2026-02-02 17:20:23 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-02 17:20:23 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.20s\n2026-02-02 17:20:23 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-02 17:20:23 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.24s\n2026-02-02 17:20:23 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-02 17:20:23 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.23s\n2026-02-02 17:20:23 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-02 17:20:24 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.37s\n2026-02-02 17:20:24 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-02 17:20:24 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.66s\n2026-02-02 17:20:24 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-02 17:20:25 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.22s\n2026-02-02 17:20:25 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-02 17:20:25 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.20s\n2026-02-02 17:20:25 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-02 17:20:25 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.26s\n2026-02-02 17:20:25 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-02 17:20:25 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.26s\n2026-02-02 17:20:25 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-02 17:20:26 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.17s\n2026-02-02 17:20:26 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-02 17:20:26 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.20s\n2026-02-02 17:20:26 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-02 17:20:26 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.18s\n2026-02-02 17:20:26 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-02 17:20:26 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.24s\n2026-02-02 17:20:26 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-02 17:20:26 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.27s\n2026-02-02 17:20:26 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-02 17:20:27 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.22s\n2026-02-02 17:20:27 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-02 17:20:27 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.22s\n2026-02-02 17:20:27 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-02 17:20:27 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.20s\n2026-02-02 17:20:27 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-02 17:20:27 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.20s\n2026-02-02 17:20:27 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-02 17:20:27 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.23s\n2026-02-02 17:20:27 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-02 17:20:28 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.22s\n2026-02-02 17:20:28 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-02 17:20:28 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.27s\n2026-02-02 17:20:28 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-02 17:20:28 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.21s\n2026-02-02 17:20:28 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-02 17:20:28 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.20s\n2026-02-02 17:20:28 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-02 17:20:29 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.20s\n2026-02-02 17:20:29 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-02 17:20:29 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.22s\n2026-02-02 17:20:29 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-02 17:20:29 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.25s\n2026-02-02 17:20:29 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-02 17:20:29 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.22s\n2026-02-02 17:20:29 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-02 17:20:29 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.21s\n2026-02-02 17:20:29 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 17:20:30 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.20s\n2026-02-02 17:20:30 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 17:20:30 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.21s\n2026-02-02 17:20:30 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-02 17:20:30 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.20s\n2026-02-02 17:20:30 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-02 17:20:30 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.20s\n2026-02-02 17:20:30 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-02 17:20:31 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.24s\n2026-02-02 17:20:31 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-02 17:20:31 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.22s\n2026-02-02 17:20:31 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-02 17:20:31 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.20s\n2026-02-02 17:20:31 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 14, 'skipped': 60}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 13, 'skipped': 61}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 5, 'skipped': 167}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 5, 'skipped': 167}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 7, 'updated': 0, 'processed': 7}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 7, 'updated': 0, 'processed': 7}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 6, 'updated': 0, 'processed': 6}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 6, 'updated': 0, 'processed': 6}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 9, 'updated': 0, 'processed': 9}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 9, 'updated': 0, 'processed': 9}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 8, 'updated': 0, 'processed': 8}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 8, 'updated': 0, 'processed': 8}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 7, 'updated': 0, 'processed': 7}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-02 17:20:31 [INFO] etl_billiards: 所有任务执行完成\n2026-02-02 17:20:31 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "926c4d29",
"executed_at": "2026-02-02T16:16:57.920781",
"status": "success",
"exit_code": 0,
"duration_seconds": 209.076515,
"summary": "【DWD 装载】维表新增: 0条, 维表更新: 14条, 事实表新增: 21条, 事实表更新: 0条\n 维表: dim_table: +0, ~11, dim_store_goods: +0, ~3\n 事实表: dwd_settlement_head: +4, ~0, dwd_table_fee_log: +4, ~0, dwd_groupbuy_redemption: +4, ~0, dwd_platform_coupon_redemption: +5, ~0, dwd_payment: +4, ~0\n【错误】2026-02-02 16:16:59 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-02 16:16:59 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0; 2026-02-02 16:17:01 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-02 14:16:57 --window-end 2026-02-02 16:16:57\n2026-02-02 16:16:58 [INFO] etl_billiards: 配置加载完成\n2026-02-02 16:16:58 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-02 16:16:58 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-02 16:16:58 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=0babb46114af4e6290e77e89dc3227b6\n2026-02-02 16:16:58 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-7820-20260202-161658\n2026-02-02 16:16:58 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-02 16:16:58 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:16:59 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-02 16:16:59 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-7821-20260202-161659\n2026-02-02 16:16:59 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-02 16:16:59 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:16:59 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 16:17:00 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-7822-20260202-161700\n2026-02-02 16:17:00 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-02 16:17:00 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:17:01 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-02 16:17:01 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-7823-20260202-161701\n2026-02-02 16:17:01 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:17:01 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00] 未发现需要抓取的小票\n2026-02-02 16:17:01 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-02 16:17:02 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-7824-20260202-161702\n2026-02-02 16:17:02 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-02 16:17:02 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:17:02 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-02 16:17:02 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-7825-20260202-161702\n2026-02-02 16:17:02 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-02 16:17:02 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:17:02 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 16:17:03 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-7826-20260202-161703\n2026-02-02 16:17:03 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-02 16:17:03 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:17:05 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-02 16:17:05 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-7827-20260202-161705\n2026-02-02 16:17:05 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-02 16:17:05 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:17:05 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 16:17:05 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-7828-20260202-161705\n2026-02-02 16:17:05 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-02 16:17:05 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:17:06 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 3, 'updated': 0, 'skipped': 169, 'errors': 0}\n2026-02-02 16:17:06 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-7829-20260202-161706\n2026-02-02 16:17:06 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-02 16:17:06 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:17:33 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10036, 'inserted': 4, 'updated': 0, 'skipped': 10032, 'errors': 0}\n2026-02-02 16:17:34 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-7830-20260202-161734\n2026-02-02 16:17:34 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-02 16:17:34 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:17:41 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1777, 'inserted': 0, 'updated': 0, 'skipped': 1777, 'errors': 0}\n2026-02-02 16:17:42 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-7831-20260202-161742\n2026-02-02 16:17:42 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-02 16:17:42 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:18:10 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2451, 'inserted': 0, 'updated': 0, 'skipped': 2451, 'errors': 0}\n2026-02-02 16:18:10 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-7832-20260202-161810\n2026-02-02 16:18:10 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-02 16:18:10 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:18:10 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 12, 'updated': 0, 'skipped': 62, 'errors': 0}\n2026-02-02 16:18:11 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-7833-20260202-161811\n2026-02-02 16:18:11 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-02 16:18:11 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:18:11 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 16:18:11 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-7834-20260202-161811\n2026-02-02 16:18:11 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-02 16:18:11 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:18:14 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 3, 'updated': 0, 'skipped': 169, 'errors': 0}\n2026-02-02 16:18:14 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-7835-20260202-161814\n2026-02-02 16:18:14 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-02 16:18:14 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:18:15 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 40, 'inserted': 0, 'updated': 0, 'skipped': 40, 'errors': 0}\n2026-02-02 16:18:15 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-7836-20260202-161815\n2026-02-02 16:18:15 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-02 16:18:15 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:18:16 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-02 16:18:16 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-7837-20260202-161816\n2026-02-02 16:18:16 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-02 16:18:16 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:19:00 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17498, 'inserted': 5, 'updated': 0, 'skipped': 17493, 'errors': 0}\n2026-02-02 16:19:01 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-7838-20260202-161901\n2026-02-02 16:19:01 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-02 16:19:01 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:19:01 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 13, 'inserted': 3, 'updated': 0, 'skipped': 10, 'errors': 0}\n2026-02-02 16:19:01 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-7839-20260202-161901\n2026-02-02 16:19:01 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-02 16:19:01 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:19:45 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8133, 'inserted': 4, 'updated': 0, 'skipped': 8129, 'errors': 0}\n2026-02-02 16:19:45 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-7840-20260202-161945\n2026-02-02 16:19:45 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-02 16:19:45 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:20:15 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11813, 'inserted': 4, 'updated': 0, 'skipped': 11809, 'errors': 0}\n2026-02-02 16:20:15 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-7841-20260202-162015\n2026-02-02 16:20:15 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-02 16:20:15 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:20:15 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 16, 'inserted': 4, 'updated': 0, 'skipped': 12, 'errors': 0}\n2026-02-02 16:20:16 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-7842-20260202-162016\n2026-02-02 16:20:16 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-02 16:20:16 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:20:16 [ERROR] etl_billiards: ODS_MEMBER_CARD ODS 任务失败\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 16:20:17 [ERROR] etl_billiards: 任务 ODS_MEMBER_CARD 失败: 错误: 整数超出范围\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 112, in run_tasks\n self._run_single_task(task_code, run_uuid, store_id)\n ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 168, in _run_single_task\n result, _ = self._execute_ods_record_and_load(task_code, cursor_data, fetch_dir, run_id)\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 297, in _execute_ods_record_and_load\n result = task.execute(cursor_data)\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 16:20:17 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7843-20260202-162017\n2026-02-02 16:20:17 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-02 16:20:17 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7843-20260202-162017\n2026-02-02 16:20:17 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-02 12:16:57+08:00 ~ 2026-02-02 18:16:57+08:00]\n2026-02-02 16:20:17 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-02 16:20:17 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.42s\n2026-02-02 16:20:17 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-02 16:20:18 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.50s\n2026-02-02 16:20:18 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-02 16:20:18 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.23s\n2026-02-02 16:20:18 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-02 16:20:18 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.23s\n2026-02-02 16:20:18 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-02 16:20:18 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.19s\n2026-02-02 16:20:18 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-02 16:20:18 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.21s\n2026-02-02 16:20:18 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-02 16:20:19 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.29s\n2026-02-02 16:20:19 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-02 16:20:19 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.25s\n2026-02-02 16:20:19 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-02 16:20:19 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.37s\n2026-02-02 16:20:19 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-02 16:20:20 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.57s\n2026-02-02 16:20:20 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-02 16:20:20 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.20s\n2026-02-02 16:20:20 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-02 16:20:20 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.20s\n2026-02-02 16:20:20 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-02 16:20:21 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.26s\n2026-02-02 16:20:21 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-02 16:20:21 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.26s\n2026-02-02 16:20:21 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-02 16:20:21 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.18s\n2026-02-02 16:20:21 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-02 16:20:21 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.21s\n2026-02-02 16:20:21 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-02 16:20:21 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.18s\n2026-02-02 16:20:21 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-02 16:20:22 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.23s\n2026-02-02 16:20:22 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-02 16:20:22 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.25s\n2026-02-02 16:20:22 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-02 16:20:22 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.24s\n2026-02-02 16:20:22 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-02 16:20:22 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.23s\n2026-02-02 16:20:22 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-02 16:20:23 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.20s\n2026-02-02 16:20:23 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-02 16:20:23 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.19s\n2026-02-02 16:20:23 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-02 16:20:23 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.22s\n2026-02-02 16:20:23 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-02 16:20:23 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.23s\n2026-02-02 16:20:23 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-02 16:20:23 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.27s\n2026-02-02 16:20:23 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-02 16:20:24 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.22s\n2026-02-02 16:20:24 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-02 16:20:24 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.20s\n2026-02-02 16:20:24 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-02 16:20:24 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.20s\n2026-02-02 16:20:24 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-02 16:20:24 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.21s\n2026-02-02 16:20:24 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-02 16:20:24 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.21s\n2026-02-02 16:20:24 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-02 16:20:25 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.22s\n2026-02-02 16:20:25 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-02 16:20:25 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.21s\n2026-02-02 16:20:25 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 16:20:25 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.21s\n2026-02-02 16:20:25 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 16:20:25 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.22s\n2026-02-02 16:20:25 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-02 16:20:26 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.20s\n2026-02-02 16:20:26 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-02 16:20:26 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.20s\n2026-02-02 16:20:26 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-02 16:20:26 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.23s\n2026-02-02 16:20:26 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-02 16:20:26 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.20s\n2026-02-02 16:20:26 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-02 16:20:26 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.19s\n2026-02-02 16:20:26 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 11, 'skipped': 63}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 10, 'skipped': 64}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 3, 'skipped': 169}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 3, 'skipped': 169}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 5, 'updated': 0, 'processed': 5}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 5, 'updated': 0, 'processed': 5}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-02 16:20:26 [INFO] etl_billiards: 所有任务执行完成\n2026-02-02 16:20:26 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "47fa666c",
"executed_at": "2026-02-02T15:16:57.634176",
"status": "success",
"exit_code": 0,
"duration_seconds": 204.7959,
"summary": "【DWD 装载】维表新增: 0条, 维表更新: 12条, 事实表新增: 20条, 事实表更新: 0条\n 维表: dim_table: +0, ~9, dim_store_goods: +0, ~3\n 事实表: dwd_settlement_head: +4, ~0, dwd_table_fee_log: +3, ~0, dwd_groupbuy_redemption: +3, ~0, dwd_platform_coupon_redemption: +6, ~0, dwd_payment: +4, ~0\n【错误】2026-02-02 15:16:59 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-02 15:16:59 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0; 2026-02-02 15:17:00 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-02 13:16:57 --window-end 2026-02-02 15:16:57\n2026-02-02 15:16:57 [INFO] etl_billiards: 配置加载完成\n2026-02-02 15:16:57 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-02 15:16:57 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-02 15:16:58 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=4b076e3a454a4b3195e8e37d2a4b2006\n2026-02-02 15:16:58 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-7796-20260202-151658\n2026-02-02 15:16:58 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-02 15:16:58 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:16:59 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-02 15:16:59 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-7797-20260202-151659\n2026-02-02 15:16:59 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-02 15:16:59 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:16:59 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 15:16:59 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-7798-20260202-151659\n2026-02-02 15:16:59 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-02 15:16:59 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:17:00 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-02 15:17:00 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-7799-20260202-151700\n2026-02-02 15:17:00 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:17:01 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00] 未发现需要抓取的小票\n2026-02-02 15:17:01 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-02 15:17:01 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-7800-20260202-151701\n2026-02-02 15:17:01 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-02 15:17:01 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:17:01 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-02 15:17:02 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-7801-20260202-151702\n2026-02-02 15:17:02 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-02 15:17:02 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:17:02 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 15:17:02 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-7802-20260202-151702\n2026-02-02 15:17:02 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-02 15:17:02 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:17:04 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-02 15:17:04 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-7803-20260202-151704\n2026-02-02 15:17:04 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-02 15:17:04 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:17:05 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 15:17:05 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-7804-20260202-151705\n2026-02-02 15:17:05 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-02 15:17:05 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:17:05 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 3, 'updated': 0, 'skipped': 169, 'errors': 0}\n2026-02-02 15:17:06 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-7805-20260202-151706\n2026-02-02 15:17:06 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-02 15:17:06 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:17:30 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10032, 'inserted': 3, 'updated': 0, 'skipped': 10029, 'errors': 0}\n2026-02-02 15:17:30 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-7806-20260202-151730\n2026-02-02 15:17:30 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-02 15:17:30 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:17:38 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1777, 'inserted': 0, 'updated': 0, 'skipped': 1777, 'errors': 0}\n2026-02-02 15:17:38 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-7807-20260202-151738\n2026-02-02 15:17:38 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-02 15:17:38 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:18:06 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2451, 'inserted': 0, 'updated': 0, 'skipped': 2451, 'errors': 0}\n2026-02-02 15:18:06 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-7808-20260202-151806\n2026-02-02 15:18:06 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-02 15:18:06 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:18:06 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 9, 'updated': 0, 'skipped': 65, 'errors': 0}\n2026-02-02 15:18:07 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-7809-20260202-151807\n2026-02-02 15:18:07 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-02 15:18:07 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:18:07 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 15:18:07 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-7810-20260202-151807\n2026-02-02 15:18:07 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-02 15:18:07 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:18:09 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 3, 'updated': 0, 'skipped': 169, 'errors': 0}\n2026-02-02 15:18:09 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-7811-20260202-151809\n2026-02-02 15:18:09 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-02 15:18:09 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:18:09 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 40, 'inserted': 0, 'updated': 0, 'skipped': 40, 'errors': 0}\n2026-02-02 15:18:10 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-7812-20260202-151810\n2026-02-02 15:18:10 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-02 15:18:10 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:18:11 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-02 15:18:11 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-7813-20260202-151811\n2026-02-02 15:18:11 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-02 15:18:11 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:18:56 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17493, 'inserted': 6, 'updated': 0, 'skipped': 17487, 'errors': 0}\n2026-02-02 15:18:57 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-7814-20260202-151857\n2026-02-02 15:18:57 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-02 15:18:57 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:18:57 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 12, 'inserted': 3, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-02 15:18:57 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-7815-20260202-151857\n2026-02-02 15:18:57 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-02 15:18:57 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:19:41 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8129, 'inserted': 3, 'updated': 0, 'skipped': 8126, 'errors': 0}\n2026-02-02 15:19:41 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-7816-20260202-151941\n2026-02-02 15:19:41 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-02 15:19:41 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:20:10 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11809, 'inserted': 4, 'updated': 0, 'skipped': 11805, 'errors': 0}\n2026-02-02 15:20:10 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-7817-20260202-152010\n2026-02-02 15:20:10 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-02 15:20:10 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:20:10 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 14, 'inserted': 4, 'updated': 0, 'skipped': 10, 'errors': 0}\n2026-02-02 15:20:11 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-7818-20260202-152011\n2026-02-02 15:20:11 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-02 15:20:11 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:20:11 [ERROR] etl_billiards: ODS_MEMBER_CARD ODS 任务失败\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 15:20:11 [ERROR] etl_billiards: 任务 ODS_MEMBER_CARD 失败: 错误: 整数超出范围\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 112, in run_tasks\n self._run_single_task(task_code, run_uuid, store_id)\n ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 168, in _run_single_task\n result, _ = self._execute_ods_record_and_load(task_code, cursor_data, fetch_dir, run_id)\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 297, in _execute_ods_record_and_load\n result = task.execute(cursor_data)\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 15:20:12 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7819-20260202-152012\n2026-02-02 15:20:12 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-02 15:20:12 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7819-20260202-152012\n2026-02-02 15:20:12 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-02 11:16:57+08:00 ~ 2026-02-02 17:16:57+08:00]\n2026-02-02 15:20:12 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-02 15:20:12 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.42s\n2026-02-02 15:20:12 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-02 15:20:12 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.47s\n2026-02-02 15:20:12 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-02 15:20:13 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.28s\n2026-02-02 15:20:13 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-02 15:20:13 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.24s\n2026-02-02 15:20:13 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-02 15:20:13 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.20s\n2026-02-02 15:20:13 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-02 15:20:13 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.21s\n2026-02-02 15:20:13 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-02 15:20:14 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.26s\n2026-02-02 15:20:14 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-02 15:20:14 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.23s\n2026-02-02 15:20:14 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-02 15:20:14 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.39s\n2026-02-02 15:20:14 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-02 15:20:15 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.69s\n2026-02-02 15:20:15 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-02 15:20:15 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.21s\n2026-02-02 15:20:15 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-02 15:20:15 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.22s\n2026-02-02 15:20:15 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-02 15:20:16 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.27s\n2026-02-02 15:20:16 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-02 15:20:16 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.27s\n2026-02-02 15:20:16 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-02 15:20:16 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.20s\n2026-02-02 15:20:16 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-02 15:20:16 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.19s\n2026-02-02 15:20:16 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-02 15:20:16 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.19s\n2026-02-02 15:20:16 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-02 15:20:17 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.26s\n2026-02-02 15:20:17 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-02 15:20:17 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.25s\n2026-02-02 15:20:17 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-02 15:20:17 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.23s\n2026-02-02 15:20:17 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-02 15:20:17 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.23s\n2026-02-02 15:20:17 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-02 15:20:18 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.22s\n2026-02-02 15:20:18 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-02 15:20:18 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.21s\n2026-02-02 15:20:18 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-02 15:20:18 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.23s\n2026-02-02 15:20:18 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-02 15:20:18 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.23s\n2026-02-02 15:20:18 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-02 15:20:19 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.28s\n2026-02-02 15:20:19 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-02 15:20:19 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.22s\n2026-02-02 15:20:19 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-02 15:20:19 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.21s\n2026-02-02 15:20:19 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-02 15:20:19 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.21s\n2026-02-02 15:20:19 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-02 15:20:19 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.23s\n2026-02-02 15:20:19 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-02 15:20:20 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.23s\n2026-02-02 15:20:20 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-02 15:20:20 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.23s\n2026-02-02 15:20:20 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-02 15:20:20 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.23s\n2026-02-02 15:20:20 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 15:20:20 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.23s\n2026-02-02 15:20:20 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 15:20:21 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.22s\n2026-02-02 15:20:21 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-02 15:20:21 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.22s\n2026-02-02 15:20:21 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-02 15:20:21 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.21s\n2026-02-02 15:20:21 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-02 15:20:21 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.27s\n2026-02-02 15:20:21 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-02 15:20:22 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.23s\n2026-02-02 15:20:22 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-02 15:20:22 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.21s\n2026-02-02 15:20:22 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 9, 'skipped': 65}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 8, 'skipped': 66}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 3, 'skipped': 169}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 3, 'skipped': 169}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 3, 'updated': 0, 'processed': 3}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 3, 'updated': 0, 'processed': 3}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 3, 'updated': 0, 'processed': 3}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 3, 'updated': 0, 'processed': 3}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 6, 'updated': 0, 'processed': 6}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 6, 'updated': 0, 'processed': 6}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-02 15:20:22 [INFO] etl_billiards: 所有任务执行完成\n2026-02-02 15:20:22 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "2d422111",
"executed_at": "2026-02-02T14:16:57.126884",
"status": "success",
"exit_code": 0,
"duration_seconds": 189.098646,
"summary": "【DWD 装载】维表新增: 0条, 维表更新: 9条, 事实表新增: 21条, 事实表更新: 0条\n 维表: dim_table: +0, ~7, dim_store_goods: +0, ~2\n 事实表: dwd_settlement_head: +4, ~0, dwd_table_fee_log: +3, ~0, dwd_groupbuy_redemption: +3, ~0, dwd_platform_coupon_redemption: +7, ~0, dwd_payment: +4, ~0\n【错误】2026-02-02 14:16:58 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-02 14:16:58 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0; 2026-02-02 14:16:59 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-02 12:16:57 --window-end 2026-02-02 14:16:57\n2026-02-02 14:16:57 [INFO] etl_billiards: 配置加载完成\n2026-02-02 14:16:57 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-02 14:16:57 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-02 14:16:57 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=acb9074c3c104351b82d42cbae988241\n2026-02-02 14:16:57 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-7772-20260202-141657\n2026-02-02 14:16:57 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-02 14:16:57 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:16:58 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-02 14:16:58 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-7773-20260202-141658\n2026-02-02 14:16:58 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-02 14:16:58 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:16:58 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 14:16:59 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-7774-20260202-141659\n2026-02-02 14:16:59 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-02 14:16:59 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:16:59 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-02 14:16:59 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-7775-20260202-141659\n2026-02-02 14:16:59 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:17:00 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00] 未发现需要抓取的小票\n2026-02-02 14:17:00 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-02 14:17:00 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-7776-20260202-141700\n2026-02-02 14:17:00 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-02 14:17:00 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:17:01 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-02 14:17:01 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-7777-20260202-141701\n2026-02-02 14:17:01 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-02 14:17:01 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:17:01 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 14:17:01 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-7778-20260202-141701\n2026-02-02 14:17:01 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-02 14:17:01 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:17:03 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-02 14:17:04 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-7779-20260202-141704\n2026-02-02 14:17:04 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-02 14:17:04 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:17:04 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 14:17:04 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-7780-20260202-141704\n2026-02-02 14:17:04 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-02 14:17:04 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:17:04 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 2, 'updated': 0, 'skipped': 170, 'errors': 0}\n2026-02-02 14:17:05 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-7781-20260202-141705\n2026-02-02 14:17:05 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-02 14:17:05 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:17:27 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10029, 'inserted': 3, 'updated': 0, 'skipped': 10026, 'errors': 0}\n2026-02-02 14:17:27 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-7782-20260202-141727\n2026-02-02 14:17:27 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-02 14:17:27 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:17:34 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1777, 'inserted': 0, 'updated': 0, 'skipped': 1777, 'errors': 0}\n2026-02-02 14:17:34 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-7783-20260202-141734\n2026-02-02 14:17:34 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-02 14:17:34 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:18:01 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2451, 'inserted': 0, 'updated': 0, 'skipped': 2451, 'errors': 0}\n2026-02-02 14:18:01 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-7784-20260202-141801\n2026-02-02 14:18:01 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-02 14:18:01 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:18:02 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 8, 'updated': 0, 'skipped': 66, 'errors': 0}\n2026-02-02 14:18:02 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-7785-20260202-141802\n2026-02-02 14:18:02 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-02 14:18:02 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:18:02 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 14:18:02 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-7786-20260202-141802\n2026-02-02 14:18:02 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-02 14:18:02 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:18:04 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 2, 'updated': 0, 'skipped': 170, 'errors': 0}\n2026-02-02 14:18:04 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-7787-20260202-141804\n2026-02-02 14:18:04 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-02 14:18:04 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:18:04 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 40, 'inserted': 0, 'updated': 0, 'skipped': 40, 'errors': 0}\n2026-02-02 14:18:05 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-7788-20260202-141805\n2026-02-02 14:18:05 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-02 14:18:05 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:18:06 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-02 14:18:06 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-7789-20260202-141806\n2026-02-02 14:18:06 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-02 14:18:06 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:18:47 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17487, 'inserted': 7, 'updated': 0, 'skipped': 17480, 'errors': 0}\n2026-02-02 14:18:47 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-7790-20260202-141847\n2026-02-02 14:18:47 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-02 14:18:47 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:18:47 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 9, 'inserted': 2, 'updated': 0, 'skipped': 7, 'errors': 0}\n2026-02-02 14:18:47 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-7791-20260202-141847\n2026-02-02 14:18:47 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-02 14:18:47 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:19:29 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8126, 'inserted': 3, 'updated': 0, 'skipped': 8123, 'errors': 0}\n2026-02-02 14:19:29 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-7792-20260202-141929\n2026-02-02 14:19:29 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-02 14:19:29 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:19:54 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11805, 'inserted': 4, 'updated': 0, 'skipped': 11801, 'errors': 0}\n2026-02-02 14:19:54 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-7793-20260202-141954\n2026-02-02 14:19:54 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-02 14:19:54 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:19:55 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 10, 'inserted': 4, 'updated': 0, 'skipped': 6, 'errors': 0}\n2026-02-02 14:19:55 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-7794-20260202-141955\n2026-02-02 14:19:55 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-02 14:19:55 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:19:56 [ERROR] etl_billiards: ODS_MEMBER_CARD ODS 任务失败\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 14:19:56 [ERROR] etl_billiards: 任务 ODS_MEMBER_CARD 失败: 错误: 整数超出范围\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 112, in run_tasks\n self._run_single_task(task_code, run_uuid, store_id)\n ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 168, in _run_single_task\n result, _ = self._execute_ods_record_and_load(task_code, cursor_data, fetch_dir, run_id)\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 297, in _execute_ods_record_and_load\n result = task.execute(cursor_data)\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 14:19:56 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7795-20260202-141956\n2026-02-02 14:19:56 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-02 14:19:56 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7795-20260202-141956\n2026-02-02 14:19:56 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-02 10:16:57+08:00 ~ 2026-02-02 16:16:57+08:00]\n2026-02-02 14:19:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-02 14:19:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.49s\n2026-02-02 14:19:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-02 14:19:57 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.47s\n2026-02-02 14:19:57 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-02 14:19:57 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.26s\n2026-02-02 14:19:57 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-02 14:19:57 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.22s\n2026-02-02 14:19:57 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-02 14:19:57 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.18s\n2026-02-02 14:19:57 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-02 14:19:58 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.20s\n2026-02-02 14:19:58 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-02 14:19:58 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.25s\n2026-02-02 14:19:58 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-02 14:19:58 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.22s\n2026-02-02 14:19:58 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-02 14:19:58 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.36s\n2026-02-02 14:19:58 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-02 14:19:59 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.59s\n2026-02-02 14:19:59 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-02 14:19:59 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.21s\n2026-02-02 14:19:59 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-02 14:19:59 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.20s\n2026-02-02 14:19:59 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-02 14:20:00 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.26s\n2026-02-02 14:20:00 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-02 14:20:00 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.27s\n2026-02-02 14:20:00 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-02 14:20:00 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.18s\n2026-02-02 14:20:00 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-02 14:20:00 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.18s\n2026-02-02 14:20:00 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-02 14:20:01 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.19s\n2026-02-02 14:20:01 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-02 14:20:01 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.23s\n2026-02-02 14:20:01 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-02 14:20:01 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.24s\n2026-02-02 14:20:01 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-02 14:20:01 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.22s\n2026-02-02 14:20:01 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-02 14:20:01 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.22s\n2026-02-02 14:20:01 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-02 14:20:02 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.20s\n2026-02-02 14:20:02 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-02 14:20:02 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.20s\n2026-02-02 14:20:02 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-02 14:20:02 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.22s\n2026-02-02 14:20:02 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-02 14:20:02 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.24s\n2026-02-02 14:20:02 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-02 14:20:03 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.26s\n2026-02-02 14:20:03 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-02 14:20:03 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.23s\n2026-02-02 14:20:03 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-02 14:20:03 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.20s\n2026-02-02 14:20:03 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-02 14:20:03 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.20s\n2026-02-02 14:20:03 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-02 14:20:03 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.21s\n2026-02-02 14:20:03 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-02 14:20:04 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.21s\n2026-02-02 14:20:04 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-02 14:20:04 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.23s\n2026-02-02 14:20:04 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-02 14:20:04 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.22s\n2026-02-02 14:20:04 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 14:20:04 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.21s\n2026-02-02 14:20:04 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 14:20:05 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.22s\n2026-02-02 14:20:05 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-02 14:20:05 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.20s\n2026-02-02 14:20:05 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-02 14:20:05 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.20s\n2026-02-02 14:20:05 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-02 14:20:05 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.24s\n2026-02-02 14:20:05 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-02 14:20:05 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.20s\n2026-02-02 14:20:05 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-02 14:20:06 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.20s\n2026-02-02 14:20:06 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 7, 'skipped': 67}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 6, 'skipped': 68}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 2, 'skipped': 170}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 2, 'skipped': 170}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 3, 'updated': 0, 'processed': 3}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 3, 'updated': 0, 'processed': 3}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 3, 'updated': 0, 'processed': 3}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 3, 'updated': 0, 'processed': 3}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 7, 'updated': 0, 'processed': 7}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 7, 'updated': 0, 'processed': 7}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-02 14:20:06 [INFO] etl_billiards: 所有任务执行完成\n2026-02-02 14:20:06 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "101350da",
"executed_at": "2026-02-02T13:16:56.744049",
"status": "success",
"exit_code": 0,
"duration_seconds": 184.542973,
"summary": "【DWD 装载】维表新增: 0条, 维表更新: 7条, 事实表新增: 16条, 事实表更新: 0条\n 维表: dim_table: +0, ~4, dim_store_goods: +0, ~3\n 事实表: dwd_settlement_head: +4, ~0, dwd_table_fee_log: +3, ~0, dwd_groupbuy_redemption: +3, ~0, dwd_platform_coupon_redemption: +2, ~0, dwd_payment: +4, ~0\n【错误】2026-02-02 13:16:57 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-02 13:16:58 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0; 2026-02-02 13:16:59 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-02 11:16:56 --window-end 2026-02-02 13:16:56\n2026-02-02 13:16:57 [INFO] etl_billiards: 配置加载完成\n2026-02-02 13:16:57 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-02 13:16:57 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-02 13:16:57 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=1307568bb1df4a41b94fc5fe912b388e\n2026-02-02 13:16:57 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-7748-20260202-131657\n2026-02-02 13:16:57 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-02 13:16:57 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:16:57 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-02 13:16:58 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-7749-20260202-131658\n2026-02-02 13:16:58 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-02 13:16:58 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:16:58 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 13:16:58 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-7750-20260202-131658\n2026-02-02 13:16:58 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-02 13:16:58 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:16:59 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-02 13:16:59 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-7751-20260202-131659\n2026-02-02 13:16:59 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:16:59 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00] 未发现需要抓取的小票\n2026-02-02 13:16:59 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-02 13:16:59 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-7752-20260202-131659\n2026-02-02 13:16:59 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-02 13:16:59 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:17:00 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-02 13:17:00 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-7753-20260202-131700\n2026-02-02 13:17:00 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-02 13:17:00 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:17:00 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 13:17:00 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-7754-20260202-131700\n2026-02-02 13:17:00 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-02 13:17:00 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:17:02 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-02 13:17:03 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-7755-20260202-131703\n2026-02-02 13:17:03 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-02 13:17:03 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:17:03 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 13:17:03 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-7756-20260202-131703\n2026-02-02 13:17:03 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-02 13:17:03 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:17:03 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 3, 'updated': 0, 'skipped': 169, 'errors': 0}\n2026-02-02 13:17:04 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-7757-20260202-131704\n2026-02-02 13:17:04 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-02 13:17:04 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:17:25 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10026, 'inserted': 3, 'updated': 0, 'skipped': 10023, 'errors': 0}\n2026-02-02 13:17:25 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-7758-20260202-131725\n2026-02-02 13:17:25 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-02 13:17:25 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:17:32 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1777, 'inserted': 0, 'updated': 0, 'skipped': 1777, 'errors': 0}\n2026-02-02 13:17:32 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-7759-20260202-131732\n2026-02-02 13:17:32 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-02 13:17:32 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:17:59 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2451, 'inserted': 0, 'updated': 0, 'skipped': 2451, 'errors': 0}\n2026-02-02 13:18:00 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-7760-20260202-131800\n2026-02-02 13:18:00 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-02 13:18:00 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:18:00 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 5, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-02 13:18:00 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-7761-20260202-131800\n2026-02-02 13:18:00 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-02 13:18:00 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:18:01 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 13:18:01 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-7762-20260202-131801\n2026-02-02 13:18:01 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-02 13:18:01 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:18:03 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 3, 'updated': 0, 'skipped': 169, 'errors': 0}\n2026-02-02 13:18:03 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-7763-20260202-131803\n2026-02-02 13:18:03 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-02 13:18:03 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:18:04 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 40, 'inserted': 0, 'updated': 0, 'skipped': 40, 'errors': 0}\n2026-02-02 13:18:04 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-7764-20260202-131804\n2026-02-02 13:18:04 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-02 13:18:04 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:18:05 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-02 13:18:05 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-7765-20260202-131805\n2026-02-02 13:18:05 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-02 13:18:05 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:18:46 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17480, 'inserted': 2, 'updated': 0, 'skipped': 17478, 'errors': 0}\n2026-02-02 13:18:46 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-7766-20260202-131846\n2026-02-02 13:18:46 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-02 13:18:46 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:18:46 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 7, 'inserted': 5, 'updated': 0, 'skipped': 2, 'errors': 0}\n2026-02-02 13:18:47 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-7767-20260202-131847\n2026-02-02 13:18:47 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-02 13:18:47 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:19:25 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8123, 'inserted': 3, 'updated': 0, 'skipped': 8120, 'errors': 0}\n2026-02-02 13:19:26 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-7768-20260202-131926\n2026-02-02 13:19:26 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-02 13:19:26 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:19:50 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11801, 'inserted': 4, 'updated': 0, 'skipped': 11797, 'errors': 0}\n2026-02-02 13:19:50 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-7769-20260202-131950\n2026-02-02 13:19:50 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-02 13:19:50 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:19:50 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 6, 'inserted': 4, 'updated': 0, 'skipped': 2, 'errors': 0}\n2026-02-02 13:19:51 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-7770-20260202-131951\n2026-02-02 13:19:51 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-02 13:19:51 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:19:51 [ERROR] etl_billiards: ODS_MEMBER_CARD ODS 任务失败\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 13:19:51 [ERROR] etl_billiards: 任务 ODS_MEMBER_CARD 失败: 错误: 整数超出范围\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 112, in run_tasks\n self._run_single_task(task_code, run_uuid, store_id)\n ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 168, in _run_single_task\n result, _ = self._execute_ods_record_and_load(task_code, cursor_data, fetch_dir, run_id)\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 297, in _execute_ods_record_and_load\n result = task.execute(cursor_data)\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 13:19:52 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7771-20260202-131952\n2026-02-02 13:19:52 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-02 13:19:52 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7771-20260202-131952\n2026-02-02 13:19:52 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-02 09:16:56+08:00 ~ 2026-02-02 15:16:56+08:00]\n2026-02-02 13:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-02 13:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.36s\n2026-02-02 13:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-02 13:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.49s\n2026-02-02 13:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-02 13:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.23s\n2026-02-02 13:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-02 13:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.22s\n2026-02-02 13:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-02 13:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.18s\n2026-02-02 13:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-02 13:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.19s\n2026-02-02 13:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-02 13:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.26s\n2026-02-02 13:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-02 13:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.21s\n2026-02-02 13:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-02 13:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.36s\n2026-02-02 13:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-02 13:19:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.57s\n2026-02-02 13:19:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-02 13:19:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.19s\n2026-02-02 13:19:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-02 13:19:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.19s\n2026-02-02 13:19:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-02 13:19:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.25s\n2026-02-02 13:19:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-02 13:19:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.24s\n2026-02-02 13:19:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-02 13:19:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.16s\n2026-02-02 13:19:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-02 13:19:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.17s\n2026-02-02 13:19:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-02 13:19:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.17s\n2026-02-02 13:19:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-02 13:19:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.22s\n2026-02-02 13:19:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-02 13:19:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.23s\n2026-02-02 13:19:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-02 13:19:57 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.21s\n2026-02-02 13:19:57 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-02 13:19:57 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.20s\n2026-02-02 13:19:57 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-02 13:19:57 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.19s\n2026-02-02 13:19:57 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-02 13:19:57 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.19s\n2026-02-02 13:19:57 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-02 13:19:57 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.20s\n2026-02-02 13:19:57 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-02 13:19:58 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.20s\n2026-02-02 13:19:58 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-02 13:19:58 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.25s\n2026-02-02 13:19:58 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-02 13:19:58 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.20s\n2026-02-02 13:19:58 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-02 13:19:58 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.19s\n2026-02-02 13:19:58 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-02 13:19:58 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.19s\n2026-02-02 13:19:58 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-02 13:19:59 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.19s\n2026-02-02 13:19:59 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-02 13:19:59 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.19s\n2026-02-02 13:19:59 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-02 13:19:59 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.21s\n2026-02-02 13:19:59 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-02 13:19:59 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.21s\n2026-02-02 13:19:59 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 13:19:59 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.20s\n2026-02-02 13:19:59 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 13:20:00 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.20s\n2026-02-02 13:20:00 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-02 13:20:00 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.19s\n2026-02-02 13:20:00 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-02 13:20:00 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.19s\n2026-02-02 13:20:00 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-02 13:20:00 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.22s\n2026-02-02 13:20:00 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-02 13:20:00 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.19s\n2026-02-02 13:20:00 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-02 13:20:01 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.19s\n2026-02-02 13:20:01 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 4, 'skipped': 70}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 3, 'skipped': 71}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 3, 'skipped': 169}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 3, 'skipped': 169}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 3, 'updated': 0, 'processed': 3}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 3, 'updated': 0, 'processed': 3}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 3, 'updated': 0, 'processed': 3}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 3, 'updated': 0, 'processed': 3}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 2, 'updated': 0, 'processed': 2}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 2, 'updated': 0, 'processed': 2}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-02 13:20:01 [INFO] etl_billiards: 所有任务执行完成\n2026-02-02 13:20:01 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "9fec4a10",
"executed_at": "2026-02-02T12:16:56.398831",
"status": "success",
"exit_code": 0,
"duration_seconds": 180.610921,
"summary": "【DWD 装载】维表新增: 0条, 维表更新: 7条, 事实表新增: 11条, 事实表更新: 0条\n 维表: dim_table: +0, ~4, dim_member: +0, ~1, dim_store_goods: +0, ~2\n 事实表: dwd_settlement_head: +2, ~0, dwd_table_fee_log: +1, ~0, dwd_member_balance_change: +1, ~0, dwd_groupbuy_redemption: +1, ~0, dwd_platform_coupon_redemption: +4, ~0, dwd_payment: +2, ~0\n【错误】2026-02-02 12:16:57 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-02 12:16:57 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0; 2026-02-02 12:16:58 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-02 10:16:56 --window-end 2026-02-02 12:16:56\n2026-02-02 12:16:56 [INFO] etl_billiards: 配置加载完成\n2026-02-02 12:16:56 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-02 12:16:56 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-02 12:16:57 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=d33c7a9f3e324b3e814d23c73038b86b\n2026-02-02 12:16:57 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-7724-20260202-121657\n2026-02-02 12:16:57 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-02 12:16:57 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:16:57 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-02 12:16:57 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-7725-20260202-121657\n2026-02-02 12:16:57 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-02 12:16:57 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:16:57 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 12:16:58 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-7726-20260202-121658\n2026-02-02 12:16:58 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-02 12:16:58 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:16:58 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-02 12:16:58 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-7727-20260202-121658\n2026-02-02 12:16:58 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:16:59 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00] 未发现需要抓取的小票\n2026-02-02 12:16:59 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-02 12:16:59 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-7728-20260202-121659\n2026-02-02 12:16:59 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-02 12:16:59 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:16:59 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-02 12:17:00 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-7729-20260202-121700\n2026-02-02 12:17:00 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-02 12:17:00 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:17:00 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 12:17:00 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-7730-20260202-121700\n2026-02-02 12:17:00 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-02 12:17:00 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:17:02 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 1, 'updated': 0, 'skipped': 555, 'errors': 0}\n2026-02-02 12:17:02 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-7731-20260202-121702\n2026-02-02 12:17:02 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-02 12:17:02 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:17:02 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 12:17:03 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-7732-20260202-121703\n2026-02-02 12:17:03 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-02 12:17:03 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:17:03 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 2, 'updated': 0, 'skipped': 170, 'errors': 0}\n2026-02-02 12:17:03 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-7733-20260202-121703\n2026-02-02 12:17:03 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-02 12:17:03 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:17:24 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10023, 'inserted': 1, 'updated': 0, 'skipped': 10022, 'errors': 0}\n2026-02-02 12:17:25 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-7734-20260202-121725\n2026-02-02 12:17:25 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-02 12:17:25 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:17:31 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1777, 'inserted': 0, 'updated': 0, 'skipped': 1777, 'errors': 0}\n2026-02-02 12:17:31 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-7735-20260202-121731\n2026-02-02 12:17:31 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-02 12:17:31 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:17:59 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2451, 'inserted': 1, 'updated': 0, 'skipped': 2450, 'errors': 0}\n2026-02-02 12:17:59 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-7736-20260202-121759\n2026-02-02 12:17:59 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-02 12:17:59 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:18:00 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 4, 'updated': 0, 'skipped': 70, 'errors': 0}\n2026-02-02 12:18:00 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-7737-20260202-121800\n2026-02-02 12:18:00 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-02 12:18:00 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:18:00 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 12:18:00 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-7738-20260202-121800\n2026-02-02 12:18:00 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-02 12:18:00 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:18:01 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 2, 'updated': 0, 'skipped': 170, 'errors': 0}\n2026-02-02 12:18:01 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-7739-20260202-121801\n2026-02-02 12:18:01 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-02 12:18:01 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:18:01 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 40, 'inserted': 0, 'updated': 0, 'skipped': 40, 'errors': 0}\n2026-02-02 12:18:02 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-7740-20260202-121802\n2026-02-02 12:18:02 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-02 12:18:02 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:18:03 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-02 12:18:03 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-7741-20260202-121803\n2026-02-02 12:18:03 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-02 12:18:03 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:18:43 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17478, 'inserted': 4, 'updated': 0, 'skipped': 17474, 'errors': 0}\n2026-02-02 12:18:43 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-7742-20260202-121843\n2026-02-02 12:18:43 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-02 12:18:43 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:18:43 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 2, 'inserted': 2, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 12:18:44 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-7743-20260202-121844\n2026-02-02 12:18:44 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-02 12:18:44 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:19:21 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8120, 'inserted': 1, 'updated': 0, 'skipped': 8119, 'errors': 0}\n2026-02-02 12:19:21 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-7744-20260202-121921\n2026-02-02 12:19:21 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-02 12:19:21 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:19:45 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11797, 'inserted': 2, 'updated': 0, 'skipped': 11795, 'errors': 0}\n2026-02-02 12:19:45 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-7745-20260202-121945\n2026-02-02 12:19:45 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-02 12:19:45 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:19:46 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 2, 'inserted': 2, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 12:19:46 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-7746-20260202-121946\n2026-02-02 12:19:46 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-02 12:19:46 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:19:47 [ERROR] etl_billiards: ODS_MEMBER_CARD ODS 任务失败\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 12:19:47 [ERROR] etl_billiards: 任务 ODS_MEMBER_CARD 失败: 错误: 整数超出范围\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 112, in run_tasks\n self._run_single_task(task_code, run_uuid, store_id)\n ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 168, in _run_single_task\n result, _ = self._execute_ods_record_and_load(task_code, cursor_data, fetch_dir, run_id)\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 297, in _execute_ods_record_and_load\n result = task.execute(cursor_data)\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 12:19:47 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7747-20260202-121947\n2026-02-02 12:19:47 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-02 12:19:47 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7747-20260202-121947\n2026-02-02 12:19:47 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-02 08:16:56+08:00 ~ 2026-02-02 14:16:56+08:00]\n2026-02-02 12:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-02 12:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.35s\n2026-02-02 12:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-02 12:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.44s\n2026-02-02 12:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-02 12:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.24s\n2026-02-02 12:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-02 12:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.22s\n2026-02-02 12:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-02 12:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.18s\n2026-02-02 12:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-02 12:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.19s\n2026-02-02 12:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-02 12:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.27s\n2026-02-02 12:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-02 12:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.21s\n2026-02-02 12:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-02 12:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.34s\n2026-02-02 12:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-02 12:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.54s\n2026-02-02 12:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-02 12:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.20s\n2026-02-02 12:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-02 12:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.19s\n2026-02-02 12:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-02 12:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.25s\n2026-02-02 12:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-02 12:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.26s\n2026-02-02 12:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-02 12:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.17s\n2026-02-02 12:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-02 12:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.17s\n2026-02-02 12:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-02 12:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.17s\n2026-02-02 12:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-02 12:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.22s\n2026-02-02 12:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-02 12:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.22s\n2026-02-02 12:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-02 12:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.22s\n2026-02-02 12:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-02 12:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.44s\n2026-02-02 12:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-02 12:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.19s\n2026-02-02 12:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-02 12:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.19s\n2026-02-02 12:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-02 12:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.24s\n2026-02-02 12:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-02 12:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.21s\n2026-02-02 12:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-02 12:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.24s\n2026-02-02 12:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-02 12:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.20s\n2026-02-02 12:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-02 12:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.19s\n2026-02-02 12:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-02 12:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.19s\n2026-02-02 12:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-02 12:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.21s\n2026-02-02 12:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-02 12:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.19s\n2026-02-02 12:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-02 12:19:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.20s\n2026-02-02 12:19:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-02 12:19:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.20s\n2026-02-02 12:19:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 12:19:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.20s\n2026-02-02 12:19:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 12:19:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.20s\n2026-02-02 12:19:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-02 12:19:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.21s\n2026-02-02 12:19:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-02 12:19:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.25s\n2026-02-02 12:19:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-02 12:19:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.23s\n2026-02-02 12:19:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-02 12:19:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.18s\n2026-02-02 12:19:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-02 12:19:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.18s\n2026-02-02 12:19:56 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 4, 'skipped': 70}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 3, 'skipped': 71}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 1, 'skipped': 555}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 2, 'skipped': 170}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 2, 'skipped': 170}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 2, 'updated': 0, 'processed': 2}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 2, 'updated': 0, 'processed': 2}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 1, 'updated': 0, 'processed': 1}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 1, 'updated': 0, 'processed': 1}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 1, 'updated': 0, 'processed': 1}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 1, 'updated': 0, 'processed': 1}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 1, 'updated': 0, 'processed': 1}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 1, 'updated': 0, 'processed': 1}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 2, 'updated': 0, 'processed': 2}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-02 12:19:56 [INFO] etl_billiards: 所有任务执行完成\n2026-02-02 12:19:56 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "25f2f24e",
"executed_at": "2026-02-02T11:16:55.990890",
"status": "success",
"exit_code": 0,
"duration_seconds": 176.757487,
"summary": "【DWD 装载】维表新增: 0条, 维表更新: 1条, 事实表新增: 1条, 事实表更新: 0条\n 维表: dim_table: +0, ~1\n 事实表: dwd_platform_coupon_redemption: +1, ~0\n【错误】2026-02-02 11:16:57 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-02 11:16:57 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0; 2026-02-02 11:16:58 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-02 09:16:55 --window-end 2026-02-02 11:16:55\n2026-02-02 11:16:56 [INFO] etl_billiards: 配置加载完成\n2026-02-02 11:16:56 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-02 11:16:56 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-02 11:16:56 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=4700843076ae45c1bba1a2ad781cb7f0\n2026-02-02 11:16:56 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-7700-20260202-111656\n2026-02-02 11:16:56 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-02 11:16:56 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:16:57 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-02 11:16:57 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-7701-20260202-111657\n2026-02-02 11:16:57 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-02 11:16:57 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:16:57 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 11:16:57 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-7702-20260202-111657\n2026-02-02 11:16:57 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-02 11:16:57 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:16:58 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-02 11:16:58 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-7703-20260202-111658\n2026-02-02 11:16:58 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:16:58 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00] 未发现需要抓取的小票\n2026-02-02 11:16:58 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-02 11:16:59 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-7704-20260202-111659\n2026-02-02 11:16:59 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-02 11:16:59 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:16:59 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-02 11:16:59 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-7705-20260202-111659\n2026-02-02 11:16:59 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-02 11:16:59 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:16:59 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 11:17:00 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-7706-20260202-111700\n2026-02-02 11:17:00 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-02 11:17:00 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:17:02 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-02 11:17:02 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-7707-20260202-111702\n2026-02-02 11:17:02 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-02 11:17:02 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:17:02 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 11:17:02 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-7708-20260202-111702\n2026-02-02 11:17:02 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-02 11:17:02 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:17:03 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-02 11:17:03 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-7709-20260202-111703\n2026-02-02 11:17:03 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-02 11:17:03 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:17:24 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10022, 'inserted': 0, 'updated': 0, 'skipped': 10022, 'errors': 0}\n2026-02-02 11:17:24 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-7710-20260202-111724\n2026-02-02 11:17:24 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-02 11:17:24 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:17:31 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1777, 'inserted': 0, 'updated': 0, 'skipped': 1777, 'errors': 0}\n2026-02-02 11:17:31 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-7711-20260202-111731\n2026-02-02 11:17:31 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-02 11:17:31 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:17:58 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2450, 'inserted': 0, 'updated': 0, 'skipped': 2450, 'errors': 0}\n2026-02-02 11:17:58 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-7712-20260202-111758\n2026-02-02 11:17:58 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-02 11:17:58 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:17:58 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 1, 'updated': 0, 'skipped': 73, 'errors': 0}\n2026-02-02 11:17:59 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-7713-20260202-111759\n2026-02-02 11:17:59 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-02 11:17:59 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:17:59 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 11:17:59 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-7714-20260202-111759\n2026-02-02 11:17:59 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-02 11:17:59 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:18:00 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-02 11:18:01 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-7715-20260202-111801\n2026-02-02 11:18:01 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-02 11:18:01 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:18:01 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 40, 'inserted': 0, 'updated': 0, 'skipped': 40, 'errors': 0}\n2026-02-02 11:18:01 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-7716-20260202-111801\n2026-02-02 11:18:01 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-02 11:18:01 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:18:02 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-02 11:18:03 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-7717-20260202-111803\n2026-02-02 11:18:03 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-02 11:18:03 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:18:41 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17474, 'inserted': 1, 'updated': 0, 'skipped': 17473, 'errors': 0}\n2026-02-02 11:18:41 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-7718-20260202-111841\n2026-02-02 11:18:41 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-02 11:18:41 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:18:42 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 11:18:42 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-7719-20260202-111842\n2026-02-02 11:18:42 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-02 11:18:42 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:19:18 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8119, 'inserted': 0, 'updated': 0, 'skipped': 8119, 'errors': 0}\n2026-02-02 11:19:19 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-7720-20260202-111919\n2026-02-02 11:19:19 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-02 11:19:19 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:19:42 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11795, 'inserted': 0, 'updated': 0, 'skipped': 11795, 'errors': 0}\n2026-02-02 11:19:42 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-7721-20260202-111942\n2026-02-02 11:19:42 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-02 11:19:42 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:19:43 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 11:19:43 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-7722-20260202-111943\n2026-02-02 11:19:43 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-02 11:19:43 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:19:43 [ERROR] etl_billiards: ODS_MEMBER_CARD ODS 任务失败\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 11:19:44 [ERROR] etl_billiards: 任务 ODS_MEMBER_CARD 失败: 错误: 整数超出范围\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 112, in run_tasks\n self._run_single_task(task_code, run_uuid, store_id)\n ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 168, in _run_single_task\n result, _ = self._execute_ods_record_and_load(task_code, cursor_data, fetch_dir, run_id)\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 297, in _execute_ods_record_and_load\n result = task.execute(cursor_data)\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 11:19:44 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7723-20260202-111944\n2026-02-02 11:19:44 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-02 11:19:44 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7723-20260202-111944\n2026-02-02 11:19:44 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-02 07:16:55+08:00 ~ 2026-02-02 13:16:55+08:00]\n2026-02-02 11:19:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-02 11:19:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.35s\n2026-02-02 11:19:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-02 11:19:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.44s\n2026-02-02 11:19:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-02 11:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.20s\n2026-02-02 11:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-02 11:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.24s\n2026-02-02 11:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-02 11:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.17s\n2026-02-02 11:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-02 11:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.18s\n2026-02-02 11:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-02 11:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.22s\n2026-02-02 11:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-02 11:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.20s\n2026-02-02 11:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-02 11:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.33s\n2026-02-02 11:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-02 11:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.54s\n2026-02-02 11:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-02 11:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.19s\n2026-02-02 11:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-02 11:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.18s\n2026-02-02 11:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-02 11:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.19s\n2026-02-02 11:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-02 11:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.19s\n2026-02-02 11:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-02 11:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.15s\n2026-02-02 11:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-02 11:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.16s\n2026-02-02 11:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-02 11:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.16s\n2026-02-02 11:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-02 11:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.21s\n2026-02-02 11:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-02 11:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.21s\n2026-02-02 11:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-02 11:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.19s\n2026-02-02 11:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-02 11:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.19s\n2026-02-02 11:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-02 11:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.18s\n2026-02-02 11:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-02 11:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.18s\n2026-02-02 11:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-02 11:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.19s\n2026-02-02 11:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-02 11:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.19s\n2026-02-02 11:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-02 11:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.23s\n2026-02-02 11:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-02 11:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.18s\n2026-02-02 11:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-02 11:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.18s\n2026-02-02 11:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-02 11:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.20s\n2026-02-02 11:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-02 11:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.18s\n2026-02-02 11:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-02 11:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.18s\n2026-02-02 11:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-02 11:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.19s\n2026-02-02 11:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-02 11:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.19s\n2026-02-02 11:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 11:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.19s\n2026-02-02 11:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 11:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.19s\n2026-02-02 11:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-02 11:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.18s\n2026-02-02 11:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-02 11:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.18s\n2026-02-02 11:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-02 11:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.21s\n2026-02-02 11:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-02 11:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.18s\n2026-02-02 11:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-02 11:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.18s\n2026-02-02 11:19:52 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 1, 'skipped': 73}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 1, 'skipped': 73}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 1, 'updated': 0, 'processed': 1}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 1, 'updated': 0, 'processed': 1}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-02 11:19:52 [INFO] etl_billiards: 所有任务执行完成\n2026-02-02 11:19:52 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "0458ffd6",
"executed_at": "2026-02-02T10:16:55.681120",
"status": "success",
"exit_code": 0,
"duration_seconds": 180.120778,
"summary": "【错误】2026-02-02 10:16:57 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-02 10:16:57 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0; 2026-02-02 10:16:58 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-02 08:16:55 --window-end 2026-02-02 10:16:55\n2026-02-02 10:16:56 [INFO] etl_billiards: 配置加载完成\n2026-02-02 10:16:56 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-02 10:16:56 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-02 10:16:56 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=7e2a96ee2ca84282929200ccf2fddb66\n2026-02-02 10:16:56 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-7676-20260202-101656\n2026-02-02 10:16:56 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-02 10:16:56 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:16:57 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-02 10:16:57 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-7677-20260202-101657\n2026-02-02 10:16:57 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-02 10:16:57 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:16:57 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 10:16:57 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-7678-20260202-101657\n2026-02-02 10:16:57 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-02 10:16:57 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:16:58 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-02 10:16:58 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-7679-20260202-101658\n2026-02-02 10:16:58 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:16:58 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00] 未发现需要抓取的小票\n2026-02-02 10:16:58 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-02 10:16:59 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-7680-20260202-101659\n2026-02-02 10:16:59 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-02 10:16:59 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:16:59 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-02 10:16:59 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-7681-20260202-101659\n2026-02-02 10:16:59 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-02 10:16:59 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:16:59 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 10:17:00 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-7682-20260202-101700\n2026-02-02 10:17:00 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-02 10:17:00 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:17:02 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-02 10:17:02 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-7683-20260202-101702\n2026-02-02 10:17:02 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-02 10:17:02 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:17:02 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 10:17:02 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-7684-20260202-101702\n2026-02-02 10:17:02 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-02 10:17:02 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:17:03 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-02 10:17:03 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-7685-20260202-101703\n2026-02-02 10:17:03 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-02 10:17:03 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:17:26 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10022, 'inserted': 0, 'updated': 0, 'skipped': 10022, 'errors': 0}\n2026-02-02 10:17:26 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-7686-20260202-101726\n2026-02-02 10:17:26 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-02 10:17:26 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:17:32 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1777, 'inserted': 0, 'updated': 0, 'skipped': 1777, 'errors': 0}\n2026-02-02 10:17:32 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-7687-20260202-101732\n2026-02-02 10:17:32 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-02 10:17:32 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:18:00 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2450, 'inserted': 0, 'updated': 0, 'skipped': 2450, 'errors': 0}\n2026-02-02 10:18:01 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-7688-20260202-101801\n2026-02-02 10:18:01 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-02 10:18:01 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:18:01 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 0, 'updated': 0, 'skipped': 74, 'errors': 0}\n2026-02-02 10:18:01 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-7689-20260202-101801\n2026-02-02 10:18:01 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-02 10:18:01 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:18:02 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 10:18:02 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-7690-20260202-101802\n2026-02-02 10:18:02 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-02 10:18:02 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:18:03 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-02 10:18:03 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-7691-20260202-101803\n2026-02-02 10:18:03 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-02 10:18:03 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:18:04 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 40, 'inserted': 0, 'updated': 0, 'skipped': 40, 'errors': 0}\n2026-02-02 10:18:04 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-7692-20260202-101804\n2026-02-02 10:18:04 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-02 10:18:04 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:18:05 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-02 10:18:05 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-7693-20260202-101805\n2026-02-02 10:18:05 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-02 10:18:05 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:18:44 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17473, 'inserted': 0, 'updated': 0, 'skipped': 17473, 'errors': 0}\n2026-02-02 10:18:45 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-7694-20260202-101845\n2026-02-02 10:18:45 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-02 10:18:45 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:18:45 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 10:18:45 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-7695-20260202-101845\n2026-02-02 10:18:45 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-02 10:18:45 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:19:21 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8119, 'inserted': 0, 'updated': 0, 'skipped': 8119, 'errors': 0}\n2026-02-02 10:19:21 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-7696-20260202-101921\n2026-02-02 10:19:21 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-02 10:19:21 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:19:44 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11795, 'inserted': 0, 'updated': 0, 'skipped': 11795, 'errors': 0}\n2026-02-02 10:19:45 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-7697-20260202-101945\n2026-02-02 10:19:45 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-02 10:19:45 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:19:45 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 10:19:45 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-7698-20260202-101945\n2026-02-02 10:19:45 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-02 10:19:45 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:19:46 [ERROR] etl_billiards: ODS_MEMBER_CARD ODS 任务失败\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 10:19:46 [ERROR] etl_billiards: 任务 ODS_MEMBER_CARD 失败: 错误: 整数超出范围\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 112, in run_tasks\n self._run_single_task(task_code, run_uuid, store_id)\n ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 168, in _run_single_task\n result, _ = self._execute_ods_record_and_load(task_code, cursor_data, fetch_dir, run_id)\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 297, in _execute_ods_record_and_load\n result = task.execute(cursor_data)\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 10:19:46 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7699-20260202-101946\n2026-02-02 10:19:46 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-02 10:19:46 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7699-20260202-101946\n2026-02-02 10:19:46 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-02 06:16:55+08:00 ~ 2026-02-02 12:16:55+08:00]\n2026-02-02 10:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-02 10:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.43s\n2026-02-02 10:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-02 10:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.46s\n2026-02-02 10:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-02 10:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.17s\n2026-02-02 10:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-02 10:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.17s\n2026-02-02 10:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-02 10:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.17s\n2026-02-02 10:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-02 10:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.19s\n2026-02-02 10:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-02 10:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.25s\n2026-02-02 10:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-02 10:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.21s\n2026-02-02 10:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-02 10:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.36s\n2026-02-02 10:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-02 10:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.57s\n2026-02-02 10:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-02 10:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.19s\n2026-02-02 10:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-02 10:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.19s\n2026-02-02 10:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-02 10:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.20s\n2026-02-02 10:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-02 10:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.21s\n2026-02-02 10:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-02 10:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.16s\n2026-02-02 10:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-02 10:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.17s\n2026-02-02 10:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-02 10:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.17s\n2026-02-02 10:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-02 10:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.21s\n2026-02-02 10:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-02 10:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.21s\n2026-02-02 10:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-02 10:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.20s\n2026-02-02 10:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-02 10:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.20s\n2026-02-02 10:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-02 10:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.19s\n2026-02-02 10:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-02 10:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.18s\n2026-02-02 10:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-02 10:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.20s\n2026-02-02 10:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-02 10:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.22s\n2026-02-02 10:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-02 10:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.32s\n2026-02-02 10:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-02 10:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.22s\n2026-02-02 10:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-02 10:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.20s\n2026-02-02 10:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-02 10:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.23s\n2026-02-02 10:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-02 10:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.20s\n2026-02-02 10:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-02 10:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.20s\n2026-02-02 10:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-02 10:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.24s\n2026-02-02 10:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-02 10:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.20s\n2026-02-02 10:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 10:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.20s\n2026-02-02 10:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 10:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.21s\n2026-02-02 10:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-02 10:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.19s\n2026-02-02 10:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-02 10:19:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.19s\n2026-02-02 10:19:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-02 10:19:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.22s\n2026-02-02 10:19:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-02 10:19:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.18s\n2026-02-02 10:19:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-02 10:19:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.20s\n2026-02-02 10:19:55 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-02 10:19:55 [INFO] etl_billiards: 所有任务执行完成\n2026-02-02 10:19:55 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "62567464",
"executed_at": "2026-02-02T09:16:55.297784",
"status": "success",
"exit_code": 0,
"duration_seconds": 178.074014,
"summary": "【错误】2026-02-02 09:16:56 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-02 09:16:56 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0; 2026-02-02 09:16:57 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-02 07:16:55 --window-end 2026-02-02 09:16:55\n2026-02-02 09:16:55 [INFO] etl_billiards: 配置加载完成\n2026-02-02 09:16:55 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-02 09:16:55 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-02 09:16:55 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=68003b7d5ec141f88ab5497510fc6f47\n2026-02-02 09:16:55 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-7652-20260202-091655\n2026-02-02 09:16:55 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-02 09:16:55 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:16:56 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-02 09:16:56 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-7653-20260202-091656\n2026-02-02 09:16:56 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-02 09:16:56 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:16:56 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 09:16:57 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-7654-20260202-091657\n2026-02-02 09:16:57 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-02 09:16:57 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:16:57 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-02 09:16:57 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-7655-20260202-091657\n2026-02-02 09:16:57 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:16:58 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00] 未发现需要抓取的小票\n2026-02-02 09:16:58 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-02 09:16:58 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-7656-20260202-091658\n2026-02-02 09:16:58 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-02 09:16:58 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:16:58 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-02 09:16:59 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-7657-20260202-091659\n2026-02-02 09:16:59 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-02 09:16:59 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:16:59 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 09:16:59 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-7658-20260202-091659\n2026-02-02 09:16:59 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-02 09:16:59 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:17:01 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-02 09:17:02 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-7659-20260202-091702\n2026-02-02 09:17:02 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-02 09:17:02 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:17:02 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 09:17:02 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-7660-20260202-091702\n2026-02-02 09:17:02 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-02 09:17:02 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:17:02 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-02 09:17:03 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-7661-20260202-091703\n2026-02-02 09:17:03 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-02 09:17:03 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:17:25 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10022, 'inserted': 0, 'updated': 0, 'skipped': 10022, 'errors': 0}\n2026-02-02 09:17:25 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-7662-20260202-091725\n2026-02-02 09:17:25 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-02 09:17:25 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:17:32 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1777, 'inserted': 0, 'updated': 0, 'skipped': 1777, 'errors': 0}\n2026-02-02 09:17:32 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-7663-20260202-091732\n2026-02-02 09:17:32 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-02 09:17:32 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:18:00 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2450, 'inserted': 0, 'updated': 0, 'skipped': 2450, 'errors': 0}\n2026-02-02 09:18:00 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-7664-20260202-091800\n2026-02-02 09:18:00 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-02 09:18:00 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:18:01 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 0, 'updated': 0, 'skipped': 74, 'errors': 0}\n2026-02-02 09:18:01 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-7665-20260202-091801\n2026-02-02 09:18:01 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-02 09:18:01 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:18:01 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 09:18:02 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-7666-20260202-091802\n2026-02-02 09:18:02 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-02 09:18:02 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:18:02 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-02 09:18:03 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-7667-20260202-091803\n2026-02-02 09:18:03 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-02 09:18:03 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:18:03 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 40, 'inserted': 0, 'updated': 0, 'skipped': 40, 'errors': 0}\n2026-02-02 09:18:03 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-7668-20260202-091803\n2026-02-02 09:18:03 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-02 09:18:03 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:18:04 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-02 09:18:04 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-7669-20260202-091804\n2026-02-02 09:18:04 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-02 09:18:04 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:18:43 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17473, 'inserted': 0, 'updated': 0, 'skipped': 17473, 'errors': 0}\n2026-02-02 09:18:43 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-7670-20260202-091843\n2026-02-02 09:18:43 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-02 09:18:43 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:18:44 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 09:18:44 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-7671-20260202-091844\n2026-02-02 09:18:44 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-02 09:18:44 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:19:19 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8119, 'inserted': 0, 'updated': 0, 'skipped': 8119, 'errors': 0}\n2026-02-02 09:19:19 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-7672-20260202-091919\n2026-02-02 09:19:19 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-02 09:19:19 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:19:43 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11795, 'inserted': 0, 'updated': 0, 'skipped': 11795, 'errors': 0}\n2026-02-02 09:19:43 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-7673-20260202-091943\n2026-02-02 09:19:43 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-02 09:19:43 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:19:43 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 09:19:43 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-7674-20260202-091943\n2026-02-02 09:19:43 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-02 09:19:43 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:19:44 [ERROR] etl_billiards: ODS_MEMBER_CARD ODS 任务失败\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 09:19:44 [ERROR] etl_billiards: 任务 ODS_MEMBER_CARD 失败: 错误: 整数超出范围\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 112, in run_tasks\n self._run_single_task(task_code, run_uuid, store_id)\n ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 168, in _run_single_task\n result, _ = self._execute_ods_record_and_load(task_code, cursor_data, fetch_dir, run_id)\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 297, in _execute_ods_record_and_load\n result = task.execute(cursor_data)\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 09:19:44 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7675-20260202-091944\n2026-02-02 09:19:44 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-02 09:19:44 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7675-20260202-091944\n2026-02-02 09:19:44 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-02 05:16:55+08:00 ~ 2026-02-02 11:16:55+08:00]\n2026-02-02 09:19:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-02 09:19:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.36s\n2026-02-02 09:19:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-02 09:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.43s\n2026-02-02 09:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-02 09:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.17s\n2026-02-02 09:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-02 09:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.17s\n2026-02-02 09:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-02 09:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.17s\n2026-02-02 09:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-02 09:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.18s\n2026-02-02 09:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-02 09:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.24s\n2026-02-02 09:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-02 09:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.21s\n2026-02-02 09:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-02 09:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.33s\n2026-02-02 09:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-02 09:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.57s\n2026-02-02 09:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-02 09:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.21s\n2026-02-02 09:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-02 09:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.19s\n2026-02-02 09:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-02 09:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.20s\n2026-02-02 09:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-02 09:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.20s\n2026-02-02 09:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-02 09:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.17s\n2026-02-02 09:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-02 09:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.17s\n2026-02-02 09:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-02 09:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.17s\n2026-02-02 09:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-02 09:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.21s\n2026-02-02 09:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-02 09:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.21s\n2026-02-02 09:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-02 09:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.20s\n2026-02-02 09:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-02 09:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.20s\n2026-02-02 09:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-02 09:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.19s\n2026-02-02 09:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-02 09:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.18s\n2026-02-02 09:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-02 09:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.20s\n2026-02-02 09:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-02 09:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.20s\n2026-02-02 09:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-02 09:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.24s\n2026-02-02 09:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-02 09:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.19s\n2026-02-02 09:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-02 09:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.19s\n2026-02-02 09:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-02 09:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.18s\n2026-02-02 09:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-02 09:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.21s\n2026-02-02 09:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-02 09:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.19s\n2026-02-02 09:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-02 09:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.20s\n2026-02-02 09:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-02 09:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.20s\n2026-02-02 09:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 09:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.20s\n2026-02-02 09:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 09:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.20s\n2026-02-02 09:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-02 09:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.19s\n2026-02-02 09:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-02 09:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.19s\n2026-02-02 09:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-02 09:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.22s\n2026-02-02 09:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-02 09:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.18s\n2026-02-02 09:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-02 09:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.19s\n2026-02-02 09:19:53 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-02 09:19:53 [INFO] etl_billiards: 所有任务执行完成\n2026-02-02 09:19:53 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "78be21ce",
"executed_at": "2026-02-02T08:16:54.927356",
"status": "success",
"exit_code": 0,
"duration_seconds": 182.469738,
"summary": "【DWD 装载】维表新增: 0条, 维表更新: 66条, 事实表新增: 0条, 事实表更新: 0条\n 维表: dim_store_goods: +0, ~66\n【错误】2026-02-02 08:16:56 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-02 08:16:56 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0; 2026-02-02 08:16:57 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-02 06:16:54 --window-end 2026-02-02 08:16:54\n2026-02-02 08:16:55 [INFO] etl_billiards: 配置加载完成\n2026-02-02 08:16:55 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-02 08:16:55 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-02 08:16:55 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=741a786d9149476eac23c265e8cf5cba\n2026-02-02 08:16:55 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-7628-20260202-081655\n2026-02-02 08:16:55 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-02 08:16:55 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:16:56 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-02 08:16:56 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-7629-20260202-081656\n2026-02-02 08:16:56 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-02 08:16:56 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:16:56 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 08:16:56 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-7630-20260202-081656\n2026-02-02 08:16:56 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-02 08:16:56 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:16:57 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-02 08:16:57 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-7631-20260202-081657\n2026-02-02 08:16:57 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:16:58 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00] 未发现需要抓取的小票\n2026-02-02 08:16:58 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-02 08:16:58 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-7632-20260202-081658\n2026-02-02 08:16:58 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-02 08:16:58 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:16:58 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-02 08:16:59 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-7633-20260202-081659\n2026-02-02 08:16:59 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-02 08:16:59 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:16:59 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 08:16:59 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-7634-20260202-081659\n2026-02-02 08:16:59 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-02 08:16:59 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:17:01 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-02 08:17:01 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-7635-20260202-081701\n2026-02-02 08:17:01 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-02 08:17:01 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:17:01 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 08:17:02 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-7636-20260202-081702\n2026-02-02 08:17:02 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-02 08:17:02 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:17:02 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 70, 'updated': 0, 'skipped': 102, 'errors': 0}\n2026-02-02 08:17:02 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-7637-20260202-081702\n2026-02-02 08:17:02 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-02 08:17:02 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:17:23 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10022, 'inserted': 0, 'updated': 0, 'skipped': 10022, 'errors': 0}\n2026-02-02 08:17:24 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-7638-20260202-081724\n2026-02-02 08:17:24 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-02 08:17:24 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:17:31 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1777, 'inserted': 0, 'updated': 0, 'skipped': 1777, 'errors': 0}\n2026-02-02 08:17:31 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-7639-20260202-081731\n2026-02-02 08:17:31 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-02 08:17:31 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:18:00 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2450, 'inserted': 0, 'updated': 0, 'skipped': 2450, 'errors': 0}\n2026-02-02 08:18:00 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-7640-20260202-081800\n2026-02-02 08:18:00 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-02 08:18:00 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:18:01 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 0, 'updated': 0, 'skipped': 74, 'errors': 0}\n2026-02-02 08:18:01 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-7641-20260202-081801\n2026-02-02 08:18:01 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-02 08:18:01 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:18:01 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 08:18:02 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-7642-20260202-081802\n2026-02-02 08:18:02 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-02 08:18:02 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:18:02 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-02 08:18:02 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-7643-20260202-081802\n2026-02-02 08:18:02 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-02 08:18:02 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:18:03 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 40, 'inserted': 0, 'updated': 0, 'skipped': 40, 'errors': 0}\n2026-02-02 08:18:03 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-7644-20260202-081803\n2026-02-02 08:18:03 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-02 08:18:03 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:18:04 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-02 08:18:04 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-7645-20260202-081804\n2026-02-02 08:18:04 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-02 08:18:04 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:18:42 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17473, 'inserted': 0, 'updated': 0, 'skipped': 17473, 'errors': 0}\n2026-02-02 08:18:42 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-7646-20260202-081842\n2026-02-02 08:18:42 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-02 08:18:42 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:18:42 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 08:18:42 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-7647-20260202-081842\n2026-02-02 08:18:42 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-02 08:18:42 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:19:20 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8119, 'inserted': 0, 'updated': 0, 'skipped': 8119, 'errors': 0}\n2026-02-02 08:19:21 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-7648-20260202-081921\n2026-02-02 08:19:21 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-02 08:19:21 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:19:46 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11795, 'inserted': 0, 'updated': 0, 'skipped': 11795, 'errors': 0}\n2026-02-02 08:19:46 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-7649-20260202-081946\n2026-02-02 08:19:46 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-02 08:19:46 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:19:46 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 08:19:46 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-7650-20260202-081946\n2026-02-02 08:19:46 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-02 08:19:46 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:19:47 [ERROR] etl_billiards: ODS_MEMBER_CARD ODS 任务失败\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 08:19:47 [ERROR] etl_billiards: 任务 ODS_MEMBER_CARD 失败: 错误: 整数超出范围\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 112, in run_tasks\n self._run_single_task(task_code, run_uuid, store_id)\n ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 168, in _run_single_task\n result, _ = self._execute_ods_record_and_load(task_code, cursor_data, fetch_dir, run_id)\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 297, in _execute_ods_record_and_load\n result = task.execute(cursor_data)\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 08:19:47 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7651-20260202-081947\n2026-02-02 08:19:47 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-02 08:19:47 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7651-20260202-081947\n2026-02-02 08:19:47 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-02 04:16:54+08:00 ~ 2026-02-02 10:16:54+08:00]\n2026-02-02 08:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-02 08:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.36s\n2026-02-02 08:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-02 08:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.49s\n2026-02-02 08:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-02 08:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.20s\n2026-02-02 08:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-02 08:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.18s\n2026-02-02 08:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-02 08:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.18s\n2026-02-02 08:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-02 08:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.20s\n2026-02-02 08:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-02 08:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.24s\n2026-02-02 08:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-02 08:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.22s\n2026-02-02 08:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-02 08:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.37s\n2026-02-02 08:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-02 08:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.57s\n2026-02-02 08:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-02 08:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.21s\n2026-02-02 08:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-02 08:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.20s\n2026-02-02 08:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-02 08:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.26s\n2026-02-02 08:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-02 08:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.26s\n2026-02-02 08:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-02 08:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.18s\n2026-02-02 08:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-02 08:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.20s\n2026-02-02 08:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-02 08:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.18s\n2026-02-02 08:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-02 08:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.23s\n2026-02-02 08:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-02 08:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.23s\n2026-02-02 08:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-02 08:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.22s\n2026-02-02 08:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-02 08:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.22s\n2026-02-02 08:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-02 08:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.20s\n2026-02-02 08:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-02 08:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.21s\n2026-02-02 08:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-02 08:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.21s\n2026-02-02 08:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-02 08:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.21s\n2026-02-02 08:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-02 08:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.26s\n2026-02-02 08:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-02 08:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.21s\n2026-02-02 08:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-02 08:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.21s\n2026-02-02 08:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-02 08:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.20s\n2026-02-02 08:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-02 08:19:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.20s\n2026-02-02 08:19:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-02 08:19:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.20s\n2026-02-02 08:19:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-02 08:19:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.21s\n2026-02-02 08:19:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-02 08:19:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.22s\n2026-02-02 08:19:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 08:19:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.22s\n2026-02-02 08:19:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 08:19:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.22s\n2026-02-02 08:19:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-02 08:19:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.23s\n2026-02-02 08:19:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-02 08:19:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.22s\n2026-02-02 08:19:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-02 08:19:56 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.24s\n2026-02-02 08:19:56 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-02 08:19:57 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.20s\n2026-02-02 08:19:57 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-02 08:19:57 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.20s\n2026-02-02 08:19:57 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 66, 'skipped': 106}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 58, 'skipped': 114}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-02 08:19:57 [INFO] etl_billiards: 所有任务执行完成\n2026-02-02 08:19:57 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "122f9128",
"executed_at": "2026-02-02T07:16:54.548199",
"status": "success",
"exit_code": 0,
"duration_seconds": 172.430074,
"summary": "【错误】2026-02-02 07:16:55 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-02 07:16:56 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 1, 'inserted': 1; 2026-02-02 07:16:56 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-02 05:16:54 --window-end 2026-02-02 07:16:54\n2026-02-02 07:16:54 [INFO] etl_billiards: 配置加载完成\n2026-02-02 07:16:54 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-02 07:16:54 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-02 07:16:55 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=820216bf246349889a79af066b3d7673\n2026-02-02 07:16:55 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-7604-20260202-071655\n2026-02-02 07:16:55 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-02 07:16:55 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:16:55 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-02 07:16:55 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-7605-20260202-071655\n2026-02-02 07:16:55 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-02 07:16:55 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:16:56 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 1, 'inserted': 1, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 07:16:56 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-7606-20260202-071656\n2026-02-02 07:16:56 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-02 07:16:56 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:16:56 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-02 07:16:57 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-7607-20260202-071657\n2026-02-02 07:16:57 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:16:57 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00] 未发现需要抓取的小票\n2026-02-02 07:16:57 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-02 07:16:57 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-7608-20260202-071657\n2026-02-02 07:16:57 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-02 07:16:57 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:16:58 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-02 07:16:58 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-7609-20260202-071658\n2026-02-02 07:16:58 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-02 07:16:58 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:16:58 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 07:16:58 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-7610-20260202-071658\n2026-02-02 07:16:58 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-02 07:16:58 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:17:00 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-02 07:17:00 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-7611-20260202-071700\n2026-02-02 07:17:00 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-02 07:17:00 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:17:01 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-02 07:17:01 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-7612-20260202-071701\n2026-02-02 07:17:01 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-02 07:17:01 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:17:01 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-02 07:17:02 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-7613-20260202-071701\n2026-02-02 07:17:02 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-02 07:17:02 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:17:20 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10159, 'inserted': 0, 'updated': 0, 'skipped': 10159, 'errors': 0}\n2026-02-02 07:17:20 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-7614-20260202-071720\n2026-02-02 07:17:20 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-02 07:17:20 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:17:27 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1789, 'inserted': 0, 'updated': 0, 'skipped': 1789, 'errors': 0}\n2026-02-02 07:17:27 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-7615-20260202-071727\n2026-02-02 07:17:27 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-02 07:17:27 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:17:54 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2479, 'inserted': 0, 'updated': 0, 'skipped': 2479, 'errors': 0}\n2026-02-02 07:17:54 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-7616-20260202-071754\n2026-02-02 07:17:54 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-02 07:17:54 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:17:54 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 0, 'updated': 0, 'skipped': 74, 'errors': 0}\n2026-02-02 07:17:54 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-7617-20260202-071754\n2026-02-02 07:17:54 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-02 07:17:54 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:17:55 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 07:17:55 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-7618-20260202-071755\n2026-02-02 07:17:55 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-02 07:17:55 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:17:55 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-02 07:17:56 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-7619-20260202-071756\n2026-02-02 07:17:56 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-02 07:17:56 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:17:56 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 40, 'inserted': 0, 'updated': 0, 'skipped': 40, 'errors': 0}\n2026-02-02 07:17:56 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-7620-20260202-071756\n2026-02-02 07:17:56 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-02 07:17:56 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:17:57 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-02 07:17:57 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-7621-20260202-071757\n2026-02-02 07:17:57 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-02 07:17:57 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:18:36 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17473, 'inserted': 0, 'updated': 0, 'skipped': 17473, 'errors': 0}\n2026-02-02 07:18:36 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-7622-20260202-071836\n2026-02-02 07:18:36 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-02 07:18:36 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:18:36 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 7, 'inserted': 0, 'updated': 0, 'skipped': 7, 'errors': 0}\n2026-02-02 07:18:37 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-7623-20260202-071837\n2026-02-02 07:18:37 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-02 07:18:37 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:19:13 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8250, 'inserted': 0, 'updated': 0, 'skipped': 8250, 'errors': 0}\n2026-02-02 07:19:13 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-7624-20260202-071913\n2026-02-02 07:19:13 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-02 07:19:13 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:19:36 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11962, 'inserted': 0, 'updated': 0, 'skipped': 11962, 'errors': 0}\n2026-02-02 07:19:37 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-7625-20260202-071937\n2026-02-02 07:19:37 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-02 07:19:37 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:19:37 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 5, 'inserted': 0, 'updated': 0, 'skipped': 5, 'errors': 0}\n2026-02-02 07:19:37 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-7626-20260202-071937\n2026-02-02 07:19:37 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-02 07:19:37 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:19:38 [ERROR] etl_billiards: ODS_MEMBER_CARD ODS 任务失败\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 07:19:38 [ERROR] etl_billiards: 任务 ODS_MEMBER_CARD 失败: 错误: 整数超出范围\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 112, in run_tasks\n self._run_single_task(task_code, run_uuid, store_id)\n ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 168, in _run_single_task\n result, _ = self._execute_ods_record_and_load(task_code, cursor_data, fetch_dir, run_id)\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 297, in _execute_ods_record_and_load\n result = task.execute(cursor_data)\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 07:19:38 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7627-20260202-071938\n2026-02-02 07:19:38 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-02 07:19:38 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7627-20260202-071938\n2026-02-02 07:19:38 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-02 03:16:54+08:00 ~ 2026-02-02 09:16:54+08:00]\n2026-02-02 07:19:38 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-02 07:19:38 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.37s\n2026-02-02 07:19:38 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-02 07:19:39 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.42s\n2026-02-02 07:19:39 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-02 07:19:39 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.17s\n2026-02-02 07:19:39 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-02 07:19:39 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.16s\n2026-02-02 07:19:39 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-02 07:19:39 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.17s\n2026-02-02 07:19:39 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-02 07:19:39 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.19s\n2026-02-02 07:19:39 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-02 07:19:40 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.23s\n2026-02-02 07:19:40 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-02 07:19:40 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.21s\n2026-02-02 07:19:40 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-02 07:19:40 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.34s\n2026-02-02 07:19:40 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-02 07:19:41 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.54s\n2026-02-02 07:19:41 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-02 07:19:41 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.19s\n2026-02-02 07:19:41 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-02 07:19:41 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.18s\n2026-02-02 07:19:41 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-02 07:19:41 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.19s\n2026-02-02 07:19:41 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-02 07:19:41 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.19s\n2026-02-02 07:19:41 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-02 07:19:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.16s\n2026-02-02 07:19:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-02 07:19:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.16s\n2026-02-02 07:19:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-02 07:19:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.16s\n2026-02-02 07:19:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-02 07:19:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.21s\n2026-02-02 07:19:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-02 07:19:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.21s\n2026-02-02 07:19:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-02 07:19:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.20s\n2026-02-02 07:19:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-02 07:19:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.20s\n2026-02-02 07:19:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-02 07:19:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.19s\n2026-02-02 07:19:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-02 07:19:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.18s\n2026-02-02 07:19:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-02 07:19:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.19s\n2026-02-02 07:19:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-02 07:19:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.20s\n2026-02-02 07:19:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-02 07:19:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.24s\n2026-02-02 07:19:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-02 07:19:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.19s\n2026-02-02 07:19:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-02 07:19:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.18s\n2026-02-02 07:19:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-02 07:19:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.18s\n2026-02-02 07:19:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-02 07:19:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.19s\n2026-02-02 07:19:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-02 07:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.19s\n2026-02-02 07:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-02 07:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.19s\n2026-02-02 07:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-02 07:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.19s\n2026-02-02 07:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 07:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.19s\n2026-02-02 07:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 07:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.19s\n2026-02-02 07:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-02 07:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.18s\n2026-02-02 07:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-02 07:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.19s\n2026-02-02 07:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-02 07:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.22s\n2026-02-02 07:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-02 07:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.18s\n2026-02-02 07:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-02 07:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.18s\n2026-02-02 07:19:46 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-02 07:19:46 [INFO] etl_billiards: 所有任务执行完成\n2026-02-02 07:19:46 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "5f89d5b2",
"executed_at": "2026-02-02T06:16:54.223623",
"status": "success",
"exit_code": 0,
"duration_seconds": 177.257074,
"summary": "【错误】2026-02-02 06:16:55 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-02 06:16:56 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 1, 'inserted': 1; 2026-02-02 06:16:56 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-02 04:16:54 --window-end 2026-02-02 06:16:54\n2026-02-02 06:16:54 [INFO] etl_billiards: 配置加载完成\n2026-02-02 06:16:54 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-02 06:16:54 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-02 06:16:54 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=65fa4d91cff94ec6ae937eab98bfc1fa\n2026-02-02 06:16:54 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-7580-20260202-061654\n2026-02-02 06:16:54 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-02 06:16:54 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:16:55 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-02 06:16:55 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-7581-20260202-061655\n2026-02-02 06:16:55 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-02 06:16:55 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:16:56 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 1, 'inserted': 1, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 06:16:56 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-7582-20260202-061656\n2026-02-02 06:16:56 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-02 06:16:56 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:16:56 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-02 06:16:57 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-7583-20260202-061657\n2026-02-02 06:16:57 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:16:57 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00] 未发现需要抓取的小票\n2026-02-02 06:16:57 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-02 06:16:57 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-7584-20260202-061657\n2026-02-02 06:16:57 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-02 06:16:57 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:16:58 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-02 06:16:58 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-7585-20260202-061658\n2026-02-02 06:16:58 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-02 06:16:58 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:16:58 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 06:16:58 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-7586-20260202-061658\n2026-02-02 06:16:58 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-02 06:16:58 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:17:00 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-02 06:17:00 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-7587-20260202-061700\n2026-02-02 06:17:00 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-02 06:17:00 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:17:01 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-02 06:17:01 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-7588-20260202-061701\n2026-02-02 06:17:01 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-02 06:17:01 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:17:02 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-02 06:17:02 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-7589-20260202-061702\n2026-02-02 06:17:02 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-02 06:17:02 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:17:22 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10159, 'inserted': 0, 'updated': 0, 'skipped': 10159, 'errors': 0}\n2026-02-02 06:17:22 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-7590-20260202-061722\n2026-02-02 06:17:22 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-02 06:17:22 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:17:29 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1789, 'inserted': 0, 'updated': 0, 'skipped': 1789, 'errors': 0}\n2026-02-02 06:17:29 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-7591-20260202-061729\n2026-02-02 06:17:29 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-02 06:17:29 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:17:55 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2479, 'inserted': 0, 'updated': 0, 'skipped': 2479, 'errors': 0}\n2026-02-02 06:17:56 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-7592-20260202-061756\n2026-02-02 06:17:56 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-02 06:17:56 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:17:56 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 0, 'updated': 0, 'skipped': 74, 'errors': 0}\n2026-02-02 06:17:56 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-7593-20260202-061756\n2026-02-02 06:17:56 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-02 06:17:56 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:17:56 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 06:17:57 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-7594-20260202-061757\n2026-02-02 06:17:57 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-02 06:17:57 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:17:57 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-02 06:17:58 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-7595-20260202-061758\n2026-02-02 06:17:58 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-02 06:17:58 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:17:58 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 40, 'inserted': 0, 'updated': 0, 'skipped': 40, 'errors': 0}\n2026-02-02 06:17:58 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-7596-20260202-061758\n2026-02-02 06:17:58 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-02 06:17:58 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:17:59 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-02 06:17:59 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-7597-20260202-061759\n2026-02-02 06:17:59 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-02 06:17:59 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:18:38 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17473, 'inserted': 0, 'updated': 0, 'skipped': 17473, 'errors': 0}\n2026-02-02 06:18:38 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-7598-20260202-061838\n2026-02-02 06:18:38 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-02 06:18:38 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:18:38 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 7, 'inserted': 0, 'updated': 0, 'skipped': 7, 'errors': 0}\n2026-02-02 06:18:38 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-7599-20260202-061838\n2026-02-02 06:18:38 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-02 06:18:38 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:19:16 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8250, 'inserted': 0, 'updated': 0, 'skipped': 8250, 'errors': 0}\n2026-02-02 06:19:16 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-7600-20260202-061916\n2026-02-02 06:19:16 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-02 06:19:16 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:19:39 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11962, 'inserted': 0, 'updated': 0, 'skipped': 11962, 'errors': 0}\n2026-02-02 06:19:39 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-7601-20260202-061939\n2026-02-02 06:19:39 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-02 06:19:39 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:19:40 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 5, 'inserted': 0, 'updated': 0, 'skipped': 5, 'errors': 0}\n2026-02-02 06:19:40 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-7602-20260202-061940\n2026-02-02 06:19:40 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-02 06:19:40 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:19:41 [ERROR] etl_billiards: ODS_MEMBER_CARD ODS 任务失败\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 06:19:41 [ERROR] etl_billiards: 任务 ODS_MEMBER_CARD 失败: 错误: 整数超出范围\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 112, in run_tasks\n self._run_single_task(task_code, run_uuid, store_id)\n ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 168, in _run_single_task\n result, _ = self._execute_ods_record_and_load(task_code, cursor_data, fetch_dir, run_id)\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 297, in _execute_ods_record_and_load\n result = task.execute(cursor_data)\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 06:19:41 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7603-20260202-061941\n2026-02-02 06:19:41 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-02 06:19:41 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7603-20260202-061941\n2026-02-02 06:19:41 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-02 02:16:54+08:00 ~ 2026-02-02 08:16:54+08:00]\n2026-02-02 06:19:41 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-02 06:19:41 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.38s\n2026-02-02 06:19:41 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-02 06:19:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.53s\n2026-02-02 06:19:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-02 06:19:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.22s\n2026-02-02 06:19:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-02 06:19:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.20s\n2026-02-02 06:19:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-02 06:19:42 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.20s\n2026-02-02 06:19:42 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-02 06:19:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.21s\n2026-02-02 06:19:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-02 06:19:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.27s\n2026-02-02 06:19:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-02 06:19:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.25s\n2026-02-02 06:19:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-02 06:19:43 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.36s\n2026-02-02 06:19:43 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-02 06:19:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.58s\n2026-02-02 06:19:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-02 06:19:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.21s\n2026-02-02 06:19:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-02 06:19:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.21s\n2026-02-02 06:19:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-02 06:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.23s\n2026-02-02 06:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-02 06:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.24s\n2026-02-02 06:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-02 06:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.19s\n2026-02-02 06:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-02 06:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.19s\n2026-02-02 06:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-02 06:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.19s\n2026-02-02 06:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-02 06:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.24s\n2026-02-02 06:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-02 06:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.25s\n2026-02-02 06:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-02 06:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.24s\n2026-02-02 06:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-02 06:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.23s\n2026-02-02 06:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-02 06:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.22s\n2026-02-02 06:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-02 06:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.22s\n2026-02-02 06:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-02 06:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.23s\n2026-02-02 06:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-02 06:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.23s\n2026-02-02 06:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-02 06:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.28s\n2026-02-02 06:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-02 06:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.23s\n2026-02-02 06:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-02 06:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.22s\n2026-02-02 06:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-02 06:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.21s\n2026-02-02 06:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-02 06:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.22s\n2026-02-02 06:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-02 06:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.26s\n2026-02-02 06:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-02 06:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.23s\n2026-02-02 06:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-02 06:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.23s\n2026-02-02 06:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 06:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.23s\n2026-02-02 06:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 06:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.22s\n2026-02-02 06:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-02 06:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.22s\n2026-02-02 06:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-02 06:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.22s\n2026-02-02 06:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-02 06:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.25s\n2026-02-02 06:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-02 06:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.21s\n2026-02-02 06:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-02 06:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.22s\n2026-02-02 06:19:51 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-02 06:19:51 [INFO] etl_billiards: 所有任务执行完成\n2026-02-02 06:19:51 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "712b956f",
"executed_at": "2026-02-02T05:16:53.863413",
"status": "success",
"exit_code": 0,
"duration_seconds": 181.977561,
"summary": "【错误】2026-02-02 05:16:55 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-02 05:16:55 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 1, 'inserted': 1; 2026-02-02 05:16:56 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-02 03:16:53 --window-end 2026-02-02 05:16:53\n2026-02-02 05:16:54 [INFO] etl_billiards: 配置加载完成\n2026-02-02 05:16:54 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-02 05:16:54 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-02 05:16:54 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=06ffd41655e6498bb8518c7e11618494\n2026-02-02 05:16:54 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-7556-20260202-051654\n2026-02-02 05:16:54 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-02 05:16:54 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:16:55 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-02 05:16:55 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-7557-20260202-051655\n2026-02-02 05:16:55 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-02 05:16:55 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:16:55 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 1, 'inserted': 1, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 05:16:55 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-7558-20260202-051655\n2026-02-02 05:16:55 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-02 05:16:55 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:16:56 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-02 05:16:56 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-7559-20260202-051656\n2026-02-02 05:16:56 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:16:57 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00] 未发现需要抓取的小票\n2026-02-02 05:16:57 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-02 05:16:57 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-7560-20260202-051657\n2026-02-02 05:16:57 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-02 05:16:57 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:16:57 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-02 05:16:58 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-7561-20260202-051658\n2026-02-02 05:16:58 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-02 05:16:58 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:16:58 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 05:16:58 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-7562-20260202-051658\n2026-02-02 05:16:58 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-02 05:16:58 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:17:00 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-02 05:17:00 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-7563-20260202-051700\n2026-02-02 05:17:00 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-02 05:17:00 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:17:01 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 10, 'inserted': 0, 'updated': 0, 'skipped': 10, 'errors': 0}\n2026-02-02 05:17:01 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-7564-20260202-051701\n2026-02-02 05:17:01 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-02 05:17:01 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:17:02 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-02 05:17:02 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-7565-20260202-051702\n2026-02-02 05:17:02 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-02 05:17:02 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:17:22 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10159, 'inserted': 0, 'updated': 0, 'skipped': 10159, 'errors': 0}\n2026-02-02 05:17:23 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-7566-20260202-051723\n2026-02-02 05:17:23 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-02 05:17:23 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:17:30 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1789, 'inserted': 0, 'updated': 0, 'skipped': 1789, 'errors': 0}\n2026-02-02 05:17:30 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-7567-20260202-051730\n2026-02-02 05:17:30 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-02 05:17:30 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:17:56 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2479, 'inserted': 0, 'updated': 0, 'skipped': 2479, 'errors': 0}\n2026-02-02 05:17:56 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-7568-20260202-051756\n2026-02-02 05:17:56 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-02 05:17:56 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:17:56 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 0, 'updated': 0, 'skipped': 74, 'errors': 0}\n2026-02-02 05:17:57 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-7569-20260202-051757\n2026-02-02 05:17:57 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-02 05:17:57 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:17:57 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 05:17:57 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-7570-20260202-051757\n2026-02-02 05:17:57 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-02 05:17:57 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:17:58 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-02 05:17:58 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-7571-20260202-051758\n2026-02-02 05:17:58 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-02 05:17:58 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:17:58 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 40, 'inserted': 0, 'updated': 0, 'skipped': 40, 'errors': 0}\n2026-02-02 05:17:59 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-7572-20260202-051759\n2026-02-02 05:17:59 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-02 05:17:59 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:18:00 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-02 05:18:00 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-7573-20260202-051800\n2026-02-02 05:18:00 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-02 05:18:00 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:18:40 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17473, 'inserted': 0, 'updated': 0, 'skipped': 17473, 'errors': 0}\n2026-02-02 05:18:41 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-7574-20260202-051841\n2026-02-02 05:18:41 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-02 05:18:41 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:18:41 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 13, 'inserted': 0, 'updated': 0, 'skipped': 13, 'errors': 0}\n2026-02-02 05:18:41 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-7575-20260202-051841\n2026-02-02 05:18:41 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-02 05:18:41 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:19:19 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8250, 'inserted': 0, 'updated': 0, 'skipped': 8250, 'errors': 0}\n2026-02-02 05:19:19 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-7576-20260202-051919\n2026-02-02 05:19:19 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-02 05:19:19 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:19:43 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11962, 'inserted': 0, 'updated': 0, 'skipped': 11962, 'errors': 0}\n2026-02-02 05:19:43 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-7577-20260202-051943\n2026-02-02 05:19:43 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-02 05:19:43 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:19:44 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 10, 'inserted': 0, 'updated': 0, 'skipped': 10, 'errors': 0}\n2026-02-02 05:19:44 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-7578-20260202-051944\n2026-02-02 05:19:44 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-02 05:19:44 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:19:45 [ERROR] etl_billiards: ODS_MEMBER_CARD ODS 任务失败\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 05:19:45 [ERROR] etl_billiards: 任务 ODS_MEMBER_CARD 失败: 错误: 整数超出范围\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 112, in run_tasks\n self._run_single_task(task_code, run_uuid, store_id)\n ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 168, in _run_single_task\n result, _ = self._execute_ods_record_and_load(task_code, cursor_data, fetch_dir, run_id)\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 297, in _execute_ods_record_and_load\n result = task.execute(cursor_data)\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 05:19:45 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7579-20260202-051945\n2026-02-02 05:19:45 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-02 05:19:45 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7579-20260202-051945\n2026-02-02 05:19:45 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-02 01:16:53+08:00 ~ 2026-02-02 07:16:53+08:00]\n2026-02-02 05:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-02 05:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.42s\n2026-02-02 05:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-02 05:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.51s\n2026-02-02 05:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-02 05:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.22s\n2026-02-02 05:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-02 05:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.21s\n2026-02-02 05:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-02 05:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.21s\n2026-02-02 05:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-02 05:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.22s\n2026-02-02 05:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-02 05:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.26s\n2026-02-02 05:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-02 05:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.24s\n2026-02-02 05:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-02 05:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.37s\n2026-02-02 05:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-02 05:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.60s\n2026-02-02 05:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-02 05:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.22s\n2026-02-02 05:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-02 05:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.22s\n2026-02-02 05:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-02 05:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.24s\n2026-02-02 05:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-02 05:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.23s\n2026-02-02 05:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-02 05:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.20s\n2026-02-02 05:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-02 05:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.21s\n2026-02-02 05:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-02 05:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.21s\n2026-02-02 05:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-02 05:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.26s\n2026-02-02 05:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-02 05:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.25s\n2026-02-02 05:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-02 05:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.29s\n2026-02-02 05:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-02 05:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.26s\n2026-02-02 05:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-02 05:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.23s\n2026-02-02 05:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-02 05:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.23s\n2026-02-02 05:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-02 05:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.24s\n2026-02-02 05:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-02 05:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.24s\n2026-02-02 05:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-02 05:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.29s\n2026-02-02 05:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-02 05:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.23s\n2026-02-02 05:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-02 05:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.22s\n2026-02-02 05:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-02 05:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.22s\n2026-02-02 05:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-02 05:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.23s\n2026-02-02 05:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-02 05:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.23s\n2026-02-02 05:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-02 05:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.24s\n2026-02-02 05:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-02 05:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.24s\n2026-02-02 05:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 05:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.24s\n2026-02-02 05:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 05:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.24s\n2026-02-02 05:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-02 05:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.23s\n2026-02-02 05:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-02 05:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.23s\n2026-02-02 05:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-02 05:19:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.26s\n2026-02-02 05:19:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-02 05:19:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.22s\n2026-02-02 05:19:55 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-02 05:19:55 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.22s\n2026-02-02 05:19:55 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-02 05:19:55 [INFO] etl_billiards: 所有任务执行完成\n2026-02-02 05:19:55 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "b1d05764",
"executed_at": "2026-02-02T04:16:53.349381",
"status": "success",
"exit_code": 0,
"duration_seconds": 181.269416,
"summary": "【DWD 装载】维表新增: 0条, 维表更新: 18条, 事实表新增: 36条, 事实表更新: 0条\n 维表: dim_table: +0, ~6, dim_assistant: +0, ~5, dim_member: +0, ~2, dim_store_goods: +0, ~5\n 事实表: dwd_settlement_head: +5, ~0, dwd_table_fee_log: +7, ~0, dwd_table_fee_adjust: +4, ~0, dwd_assistant_service_log: +9, ~0, dwd_member_balance_change: +4, ~0, dwd_recharge_order: +1, ~0, dwd_payment: +6, ~0\n【错误】2026-02-02 04:16:54 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-02 04:16:55 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 1, 'inserted': 1; 2026-02-02 04:16:56 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-02 02:16:53 --window-end 2026-02-02 04:16:53\n2026-02-02 04:16:53 [INFO] etl_billiards: 配置加载完成\n2026-02-02 04:16:53 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-02 04:16:53 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-02 04:16:54 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=218ed57fad4947a0a7d7f808018b2b80\n2026-02-02 04:16:54 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-7532-20260202-041654\n2026-02-02 04:16:54 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-02 04:16:54 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:16:54 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-02 04:16:55 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-7533-20260202-041655\n2026-02-02 04:16:55 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-02 04:16:55 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:16:55 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 1, 'inserted': 1, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 04:16:55 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-7534-20260202-041655\n2026-02-02 04:16:55 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-02 04:16:55 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:16:56 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-02 04:16:56 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-7535-20260202-041656\n2026-02-02 04:16:56 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:16:56 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00] 未发现需要抓取的小票\n2026-02-02 04:16:56 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-02 04:16:57 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-7536-20260202-041657\n2026-02-02 04:16:57 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-02 04:16:57 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:16:57 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-02 04:16:57 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-7537-20260202-041657\n2026-02-02 04:16:57 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-02 04:16:57 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:16:57 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 04:16:58 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-7538-20260202-041658\n2026-02-02 04:16:58 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-02 04:16:58 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:17:00 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 2, 'updated': 0, 'skipped': 554, 'errors': 0}\n2026-02-02 04:17:00 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-7539-20260202-041700\n2026-02-02 04:17:00 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-02 04:17:00 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:17:00 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 10, 'inserted': 9, 'updated': 0, 'skipped': 1, 'errors': 0}\n2026-02-02 04:17:01 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-7540-20260202-041701\n2026-02-02 04:17:01 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-02 04:17:01 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:17:01 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 5, 'updated': 0, 'skipped': 167, 'errors': 0}\n2026-02-02 04:17:02 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-7541-20260202-041702\n2026-02-02 04:17:02 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-02 04:17:02 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:17:22 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10159, 'inserted': 7, 'updated': 0, 'skipped': 10152, 'errors': 0}\n2026-02-02 04:17:22 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-7542-20260202-041722\n2026-02-02 04:17:22 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-02 04:17:22 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:17:29 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1789, 'inserted': 4, 'updated': 0, 'skipped': 1785, 'errors': 0}\n2026-02-02 04:17:29 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-7543-20260202-041729\n2026-02-02 04:17:29 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-02 04:17:29 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:17:57 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2479, 'inserted': 4, 'updated': 0, 'skipped': 2475, 'errors': 0}\n2026-02-02 04:17:57 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-7544-20260202-041757\n2026-02-02 04:17:57 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-02 04:17:57 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:17:57 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 6, 'updated': 0, 'skipped': 68, 'errors': 0}\n2026-02-02 04:17:58 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-7545-20260202-041758\n2026-02-02 04:17:58 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-02 04:17:58 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:17:58 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 04:17:58 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-7546-20260202-041758\n2026-02-02 04:17:58 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-02 04:17:58 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:17:59 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 4, 'updated': 0, 'skipped': 168, 'errors': 0}\n2026-02-02 04:17:59 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-7547-20260202-041759\n2026-02-02 04:17:59 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-02 04:17:59 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:17:59 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 40, 'inserted': 0, 'updated': 0, 'skipped': 40, 'errors': 0}\n2026-02-02 04:18:00 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-7548-20260202-041800\n2026-02-02 04:18:00 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-02 04:18:00 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:18:01 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 5, 'updated': 0, 'skipped': 64, 'errors': 0}\n2026-02-02 04:18:01 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-7549-20260202-041801\n2026-02-02 04:18:01 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-02 04:18:01 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:18:40 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17473, 'inserted': 0, 'updated': 0, 'skipped': 17473, 'errors': 0}\n2026-02-02 04:18:40 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-7550-20260202-041840\n2026-02-02 04:18:40 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-02 04:18:40 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:18:40 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 18, 'inserted': 6, 'updated': 0, 'skipped': 12, 'errors': 0}\n2026-02-02 04:18:40 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-7551-20260202-041840\n2026-02-02 04:18:40 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-02 04:18:40 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:19:18 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8250, 'inserted': 0, 'updated': 0, 'skipped': 8250, 'errors': 0}\n2026-02-02 04:19:18 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-7552-20260202-041918\n2026-02-02 04:19:18 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-02 04:19:18 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:19:42 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11962, 'inserted': 6, 'updated': 0, 'skipped': 11956, 'errors': 0}\n2026-02-02 04:19:42 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-7553-20260202-041942\n2026-02-02 04:19:42 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-02 04:19:42 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:19:42 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 12, 'inserted': 5, 'updated': 0, 'skipped': 7, 'errors': 0}\n2026-02-02 04:19:43 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-7554-20260202-041943\n2026-02-02 04:19:43 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-02 04:19:43 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:19:43 [ERROR] etl_billiards: ODS_MEMBER_CARD ODS 任务失败\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 04:19:43 [ERROR] etl_billiards: 任务 ODS_MEMBER_CARD 失败: 错误: 整数超出范围\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 112, in run_tasks\n self._run_single_task(task_code, run_uuid, store_id)\n ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 168, in _run_single_task\n result, _ = self._execute_ods_record_and_load(task_code, cursor_data, fetch_dir, run_id)\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 297, in _execute_ods_record_and_load\n result = task.execute(cursor_data)\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.NumericValueOutOfRange: 错误: 整数超出范围\n2026-02-02 04:19:44 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7555-20260202-041944\n2026-02-02 04:19:44 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-02 04:19:44 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7555-20260202-041944\n2026-02-02 04:19:44 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-02 00:16:53+08:00 ~ 2026-02-02 06:16:53+08:00]\n2026-02-02 04:19:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-02 04:19:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.39s\n2026-02-02 04:19:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-02 04:19:44 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.46s\n2026-02-02 04:19:44 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-02 04:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.27s\n2026-02-02 04:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-02 04:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.26s\n2026-02-02 04:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-02 04:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.25s\n2026-02-02 04:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-02 04:19:45 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.26s\n2026-02-02 04:19:45 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-02 04:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.31s\n2026-02-02 04:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-02 04:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.28s\n2026-02-02 04:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-02 04:19:46 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.41s\n2026-02-02 04:19:46 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-02 04:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.57s\n2026-02-02 04:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-02 04:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.21s\n2026-02-02 04:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-02 04:19:47 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.23s\n2026-02-02 04:19:47 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-02 04:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.29s\n2026-02-02 04:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-02 04:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.29s\n2026-02-02 04:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-02 04:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.19s\n2026-02-02 04:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-02 04:19:48 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.19s\n2026-02-02 04:19:48 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-02 04:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.19s\n2026-02-02 04:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-02 04:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.25s\n2026-02-02 04:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-02 04:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.25s\n2026-02-02 04:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-02 04:19:49 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.24s\n2026-02-02 04:19:49 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-02 04:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.23s\n2026-02-02 04:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-02 04:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.22s\n2026-02-02 04:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-02 04:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.22s\n2026-02-02 04:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-02 04:19:50 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.23s\n2026-02-02 04:19:50 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-02 04:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.23s\n2026-02-02 04:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-02 04:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.28s\n2026-02-02 04:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-02 04:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.23s\n2026-02-02 04:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-02 04:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.23s\n2026-02-02 04:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-02 04:19:51 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.21s\n2026-02-02 04:19:51 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-02 04:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.22s\n2026-02-02 04:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-02 04:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.22s\n2026-02-02 04:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-02 04:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.23s\n2026-02-02 04:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-02 04:19:52 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.23s\n2026-02-02 04:19:52 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 04:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.23s\n2026-02-02 04:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 04:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.23s\n2026-02-02 04:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-02 04:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.22s\n2026-02-02 04:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-02 04:19:53 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.23s\n2026-02-02 04:19:53 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-02 04:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.25s\n2026-02-02 04:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-02 04:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.21s\n2026-02-02 04:19:54 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-02 04:19:54 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.21s\n2026-02-02 04:19:54 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 6, 'skipped': 68}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 5, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 5, 'skipped': 64}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 5, 'skipped': 64}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 2, 'skipped': 554}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 2, 'skipped': 554}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 5, 'skipped': 167}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 5, 'skipped': 167}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 5, 'updated': 0, 'processed': 5}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 5, 'updated': 0, 'processed': 5}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 7, 'updated': 0, 'processed': 7}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 7, 'updated': 0, 'processed': 7}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 9, 'updated': 0, 'processed': 9}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 9, 'updated': 0, 'processed': 9}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 4, 'updated': 0, 'processed': 4}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 1, 'updated': 0, 'processed': 1}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 1, 'updated': 0, 'processed': 1}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 6, 'updated': 0, 'processed': 6}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-02 04:19:54 [INFO] etl_billiards: 所有任务执行完成\n2026-02-02 04:19:54 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
},
{
"task_id": "b3edf6e8",
"executed_at": "2026-02-02T03:15:55.288621",
"status": "success",
"exit_code": 0,
"duration_seconds": 194.682314,
"summary": "【错误】2026-02-02 03:15:56 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-02 03:15:57 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 1, 'inserted': 1; 2026-02-02 03:15:57 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,\n【结果】✓ etl_billiards: ETL运行完成",
"output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_TENANT_GOODS,ODS_SETTLEMENT_TICKET,ODS_GROUP_PACKAGE,ODS_ASSISTANT_ABOLISH,ODS_MEMBER,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_MEMBER_BALANCE,ODS_TABLES,ODS_STORE_GOODS_SALES,ODS_INVENTORY_STOCK,ODS_REFUND,ODS_ASSISTANT_ACCOUNT,ODS_PLATFORM_COUPON,ODS_INVENTORY_CHANGE,ODS_GROUP_BUY_REDEMPTION,ODS_PAYMENT,ODS_SETTLEMENT_RECORDS,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-02 01:15:55 --window-end 2026-02-02 03:15:55\n2026-02-02 03:15:55 [INFO] etl_billiards: 配置加载完成\n2026-02-02 03:15:55 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-02 03:15:55 [INFO] etl_billiards: 任务列表: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-02 03:15:55 [INFO] etl_billiards: 开始运行任务: ['ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_TENANT_GOODS', 'ODS_SETTLEMENT_TICKET', 'ODS_GROUP_PACKAGE', 'ODS_ASSISTANT_ABOLISH', 'ODS_MEMBER', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_MEMBER_BALANCE', 'ODS_TABLES', 'ODS_STORE_GOODS_SALES', 'ODS_INVENTORY_STOCK', 'ODS_REFUND', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PLATFORM_COUPON', 'ODS_INVENTORY_CHANGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_PAYMENT', 'ODS_SETTLEMENT_RECORDS', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=25ea68a0cad7475facb2f3f2de262d3f\n2026-02-02 03:15:55 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-7508-20260202-031555\n2026-02-02 03:15:55 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-02 03:15:55 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:15:56 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-02 03:15:56 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-7509-20260202-031556\n2026-02-02 03:15:56 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-02 03:15:56 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:15:57 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 1, 'inserted': 1, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 03:15:57 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-7510-20260202-031557\n2026-02-02 03:15:57 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-02 03:15:57 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:15:57 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-02 03:15:58 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-7511-20260202-031558\n2026-02-02 03:15:58 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:15:58 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00] 未发现需要抓取的小票\n2026-02-02 03:15:58 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-02 03:15:58 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-7512-20260202-031558\n2026-02-02 03:15:58 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-02 03:15:58 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:15:58 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-02 03:15:59 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-7513-20260202-031559\n2026-02-02 03:15:59 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-02 03:15:59 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:15:59 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 03:15:59 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-7514-20260202-031559\n2026-02-02 03:15:59 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-02 03:15:59 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:16:01 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-02 03:16:01 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-7515-20260202-031601\n2026-02-02 03:16:01 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-02 03:16:01 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:16:02 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 4, 'inserted': 0, 'updated': 0, 'skipped': 4, 'errors': 0}\n2026-02-02 03:16:02 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-7516-20260202-031602\n2026-02-02 03:16:02 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-02 03:16:02 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:16:03 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 0, 'updated': 0, 'skipped': 172, 'errors': 0}\n2026-02-02 03:16:03 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-7517-20260202-031603\n2026-02-02 03:16:03 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-02 03:16:03 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:16:25 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10152, 'inserted': 0, 'updated': 0, 'skipped': 10152, 'errors': 0}\n2026-02-02 03:16:25 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-7518-20260202-031625\n2026-02-02 03:16:25 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-02 03:16:25 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:16:32 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1785, 'inserted': 0, 'updated': 0, 'skipped': 1785, 'errors': 0}\n2026-02-02 03:16:32 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-7519-20260202-031632\n2026-02-02 03:16:32 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-02 03:16:32 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:17:00 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2475, 'inserted': 0, 'updated': 0, 'skipped': 2475, 'errors': 0}\n2026-02-02 03:17:00 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-7520-20260202-031700\n2026-02-02 03:17:00 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-02 03:17:00 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:17:01 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 0, 'updated': 0, 'skipped': 74, 'errors': 0}\n2026-02-02 03:17:01 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-7521-20260202-031701\n2026-02-02 03:17:01 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-02 03:17:01 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:17:02 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-02 03:17:02 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-7522-20260202-031702\n2026-02-02 03:17:02 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-02 03:17:02 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:17:03 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 1, 'updated': 0, 'skipped': 171, 'errors': 0}\n2026-02-02 03:17:03 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-7523-20260202-031703\n2026-02-02 03:17:03 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-02 03:17:03 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:17:04 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 40, 'inserted': 0, 'updated': 0, 'skipped': 40, 'errors': 0}\n2026-02-02 03:17:04 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-7524-20260202-031704\n2026-02-02 03:17:04 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-02 03:17:04 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:17:06 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 1, 'updated': 0, 'skipped': 68, 'errors': 0}\n2026-02-02 03:17:06 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-7525-20260202-031706\n2026-02-02 03:17:06 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-02 03:17:06 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:17:49 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17473, 'inserted': 0, 'updated': 0, 'skipped': 17473, 'errors': 0}\n2026-02-02 03:17:49 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-7526-20260202-031749\n2026-02-02 03:17:49 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-02 03:17:49 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:17:49 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 19, 'inserted': 1, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-02 03:17:49 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-7527-20260202-031749\n2026-02-02 03:17:49 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-02 03:17:49 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:18:31 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8250, 'inserted': 0, 'updated': 0, 'skipped': 8250, 'errors': 0}\n2026-02-02 03:18:31 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-7528-20260202-031831\n2026-02-02 03:18:31 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-02 03:18:31 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:18:58 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11956, 'inserted': 0, 'updated': 0, 'skipped': 11956, 'errors': 0}\n2026-02-02 03:18:58 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-7529-20260202-031858\n2026-02-02 03:18:58 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-02 03:18:58 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:18:58 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 15, 'inserted': 0, 'updated': 0, 'skipped': 15, 'errors': 0}\n2026-02-02 03:18:58 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-7530-20260202-031858\n2026-02-02 03:18:58 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-02 03:18:58 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:19:00 [ERROR] etl_billiards: ODS_MEMBER_CARD ODS 任务失败\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.DatatypeMismatch: 错误: 字段 \"able_share_member_discount\" 的类型为 boolean, 但表达式的类型为 integer\nLINE 1: ...9df46f9b236457e1d44e86ab2d7e0d93209dc530a51998e5',1,100.0,10...\n ^\nHINT: 你需要重写或转换表达式\n2026-02-02 03:19:00 [ERROR] etl_billiards: 任务 ODS_MEMBER_CARD 失败: 错误: 字段 \"able_share_member_discount\" 的类型为 boolean, 但表达式的类型为 integer\nLINE 1: ...9df46f9b236457e1d44e86ab2d7e0d93209dc530a51998e5',1,100.0,10...\n ^\nHINT: 你需要重写或转换表达式\nTraceback (most recent call last):\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 112, in run_tasks\n self._run_single_task(task_code, run_uuid, store_id)\n ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 168, in _run_single_task\n result, _ = self._execute_ods_record_and_load(task_code, cursor_data, fetch_dir, run_id)\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\orchestration\\scheduler.py\", line 297, in _execute_ods_record_and_load\n result = task.execute(cursor_data)\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 124, in execute\n inserted, skipped = self._insert_records_schema_aware(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n table=spec.table_name,\n ^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n source_endpoint=spec.endpoint if spec.include_source_endpoint else None,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\tasks\\ods_tasks.py\", line 462, in _insert_records_schema_aware\n execute_values(cur, sql, chunk, page_size=len(chunk))\n ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\ProgramData\\miniconda3\\Lib\\site-packages\\psycopg2\\extras.py\", line 1299, in execute_values\n cur.execute(b''.join(parts))\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^\npsycopg2.errors.DatatypeMismatch: 错误: 字段 \"able_share_member_discount\" 的类型为 boolean, 但表达式的类型为 integer\nLINE 1: ...9df46f9b236457e1d44e86ab2d7e0d93209dc530a51998e5',1,100.0,10...\n ^\nHINT: 你需要重写或转换表达式\n2026-02-02 03:19:00 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7531-20260202-031900\n2026-02-02 03:19:00 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n2026-02-02 03:19:00 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7531-20260202-031900\n2026-02-02 03:19:00 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-01 23:15:55+08:00 ~ 2026-02-02 05:15:55+08:00]\n2026-02-02 03:19:00 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-02 03:19:01 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site用时 0.38s\n2026-02-02 03:19:01 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-02 03:19:01 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_site_ex用时 0.51s\n2026-02-02 03:19:01 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-02 03:19:01 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table用时 0.17s\n2026-02-02 03:19:01 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-02 03:19:02 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_table_ex用时 0.17s\n2026-02-02 03:19:02 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-02 03:19:02 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant用时 0.18s\n2026-02-02 03:19:02 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-02 03:19:02 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_assistant_ex用时 0.23s\n2026-02-02 03:19:02 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-02 03:19:02 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member用时 0.25s\n2026-02-02 03:19:02 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-02 03:19:02 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_ex用时 0.21s\n2026-02-02 03:19:02 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-02 03:19:03 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account用时 0.33s\n2026-02-02 03:19:03 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-02 03:19:03 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_member_card_account_ex用时 0.56s\n2026-02-02 03:19:03 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-02 03:19:03 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods用时 0.20s\n2026-02-02 03:19:03 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-02 03:19:04 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_tenant_goods_ex用时 0.19s\n2026-02-02 03:19:04 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-02 03:19:04 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods用时 0.20s\n2026-02-02 03:19:04 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-02 03:19:04 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_store_goods_ex用时 0.21s\n2026-02-02 03:19:04 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-02 03:19:04 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_goods_category用时 0.17s\n2026-02-02 03:19:04 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-02 03:19:04 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package用时 0.18s\n2026-02-02 03:19:04 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-02 03:19:05 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dim_groupbuy_package_ex用时 0.17s\n2026-02-02 03:19:05 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-02 03:19:05 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head用时 0.22s\n2026-02-02 03:19:05 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-02 03:19:05 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_settlement_head_ex用时 0.23s\n2026-02-02 03:19:05 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-02 03:19:05 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log用时 0.21s\n2026-02-02 03:19:05 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-02 03:19:05 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_log_ex用时 0.21s\n2026-02-02 03:19:05 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-02 03:19:06 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust用时 0.20s\n2026-02-02 03:19:06 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-02 03:19:06 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_table_fee_adjust_ex用时 0.19s\n2026-02-02 03:19:06 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-02 03:19:06 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale用时 0.21s\n2026-02-02 03:19:06 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-02 03:19:06 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_store_goods_sale_ex用时 0.20s\n2026-02-02 03:19:06 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-02 03:19:07 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log用时 0.24s\n2026-02-02 03:19:07 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-02 03:19:07 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_service_log_ex用时 0.20s\n2026-02-02 03:19:07 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-02 03:19:07 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event用时 0.19s\n2026-02-02 03:19:07 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-02 03:19:07 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_assistant_trash_event_ex用时 0.20s\n2026-02-02 03:19:07 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-02 03:19:07 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change用时 0.19s\n2026-02-02 03:19:07 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-02 03:19:07 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_member_balance_change_ex用时 0.20s\n2026-02-02 03:19:07 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-02 03:19:08 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption用时 0.20s\n2026-02-02 03:19:08 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-02 03:19:08 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_groupbuy_redemption_ex用时 0.20s\n2026-02-02 03:19:08 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 03:19:08 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption用时 0.20s\n2026-02-02 03:19:08 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-02 03:19:08 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_platform_coupon_redemption_ex用时 0.20s\n2026-02-02 03:19:08 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-02 03:19:08 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order用时 0.20s\n2026-02-02 03:19:08 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-02 03:19:09 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_recharge_order_ex用时 0.21s\n2026-02-02 03:19:09 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-02 03:19:09 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_payment用时 0.22s\n2026-02-02 03:19:09 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-02 03:19:09 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund用时 0.19s\n2026-02-02 03:19:09 [INFO] etl_billiards: DWD 装载开始billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-02 03:19:09 [INFO] etl_billiards: DWD 装载完成billiards_dwd.dwd_refund_ex用时 0.19s\n2026-02-02 03:19:09 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'billiards_dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 0, 'skipped': 1}, {'table': 'billiards_dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 0, 'skipped': 74}, {'table': 'billiards_dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 0, 'skipped': 69}, {'table': 'billiards_dwd.dim_assistant_ex', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 1, 'skipped': 68}, {'table': 'billiards_dwd.dim_member', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 556, 'inserted': 0, 'updated': 0, 'skipped': 556}, {'table': 'billiards_dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_member_card_account_ex', 'mode': 'SCD2', 'processed': 945, 'inserted': 0, 'updated': 0, 'skipped': 945}, {'table': 'billiards_dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 0, 'updated': 0, 'skipped': 173}, {'table': 'billiards_dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 172, 'inserted': 0, 'updated': 0, 'skipped': 172}, {'table': 'billiards_dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 0, 'skipped': 26}, {'table': 'billiards_dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 0, 'skipped': 34}, {'table': 'billiards_dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'billiards_dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}], 'errors': []}\n2026-02-02 03:19:09 [INFO] etl_billiards: 所有任务执行完成\n2026-02-02 03:19:09 [INFO] etl_billiards: ETL运行完成\n",
"error": ""
}
],
"created_at": "2026-02-02T03:15:21.512369",
"updated_at": "2026-02-03T17:30:44.801339"
}
}
}