{ "tasks": { "771c025b": { "id": "771c025b", "name": "日常同步 (2h)", "task_codes": [ "ODS_TENANT_GOODS", "ODS_GOODS_CATEGORY", "ODS_RECHARGE_SETTLE", "ODS_ASSISTANT_ABOLISH", "ODS_ASSISTANT_ACCOUNT", "ODS_PAYMENT", "ODS_STORE_GOODS", "ODS_GROUP_BUY_REDEMPTION", "ODS_INVENTORY_STOCK", "ODS_GROUP_PACKAGE", "ODS_PLATFORM_COUPON", "ODS_ASSISTANT_LEDGER", "ODS_STORE_GOODS_SALES", "ODS_MEMBER_BALANCE", "ODS_SETTLEMENT_RECORDS", "ODS_REFUND", "ODS_TABLE_FEE_DISCOUNT", "ODS_SETTLEMENT_TICKET", "ODS_TABLES", "ODS_TABLE_USE", "ODS_MEMBER", "ODS_INVENTORY_CHANGE", "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-01T23:28:41.246703", "next_run": "2026-02-02T00:28:41.246703", "run_count": 1, "last_status": "成功", "execution_history": [ { "task_id": "2cb92566", "executed_at": "2026-02-01T23:28:41.246703", "status": "success", "exit_code": 0, "duration_seconds": 191.25862, "summary": "【DWD 装载】维表新增: 0条, 维表更新: 1条, 事实表新增: 2条, 事实表更新: 0条\n 维表: dim_store_goods: +0, ~1\n 事实表: dwd_settlement_head: +1, ~0, dwd_payment: +1, ~0\n【错误】2026-02-01 23:28:42 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0,; 2026-02-01 23:28:43 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0,; 2026-02-01 23:28:43 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0\n【结果】✓ etl_billiards: ETL运行完成", "output": "[工作目录] C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\n[执行命令] python -m cli.main --tasks ODS_TENANT_GOODS,ODS_GOODS_CATEGORY,ODS_RECHARGE_SETTLE,ODS_ASSISTANT_ABOLISH,ODS_ASSISTANT_ACCOUNT,ODS_PAYMENT,ODS_STORE_GOODS,ODS_GROUP_BUY_REDEMPTION,ODS_INVENTORY_STOCK,ODS_GROUP_PACKAGE,ODS_PLATFORM_COUPON,ODS_ASSISTANT_LEDGER,ODS_STORE_GOODS_SALES,ODS_MEMBER_BALANCE,ODS_SETTLEMENT_RECORDS,ODS_REFUND,ODS_TABLE_FEE_DISCOUNT,ODS_SETTLEMENT_TICKET,ODS_TABLES,ODS_TABLE_USE,ODS_MEMBER,ODS_INVENTORY_CHANGE,ODS_MEMBER_CARD,DWD_LOAD_FROM_ODS --pipeline-flow FULL --window-start 2026-02-01 21:28:41 --window-end 2026-02-01 23:28:41\n2026-02-01 23:28:41 [INFO] etl_billiards: 配置加载完成\n2026-02-01 23:28:41 [INFO] etl_billiards: 门店ID: 2790685415443269\n2026-02-01 23:28:41 [INFO] etl_billiards: 任务列表: ['ODS_TENANT_GOODS', 'ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_ASSISTANT_ABOLISH', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PAYMENT', 'ODS_STORE_GOODS', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_INVENTORY_STOCK', 'ODS_GROUP_PACKAGE', 'ODS_PLATFORM_COUPON', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS_SALES', 'ODS_MEMBER_BALANCE', 'ODS_SETTLEMENT_RECORDS', 'ODS_REFUND', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_SETTLEMENT_TICKET', 'ODS_TABLES', 'ODS_TABLE_USE', 'ODS_MEMBER', 'ODS_INVENTORY_CHANGE', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS']\n2026-02-01 23:28:41 [INFO] etl_billiards: 开始运行任务: ['ODS_TENANT_GOODS', 'ODS_GOODS_CATEGORY', 'ODS_RECHARGE_SETTLE', 'ODS_ASSISTANT_ABOLISH', 'ODS_ASSISTANT_ACCOUNT', 'ODS_PAYMENT', 'ODS_STORE_GOODS', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_INVENTORY_STOCK', 'ODS_GROUP_PACKAGE', 'ODS_PLATFORM_COUPON', 'ODS_ASSISTANT_LEDGER', 'ODS_STORE_GOODS_SALES', 'ODS_MEMBER_BALANCE', 'ODS_SETTLEMENT_RECORDS', 'ODS_REFUND', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_SETTLEMENT_TICKET', 'ODS_TABLES', 'ODS_TABLE_USE', 'ODS_MEMBER', 'ODS_INVENTORY_CHANGE', 'ODS_MEMBER_CARD', 'DWD_LOAD_FROM_ODS'], run_uuid=e889270a378745498e3c92ae97b7d500\n2026-02-01 23:28:41 [INFO] etl_billiards: ODS_TENANT_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_TENANT_GOODS\\ODS_TENANT_GOODS-7371-20260201-232841\n2026-02-01 23:28:41 [INFO] etl_billiards: 开始执行ODS_TENANT_GOODS (ODS)\n2026-02-01 23:28:41 [INFO] etl_billiards: ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:28:42 [INFO] etl_billiards: ODS_TENANT_GOODS ODS 任务完成: {'fetched': 173, 'inserted': 0, 'updated': 0, 'skipped': 173, 'errors': 0}\n2026-02-01 23:28:43 [INFO] etl_billiards: ODS_GOODS_CATEGORY: ODS fetch+load start, dir=export\\JSON\\ODS_GOODS_CATEGORY\\ODS_GOODS_CATEGORY-7372-20260201-232843\n2026-02-01 23:28:43 [INFO] etl_billiards: 开始执行ODS_GOODS_CATEGORY (ODS)\n2026-02-01 23:28:43 [INFO] etl_billiards: ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:28:43 [INFO] etl_billiards: ODS_GOODS_CATEGORY ODS 任务完成: {'fetched': 9, 'inserted': 0, 'updated': 0, 'skipped': 9, 'errors': 0}\n2026-02-01 23:28:43 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=export\\JSON\\ODS_RECHARGE_SETTLE\\ODS_RECHARGE_SETTLE-7373-20260201-232843\n2026-02-01 23:28:43 [INFO] etl_billiards: 开始执行ODS_RECHARGE_SETTLE (ODS)\n2026-02-01 23:28:43 [INFO] etl_billiards: ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:28:43 [INFO] etl_billiards: ODS_RECHARGE_SETTLE ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-01 23:28:43 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ABOLISH\\ODS_ASSISTANT_ABOLISH-7374-20260201-232843\n2026-02-01 23:28:43 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ABOLISH (ODS)\n2026-02-01 23:28:43 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:28:44 [INFO] etl_billiards: ODS_ASSISTANT_ABOLISH ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-01 23:28:44 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_ACCOUNT\\ODS_ASSISTANT_ACCOUNT-7375-20260201-232844\n2026-02-01 23:28:44 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_ACCOUNT (ODS)\n2026-02-01 23:28:44 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:28:45 [INFO] etl_billiards: ODS_ASSISTANT_ACCOUNT ODS 任务完成: {'fetched': 69, 'inserted': 0, 'updated': 0, 'skipped': 69, 'errors': 0}\n2026-02-01 23:28:45 [INFO] etl_billiards: ODS_PAYMENT: ODS fetch+load start, dir=export\\JSON\\ODS_PAYMENT\\ODS_PAYMENT-7376-20260201-232845\n2026-02-01 23:28:45 [INFO] etl_billiards: 开始执行ODS_PAYMENT (ODS)\n2026-02-01 23:28:45 [INFO] etl_billiards: ODS_PAYMENT: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:29:11 [INFO] etl_billiards: ODS_PAYMENT ODS 任务完成: {'fetched': 11941, 'inserted': 1, 'updated': 0, 'skipped': 11940, 'errors': 0}\n2026-02-01 23:29:11 [INFO] etl_billiards: ODS_STORE_GOODS: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS\\ODS_STORE_GOODS-7377-20260201-232911\n2026-02-01 23:29:11 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS (ODS)\n2026-02-01 23:29:11 [INFO] etl_billiards: ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:29:11 [INFO] etl_billiards: ODS_STORE_GOODS ODS 任务完成: {'fetched': 172, 'inserted': 1, 'updated': 0, 'skipped': 171, 'errors': 0}\n2026-02-01 23:29:12 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_BUY_REDEMPTION\\ODS_GROUP_BUY_REDEMPTION-7378-20260201-232912\n2026-02-01 23:29:12 [INFO] etl_billiards: 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)\n2026-02-01 23:29:12 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:29:51 [INFO] etl_billiards: ODS_GROUP_BUY_REDEMPTION ODS 任务完成: {'fetched': 8245, 'inserted': 0, 'updated': 0, 'skipped': 8245, 'errors': 0}\n2026-02-01 23:29:51 [INFO] etl_billiards: ODS_INVENTORY_STOCK: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_STOCK\\ODS_INVENTORY_STOCK-7379-20260201-232951\n2026-02-01 23:29:51 [INFO] etl_billiards: 开始执行ODS_INVENTORY_STOCK (ODS)\n2026-02-01 23:29:51 [INFO] etl_billiards: ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:29:52 [INFO] etl_billiards: ODS_INVENTORY_STOCK ODS 任务完成: {'fetched': 172, 'inserted': 1, 'updated': 0, 'skipped': 171, 'errors': 0}\n2026-02-01 23:29:52 [INFO] etl_billiards: ODS_GROUP_PACKAGE: ODS fetch+load start, dir=export\\JSON\\ODS_GROUP_PACKAGE\\ODS_GROUP_PACKAGE-7380-20260201-232952\n2026-02-01 23:29:52 [INFO] etl_billiards: 开始执行ODS_GROUP_PACKAGE (ODS)\n2026-02-01 23:29:52 [INFO] etl_billiards: ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:29:52 [INFO] etl_billiards: ODS_GROUP_PACKAGE ODS 任务完成: {'fetched': 18, 'inserted': 0, 'updated': 0, 'skipped': 18, 'errors': 0}\n2026-02-01 23:29:52 [INFO] etl_billiards: ODS_PLATFORM_COUPON: ODS fetch+load start, dir=export\\JSON\\ODS_PLATFORM_COUPON\\ODS_PLATFORM_COUPON-7381-20260201-232952\n2026-02-01 23:29:52 [INFO] etl_billiards: 开始执行ODS_PLATFORM_COUPON (ODS)\n2026-02-01 23:29:52 [INFO] etl_billiards: ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:30:35 [INFO] etl_billiards: ODS_PLATFORM_COUPON ODS 任务完成: {'fetched': 17470, 'inserted': 0, 'updated': 0, 'skipped': 17470, 'errors': 0}\n2026-02-01 23:30:35 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=export\\JSON\\ODS_ASSISTANT_LEDGER\\ODS_ASSISTANT_LEDGER-7382-20260201-233035\n2026-02-01 23:30:35 [INFO] etl_billiards: 开始执行ODS_ASSISTANT_LEDGER (ODS)\n2026-02-01 23:30:35 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:30:36 [INFO] etl_billiards: ODS_ASSISTANT_LEDGER ODS 任务完成: {'fetched': 6, 'inserted': 0, 'updated': 0, 'skipped': 6, 'errors': 0}\n2026-02-01 23:30:36 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=export\\JSON\\ODS_STORE_GOODS_SALES\\ODS_STORE_GOODS_SALES-7383-20260201-233036\n2026-02-01 23:30:36 [INFO] etl_billiards: 开始执行ODS_STORE_GOODS_SALES (ODS)\n2026-02-01 23:30:36 [INFO] etl_billiards: ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:30:36 [INFO] etl_billiards: ODS_STORE_GOODS_SALES ODS 任务完成: {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}\n2026-02-01 23:30:36 [INFO] etl_billiards: ODS_MEMBER_BALANCE: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_BALANCE\\ODS_MEMBER_BALANCE-7384-20260201-233036\n2026-02-01 23:30:36 [INFO] etl_billiards: 开始执行ODS_MEMBER_BALANCE (ODS)\n2026-02-01 23:30:36 [INFO] etl_billiards: ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:31:04 [INFO] etl_billiards: ODS_MEMBER_BALANCE ODS 任务完成: {'fetched': 2470, 'inserted': 0, 'updated': 0, 'skipped': 2470, 'errors': 0}\n2026-02-01 23:31:04 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_RECORDS\\ODS_SETTLEMENT_RECORDS-7385-20260201-233104\n2026-02-01 23:31:04 [INFO] etl_billiards: 开始执行ODS_SETTLEMENT_RECORDS (ODS)\n2026-02-01 23:31:04 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:31:05 [INFO] etl_billiards: ODS_SETTLEMENT_RECORDS ODS 任务完成: {'fetched': 44, 'inserted': 1, 'updated': 0, 'skipped': 43, 'errors': 0}\n2026-02-01 23:31:05 [INFO] etl_billiards: ODS_REFUND: ODS fetch+load start, dir=export\\JSON\\ODS_REFUND\\ODS_REFUND-7386-20260201-233105\n2026-02-01 23:31:05 [INFO] etl_billiards: 开始执行ODS_REFUND (ODS)\n2026-02-01 23:31:05 [INFO] etl_billiards: ODS_REFUND: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:31:05 [INFO] etl_billiards: ODS_REFUND ODS 任务完成: {'fetched': 40, 'inserted': 0, 'updated': 0, 'skipped': 40, 'errors': 0}\n2026-02-01 23:31:06 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_FEE_DISCOUNT\\ODS_TABLE_FEE_DISCOUNT-7387-20260201-233106\n2026-02-01 23:31:06 [INFO] etl_billiards: 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)\n2026-02-01 23:31:06 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:31:13 [INFO] etl_billiards: ODS_TABLE_FEE_DISCOUNT ODS 任务完成: {'fetched': 1783, 'inserted': 0, 'updated': 0, 'skipped': 1783, 'errors': 0}\n2026-02-01 23:31:13 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: ODS fetch+load start, dir=export\\JSON\\ODS_SETTLEMENT_TICKET\\ODS_SETTLEMENT_TICKET-7388-20260201-233113\n2026-02-01 23:31:13 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:31:14 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00] 未发现需要抓取的小票\n2026-02-01 23:31:14 [INFO] etl_billiards: ODS_SETTLEMENT_TICKET: 小票抓取完成,抓取=0 插入=0 更新=0 跳过=0\n2026-02-01 23:31:14 [INFO] etl_billiards: ODS_TABLES: ODS fetch+load start, dir=export\\JSON\\ODS_TABLES\\ODS_TABLES-7389-20260201-233114\n2026-02-01 23:31:14 [INFO] etl_billiards: 开始执行ODS_TABLES (ODS)\n2026-02-01 23:31:14 [INFO] etl_billiards: ODS_TABLES: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:31:14 [INFO] etl_billiards: ODS_TABLES ODS 任务完成: {'fetched': 74, 'inserted': 1, 'updated': 0, 'skipped': 73, 'errors': 0}\n2026-02-01 23:31:15 [INFO] etl_billiards: ODS_TABLE_USE: ODS fetch+load start, dir=export\\JSON\\ODS_TABLE_USE\\ODS_TABLE_USE-7390-20260201-233115\n2026-02-01 23:31:15 [INFO] etl_billiards: 开始执行ODS_TABLE_USE (ODS)\n2026-02-01 23:31:15 [INFO] etl_billiards: ODS_TABLE_USE: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:31:35 [INFO] etl_billiards: ODS_TABLE_USE ODS 任务完成: {'fetched': 10138, 'inserted': 0, 'updated': 0, 'skipped': 10138, 'errors': 0}\n2026-02-01 23:31:36 [INFO] etl_billiards: ODS_MEMBER: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER\\ODS_MEMBER-7391-20260201-233136\n2026-02-01 23:31:36 [INFO] etl_billiards: 开始执行ODS_MEMBER (ODS)\n2026-02-01 23:31:36 [INFO] etl_billiards: ODS_MEMBER: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:31:37 [INFO] etl_billiards: ODS_MEMBER ODS 任务完成: {'fetched': 556, 'inserted': 0, 'updated': 0, 'skipped': 556, 'errors': 0}\n2026-02-01 23:31:38 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=export\\JSON\\ODS_INVENTORY_CHANGE\\ODS_INVENTORY_CHANGE-7392-20260201-233138\n2026-02-01 23:31:38 [INFO] etl_billiards: 开始执行ODS_INVENTORY_CHANGE (ODS)\n2026-02-01 23:31:38 [INFO] etl_billiards: ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:31:38 [INFO] etl_billiards: ODS_INVENTORY_CHANGE ODS 任务完成: {'fetched': 75, 'inserted': 1, 'updated': 0, 'skipped': 74, 'errors': 0}\n2026-02-01 23:31:38 [INFO] etl_billiards: ODS_MEMBER_CARD: ODS fetch+load start, dir=export\\JSON\\ODS_MEMBER_CARD\\ODS_MEMBER_CARD-7393-20260201-233138\n2026-02-01 23:31:38 [INFO] etl_billiards: 开始执行ODS_MEMBER_CARD (ODS)\n2026-02-01 23:31:38 [INFO] etl_billiards: ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:31:41 [INFO] etl_billiards: ODS_MEMBER_CARD ODS 任务完成: {'fetched': 945, 'inserted': 0, 'updated': 0, 'skipped': 945, 'errors': 0}\n2026-02-01 23:31:41 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7394-20260201-233141\n2026-02-01 23:31:41 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 抓取完成,文件=None,记录数=0\n2026-02-01 23:31:41 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=export\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-7394-20260201-233141\n2026-02-01 23:31:41 [INFO] etl_billiards: DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-01 19:28:41+08:00 ~ 2026-02-02 01:28:41+08:00]\n2026-02-01 23:31:41 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dim_site <= billiards_ods.table_fee_transactions\n2026-02-01 23:31:42 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dim_site,用时 0.42s\n2026-02-01 23:31:42 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dim_site_ex <= billiards_ods.table_fee_transactions\n2026-02-01 23:31:42 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dim_site_ex,用时 0.54s\n2026-02-01 23:31:42 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dim_table <= billiards_ods.site_tables_master\n2026-02-01 23:31:43 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dim_table,用时 0.18s\n2026-02-01 23:31:43 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dim_table_ex <= billiards_ods.site_tables_master\n2026-02-01 23:31:43 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dim_table_ex,用时 0.25s\n2026-02-01 23:31:43 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dim_assistant <= billiards_ods.assistant_accounts_master\n2026-02-01 23:31:43 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dim_assistant,用时 0.18s\n2026-02-01 23:31:43 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dim_assistant_ex <= billiards_ods.assistant_accounts_master\n2026-02-01 23:31:43 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dim_assistant_ex,用时 0.20s\n2026-02-01 23:31:43 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dim_member <= billiards_ods.member_profiles\n2026-02-01 23:31:44 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dim_member,用时 0.26s\n2026-02-01 23:31:44 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dim_member_ex <= billiards_ods.member_profiles\n2026-02-01 23:31:44 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dim_member_ex,用时 0.21s\n2026-02-01 23:31:44 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dim_member_card_account <= billiards_ods.member_stored_value_cards\n2026-02-01 23:31:44 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dim_member_card_account,用时 0.55s\n2026-02-01 23:31:44 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dim_member_card_account_ex <= billiards_ods.member_stored_value_cards\n2026-02-01 23:31:45 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dim_member_card_account_ex,用时 0.78s\n2026-02-01 23:31:45 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dim_tenant_goods <= billiards_ods.tenant_goods_master\n2026-02-01 23:31:45 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dim_tenant_goods,用时 0.20s\n2026-02-01 23:31:45 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dim_tenant_goods_ex <= billiards_ods.tenant_goods_master\n2026-02-01 23:31:45 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dim_tenant_goods_ex,用时 0.19s\n2026-02-01 23:31:45 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dim_store_goods <= billiards_ods.store_goods_master\n2026-02-01 23:31:46 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dim_store_goods,用时 0.25s\n2026-02-01 23:31:46 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dim_store_goods_ex <= billiards_ods.store_goods_master\n2026-02-01 23:31:46 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dim_store_goods_ex,用时 0.26s\n2026-02-01 23:31:46 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dim_goods_category <= billiards_ods.stock_goods_category_tree\n2026-02-01 23:31:46 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dim_goods_category,用时 0.17s\n2026-02-01 23:31:46 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dim_groupbuy_package <= billiards_ods.group_buy_packages\n2026-02-01 23:31:46 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dim_groupbuy_package,用时 0.17s\n2026-02-01 23:31:46 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dim_groupbuy_package_ex <= billiards_ods.group_buy_packages\n2026-02-01 23:31:47 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dim_groupbuy_package_ex,用时 0.18s\n2026-02-01 23:31:47 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_settlement_head <= billiards_ods.settlement_records\n2026-02-01 23:31:47 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_settlement_head,用时 0.23s\n2026-02-01 23:31:47 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_settlement_head_ex <= billiards_ods.settlement_records\n2026-02-01 23:31:47 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_settlement_head_ex,用时 0.23s\n2026-02-01 23:31:47 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_table_fee_log <= billiards_ods.table_fee_transactions\n2026-02-01 23:31:47 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_table_fee_log,用时 0.41s\n2026-02-01 23:31:47 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_table_fee_log_ex <= billiards_ods.table_fee_transactions\n2026-02-01 23:31:48 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_table_fee_log_ex,用时 0.24s\n2026-02-01 23:31:48 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_table_fee_adjust <= billiards_ods.table_fee_discount_records\n2026-02-01 23:31:48 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_table_fee_adjust,用时 0.20s\n2026-02-01 23:31:48 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_table_fee_adjust_ex <= billiards_ods.table_fee_discount_records\n2026-02-01 23:31:48 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_table_fee_adjust_ex,用时 0.21s\n2026-02-01 23:31:48 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_store_goods_sale <= billiards_ods.store_goods_sales_records\n2026-02-01 23:31:48 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_store_goods_sale,用时 0.22s\n2026-02-01 23:31:48 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_store_goods_sale_ex <= billiards_ods.store_goods_sales_records\n2026-02-01 23:31:48 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_store_goods_sale_ex,用时 0.21s\n2026-02-01 23:31:48 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_assistant_service_log <= billiards_ods.assistant_service_records\n2026-02-01 23:31:49 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_assistant_service_log,用时 0.26s\n2026-02-01 23:31:49 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_assistant_service_log_ex <= billiards_ods.assistant_service_records\n2026-02-01 23:31:49 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_assistant_service_log_ex,用时 0.20s\n2026-02-01 23:31:49 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_assistant_trash_event <= billiards_ods.assistant_cancellation_records\n2026-02-01 23:31:49 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_assistant_trash_event,用时 0.20s\n2026-02-01 23:31:49 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_assistant_trash_event_ex <= billiards_ods.assistant_cancellation_records\n2026-02-01 23:31:49 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_assistant_trash_event_ex,用时 0.23s\n2026-02-01 23:31:49 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_member_balance_change <= billiards_ods.member_balance_changes\n2026-02-01 23:31:50 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_member_balance_change,用时 0.20s\n2026-02-01 23:31:50 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_member_balance_change_ex <= billiards_ods.member_balance_changes\n2026-02-01 23:31:50 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_member_balance_change_ex,用时 0.20s\n2026-02-01 23:31:50 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_groupbuy_redemption <= billiards_ods.group_buy_redemption_records\n2026-02-01 23:31:50 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_groupbuy_redemption,用时 0.23s\n2026-02-01 23:31:50 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_groupbuy_redemption_ex <= billiards_ods.group_buy_redemption_records\n2026-02-01 23:31:50 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_groupbuy_redemption_ex,用时 0.23s\n2026-02-01 23:31:50 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_platform_coupon_redemption <= billiards_ods.platform_coupon_redemption_records\n2026-02-01 23:31:50 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_platform_coupon_redemption,用时 0.21s\n2026-02-01 23:31:50 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_platform_coupon_redemption_ex <= billiards_ods.platform_coupon_redemption_records\n2026-02-01 23:31:51 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_platform_coupon_redemption_ex,用时 0.23s\n2026-02-01 23:31:51 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_recharge_order <= billiards_ods.recharge_settlements\n2026-02-01 23:31:51 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_recharge_order,用时 0.20s\n2026-02-01 23:31:51 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_recharge_order_ex <= billiards_ods.recharge_settlements\n2026-02-01 23:31:51 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_recharge_order_ex,用时 0.20s\n2026-02-01 23:31:51 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_payment <= billiards_ods.payment_transactions\n2026-02-01 23:31:51 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_payment,用时 0.28s\n2026-02-01 23:31:51 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_refund <= billiards_ods.refund_transactions\n2026-02-01 23:31:52 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_refund,用时 0.22s\n2026-02-01 23:31:52 [INFO] etl_billiards: DWD 装载开始:billiards_dwd.dwd_refund_ex <= billiards_ods.refund_transactions\n2026-02-01 23:31:52 [INFO] etl_billiards: DWD 装载完成:billiards_dwd.dwd_refund_ex,用时 0.20s\n2026-02-01 23:31: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': 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': 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': 1, 'updated': 0, 'processed': 1}, {'table': 'billiards_dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 1, 'updated': 0, 'processed': 1}, {'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': 1, 'updated': 0, 'processed': 1}, {'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-01 23:31:52 [INFO] etl_billiards: 所有任务执行完成\n2026-02-01 23:31:52 [INFO] etl_billiards: ETL运行完成\n", "error": "" } ], "created_at": "2026-02-01T23:27:58.777762", "updated_at": "2026-02-01T23:31:52.514792" } } }