Files
Neo-ZQYY/export/SYSTEM/LOGS/2026-02-21__etl_run_raw_v8.json

5 lines
50 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.
{
"execution_id": "f943bac6-23be-45c5-8b8c-a864e85a1916",
"output_log": "",
"error_log": "[2026-02-21 21:33:37] INFO | etl_billiards | 配置加载完成\n[2026-02-21 21:33:37] INFO | etl_billiards | 门店ID: 2790685415443269\n[2026-02-21 21:33:37] INFO | etl_billiards | 执行模式: Flow 模式\n[2026-02-21 21:33:37] INFO | etl_billiards | Flow 类型: api_full\n[2026-02-21 21:33:37] INFO | etl_billiards | 处理模式: full_window\n[2026-02-21 21:33:37] INFO | etl_billiards | 使用回溯时间窗口: 2026-02-20 21:33:37.837594+08:00 ~ 2026-02-21 21:33:37.837594+08:00\n[2026-02-21 21:33:37] INFO | etl_billiards | FLOW_API_FULL | 开始执行 Flow: api_full | 开始时间: 2026-02-21 21:33:37\n[2026-02-21 21:33:37] INFO | etl_billiards | Flow api_full: 执行增量 ETL层=['ODS', 'DWD', 'DWS', 'INDEX']\n[2026-02-21 21:33:37] INFO | etl_billiards | 开始运行任务: ['ODS_FETCH', 'DWD_LOAD_FROM_ODS', 'DWS_ASSISTANT_DAILY', 'DWS_ASSISTANT_MONTHLY', 'DWS_ASSISTANT_CUSTOMER', 'DWS_ASSISTANT_SALARY', 'DWS_ASSISTANT_FINANCE', 'DWS_MEMBER_CONSUMPTION', 'DWS_MEMBER_VISIT', 'DWS_GOODS_STOCK_DAILY', 'DWS_GOODS_STOCK_WEEKLY', 'DWS_GOODS_STOCK_MONTHLY', 'DWS_FINANCE_DAILY', 'DWS_FINANCE_RECHARGE', 'DWS_FINANCE_INCOME_STRUCTURE', 'DWS_FINANCE_DISCOUNT_DETAIL', 'DWS_WINBACK_INDEX', 'DWS_NEWCONV_INDEX', 'DWS_RELATION_INDEX'], run_uuid=d7db71871a7741fca4bea59fd2d0b4eb\n[2026-02-21 21:33:37] WARNING | etl_billiards | 任务 ODS_FETCH 未启用或不存在\n[2026-02-21 21:33:38] INFO | etl_billiards | DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8903-20260221-213338\n[2026-02-21 21:33:38] INFO | etl_billiards | DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0\n[2026-02-21 21:33:38] INFO | etl_billiards | DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWD_LOAD_FROM_ODS\\DWD_LOAD_FROM_ODS-8903-20260221-213338\n[2026-02-21 21:33:38] INFO | etl_billiards | DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-02-20 19:33:37.837594+08:00 ~ 2026-02-21 23:33:37.837594+08:00]\n[2026-02-21 21:33:38] INFO | etl_billiards | DWD 装载开始dwd.dim_site <= ods.table_fee_transactions\n[2026-02-21 21:33:39] INFO | etl_billiards | DWD 装载完成dwd.dim_site用时 1.22s\n[2026-02-21 21:33:39] INFO | etl_billiards | DWD 装载开始dwd.dim_site_ex <= ods.table_fee_transactions\n[2026-02-21 21:33:40] INFO | etl_billiards | DWD 装载完成dwd.dim_site_ex用时 1.08s\n[2026-02-21 21:33:40] INFO | etl_billiards | DWD 装载开始dwd.dim_table <= ods.site_tables_master\n[2026-02-21 21:33:40] INFO | etl_billiards | DWD 装载完成dwd.dim_table用时 0.58s\n[2026-02-21 21:33:40] INFO | etl_billiards | DWD 装载开始dwd.dim_table_ex <= ods.site_tables_master\n[2026-02-21 21:33:41] INFO | etl_billiards | DWD 装载完成dwd.dim_table_ex用时 0.65s\n[2026-02-21 21:33:41] INFO | etl_billiards | DWD 装载开始dwd.dim_assistant <= ods.assistant_accounts_master\n[2026-02-21 21:33:42] INFO | etl_billiards | DWD 装载完成dwd.dim_assistant用时 0.87s\n[2026-02-21 21:33:42] INFO | etl_billiards | DWD 装载开始dwd.dim_assistant_ex <= ods.assistant_accounts_master\n[2026-02-21 21:33:42] ERROR | etl_billiards | DWD 装载失败dwd.dim_assistant_ex用时 0.47serr=year -1 is out of range\nTraceback (most recent call last):\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\tasks\\dwd\\dwd_load_task.py\", line 683, in load\n dim_counts = self._merge_dim(cur, dwd_table, ods_table, dwd_cols, ods_cols, now)\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\tasks\\dwd\\dwd_load_task.py\", line 840, in _merge_dim\n return self._merge_dim_scd2(cur, dwd_table, ods_table, dwd_cols, ods_cols, now)\n ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\tasks\\dwd\\dwd_load_task.py\", line 954, in _merge_dim_scd2\n current_rows = cur.fetchall() or []\n ~~~~~~~~~~~~^^\n File \"C:\\NeoZQYY\\.venv\\Lib\\site-packages\\psycopg2\\extras.py\", line 104, in fetchall\n res = super().fetchall()\nValueError: year -1 is out of range\n[2026-02-21 21:33:42] INFO | etl_billiards | DWD 装载开始dwd.dim_member <= ods.member_profiles\n[2026-02-21 21:33:44] INFO | etl_billiards | DWD 装载完成dwd.dim_member用时 1.02s\n[2026-02-21 21:33:44] INFO | etl_billiards | DWD 装载开始dwd.dim_member_ex <= ods.member_profiles\n[2026-02-21 21:33:44] INFO | etl_billiards | DWD 装载完成dwd.dim_member_ex用时 0.78s\n[2026-02-21 21:33:44] INFO | etl_billiards | DWD 装载开始dwd.dim_member_card_account <= ods.member_stored_value_cards\n[2026-02-21 21:33:46] INFO | etl_billiards | DWD 装载完成dwd.dim_member_card_account用时 1.86s\n[2026-02-21 21:33:46] INFO | etl_billiards | DWD 装载开始dwd.dim_member_card_account_ex <= ods.member_stored_value_cards\n[2026-02-21 21:33:47] ERROR | etl_billiards | DWD 装载失败dwd.dim_member_card_account_ex用时 0.88serr=year -1 is out of range\nTraceback (most recent call last):\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\tasks\\dwd\\dwd_load_task.py\", line 683, in load\n dim_counts = self._merge_dim(cur, dwd_table, ods_table, dwd_cols, ods_cols, now)\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\tasks\\dwd\\dwd_load_task.py\", line 840, in _merge_dim\n return self._merge_dim_scd2(cur, dwd_table, ods_table, dwd_cols, ods_cols, now)\n ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\tasks\\dwd\\dwd_load_task.py\", line 954, in _merge_dim_scd2\n current_rows = cur.fetchall() or []\n ~~~~~~~~~~~~^^\n File \"C:\\NeoZQYY\\.venv\\Lib\\site-packages\\psycopg2\\extras.py\", line 104, in fetchall\n res = super().fetchall()\nValueError: year -1 is out of range\n[2026-02-21 21:33:47] INFO | etl_billiards | DWD 装载开始dwd.dim_tenant_goods <= ods.tenant_goods_master\n[2026-02-21 21:33:48] INFO | etl_billiards | DWD 装载完成dwd.dim_tenant_goods用时 0.67s\n[2026-02-21 21:33:48] INFO | etl_billiards | DWD 装载开始dwd.dim_tenant_goods_ex <= ods.tenant_goods_master\n[2026-02-21 21:33:49] INFO | etl_billiards | DWD 装载完成dwd.dim_tenant_goods_ex用时 1.34s\n[2026-02-21 21:33:49] INFO | etl_billiards | DWD 装载开始dwd.dim_store_goods <= ods.store_goods_master\n[2026-02-21 21:33:50] INFO | etl_billiards | DWD 装载完成dwd.dim_store_goods用时 0.70s\n[2026-02-21 21:33:50] INFO | etl_billiards | DWD 装载开始dwd.dim_store_goods_ex <= ods.store_goods_master\n[2026-02-21 21:33:50] INFO | etl_billiards | DWD 装载完成dwd.dim_store_goods_ex用时 0.70s\n[2026-02-21 21:33:50] INFO | etl_billiards | DWD 装载开始dwd.dim_goods_category <= ods.stock_goods_category_tree\n[2026-02-21 21:33:51] INFO | etl_billiards | DWD 装载完成dwd.dim_goods_category用时 0.61s\n[2026-02-21 21:33:51] INFO | etl_billiards | DWD 装载开始dwd.dim_groupbuy_package <= ods.group_buy_packages\n[2026-02-21 21:33:52] INFO | etl_billiards | DWD 装载完成dwd.dim_groupbuy_package用时 0.58s\n[2026-02-21 21:33:52] INFO | etl_billiards | DWD 装载开始dwd.dim_groupbuy_package_ex <= ods.group_buy_packages\n[2026-02-21 21:33:52] INFO | etl_billiards | DWD 装载完成dwd.dim_groupbuy_package_ex用时 0.57s\n[2026-02-21 21:33:52] INFO | etl_billiards | DWD 装载开始dwd.dwd_settlement_head <= ods.settlement_records\n[2026-02-21 21:33:53] INFO | etl_billiards | DWD 装载完成dwd.dwd_settlement_head用时 0.93s\n[2026-02-21 21:33:53] INFO | etl_billiards | DWD 装载开始dwd.dwd_settlement_head_ex <= ods.settlement_records\n[2026-02-21 21:33:54] INFO | etl_billiards | DWD 装载完成dwd.dwd_settlement_head_ex用时 0.76s\n[2026-02-21 21:33:54] INFO | etl_billiards | DWD 装载开始dwd.dwd_table_fee_log <= ods.table_fee_transactions\n[2026-02-21 21:33:55] INFO | etl_billiards | DWD 装载完成dwd.dwd_table_fee_log用时 1.13s\n[2026-02-21 21:33:55] INFO | etl_billiards | DWD 装载开始dwd.dwd_table_fee_log_ex <= ods.table_fee_transactions\n[2026-02-21 21:33:56] INFO | etl_billiards | DWD 装载完成dwd.dwd_table_fee_log_ex用时 0.89s\n[2026-02-21 21:33:56] INFO | etl_billiards | DWD 装载开始dwd.dwd_table_fee_adjust <= ods.table_fee_discount_records\n[2026-02-21 21:33:57] INFO | etl_billiards | DWD 装载完成dwd.dwd_table_fee_adjust用时 1.21s\n[2026-02-21 21:33:57] INFO | etl_billiards | DWD 装载开始dwd.dwd_table_fee_adjust_ex <= ods.table_fee_discount_records\n[2026-02-21 21:33:58] INFO | etl_billiards | DWD 装载完成dwd.dwd_table_fee_adjust_ex用时 0.66s\n[2026-02-21 21:33:58] INFO | etl_billiards | DWD 装载开始dwd.dwd_store_goods_sale <= ods.store_goods_sales_records\n[2026-02-21 21:33:58] INFO | etl_billiards | DWD 装载完成dwd.dwd_store_goods_sale用时 0.52s\n[2026-02-21 21:33:58] INFO | etl_billiards | DWD 装载开始dwd.dwd_store_goods_sale_ex <= ods.store_goods_sales_records\n[2026-02-21 21:33:59] INFO | etl_billiards | DWD 装载完成dwd.dwd_store_goods_sale_ex用时 0.69s\n[2026-02-21 21:33:59] INFO | etl_billiards | DWD 装载开始dwd.dwd_assistant_service_log <= ods.assistant_service_records\n[2026-02-21 21:34:00] INFO | etl_billiards | DWD 装载完成dwd.dwd_assistant_service_log用时 0.59s\n[2026-02-21 21:34:00] INFO | etl_billiards | DWD 装载开始dwd.dwd_assistant_service_log_ex <= ods.assistant_service_records\n[2026-02-21 21:34:00] INFO | etl_billiards | DWD 装载完成dwd.dwd_assistant_service_log_ex用时 0.57s\n[2026-02-21 21:34:00] INFO | etl_billiards | DWD 装载开始dwd.dwd_assistant_trash_event <= ods.assistant_cancellation_records\n[2026-02-21 21:34:01] INFO | etl_billiards | DWD 装载完成dwd.dwd_assistant_trash_event用时 0.53s\n[2026-02-21 21:34:01] INFO | etl_billiards | DWD 装载开始dwd.dwd_assistant_trash_event_ex <= ods.assistant_cancellation_records\n[2026-02-21 21:34:01] INFO | etl_billiards | DWD 装载完成dwd.dwd_assistant_trash_event_ex用时 0.51s\n[2026-02-21 21:34:01] INFO | etl_billiards | DWD 装载开始dwd.dwd_member_balance_change <= ods.member_balance_changes\n[2026-02-21 21:34:02] INFO | etl_billiards | DWD 装载完成dwd.dwd_member_balance_change用时 0.55s\n[2026-02-21 21:34:02] INFO | etl_billiards | DWD 装载开始dwd.dwd_member_balance_change_ex <= ods.member_balance_changes\n[2026-02-21 21:34:02] INFO | etl_billiards | DWD 装载完成dwd.dwd_member_balance_change_ex用时 0.56s\n[2026-02-21 21:34:02] INFO | etl_billiards | DWD 装载开始dwd.dwd_groupbuy_redemption <= ods.group_buy_redemption_records\n[2026-02-21 21:34:03] INFO | etl_billiards | DWD 装载完成dwd.dwd_groupbuy_redemption用时 0.67s\n[2026-02-21 21:34:03] INFO | etl_billiards | DWD 装载开始dwd.dwd_groupbuy_redemption_ex <= ods.group_buy_redemption_records\n[2026-02-21 21:34:04] INFO | etl_billiards | DWD 装载完成dwd.dwd_groupbuy_redemption_ex用时 0.63s\n[2026-02-21 21:34:04] INFO | etl_billiards | DWD 装载开始dwd.dwd_platform_coupon_redemption <= ods.platform_coupon_redemption_records\n[2026-02-21 21:34:05] INFO | etl_billiards | DWD 装载完成dwd.dwd_platform_coupon_redemption用时 1.68s\n[2026-02-21 21:34:05] INFO | etl_billiards | DWD 装载开始dwd.dwd_platform_coupon_redemption_ex <= ods.platform_coupon_redemption_records\n[2026-02-21 21:34:06] INFO | etl_billiards | DWD 装载完成dwd.dwd_platform_coupon_redemption_ex用时 0.99s\n[2026-02-21 21:34:06] INFO | etl_billiards | DWD 装载开始dwd.dwd_recharge_order <= ods.recharge_settlements\n[2026-02-21 21:34:07] INFO | etl_billiards | DWD 装载完成dwd.dwd_recharge_order用时 0.58s\n[2026-02-21 21:34:07] INFO | etl_billiards | DWD 装载开始dwd.dwd_recharge_order_ex <= ods.recharge_settlements\n[2026-02-21 21:34:08] INFO | etl_billiards | DWD 装载完成dwd.dwd_recharge_order_ex用时 0.68s\n[2026-02-21 21:34:08] INFO | etl_billiards | DWD 装载开始dwd.dwd_payment <= ods.payment_transactions\n[2026-02-21 21:34:09] INFO | etl_billiards | DWD 装载完成dwd.dwd_payment用时 0.96s\n[2026-02-21 21:34:09] INFO | etl_billiards | DWD 装载开始dwd.dwd_refund <= ods.refund_transactions\n[2026-02-21 21:34:09] INFO | etl_billiards | DWD 装载完成dwd.dwd_refund用时 0.54s\n[2026-02-21 21:34:09] INFO | etl_billiards | DWD 装载开始dwd.dwd_refund_ex <= ods.refund_transactions\n[2026-02-21 21:34:10] INFO | etl_billiards | DWD 装载完成dwd.dwd_refund_ex用时 0.52s\n[2026-02-21 21:34:10] INFO | etl_billiards | DWD 装载开始dwd.dwd_goods_stock_summary <= ods.goods_stock_summary\n[2026-02-21 21:34:10] INFO | etl_billiards | DWD 装载完成dwd.dwd_goods_stock_summary用时 0.52s\n[2026-02-21 21:34:10] INFO | etl_billiards | DWD 装载开始dwd.dwd_goods_stock_movement <= ods.goods_stock_movements\n[2026-02-21 21:34:11] INFO | etl_billiards | DWD 装载完成dwd.dwd_goods_stock_movement用时 0.84s\n[2026-02-21 21:34:11] INFO | etl_billiards | DWD_LOAD_FROM_ODS: 完成,统计={'tables': [{'table': 'dwd.dim_site', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 1, 'skipped': 0}, {'table': 'dwd.dim_site_ex', 'mode': 'SCD2', 'processed': 1, 'inserted': 0, 'updated': 1, 'skipped': 0}, {'table': 'dwd.dim_table', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 74, 'skipped': 0}, {'table': 'dwd.dim_table_ex', 'mode': 'SCD2', 'processed': 74, 'inserted': 0, 'updated': 74, 'skipped': 0}, {'table': 'dwd.dim_assistant', 'mode': 'SCD2', 'processed': 69, 'inserted': 0, 'updated': 69, 'skipped': 0}, {'table': 'dwd.dim_member', 'mode': 'SCD2', 'processed': 557, 'inserted': 0, 'updated': 557, 'skipped': 0}, {'table': 'dwd.dim_member_ex', 'mode': 'SCD2', 'processed': 557, 'inserted': 0, 'updated': 557, 'skipped': 0}, {'table': 'dwd.dim_member_card_account', 'mode': 'SCD2', 'processed': 946, 'inserted': 0, 'updated': 946, 'skipped': 0}, {'table': 'dwd.dim_tenant_goods', 'mode': 'SCD2', 'processed': 174, 'inserted': 1, 'updated': 173, 'skipped': 0}, {'table': 'dwd.dim_tenant_goods_ex', 'mode': 'SCD2', 'processed': 174, 'inserted': 1, 'updated': 173, 'skipped': 0}, {'table': 'dwd.dim_store_goods', 'mode': 'SCD2', 'processed': 173, 'inserted': 1, 'updated': 172, 'skipped': 0}, {'table': 'dwd.dim_store_goods_ex', 'mode': 'SCD2', 'processed': 173, 'inserted': 1, 'updated': 172, 'skipped': 0}, {'table': 'dwd.dim_goods_category', 'mode': 'SCD2', 'processed': 26, 'inserted': 0, 'updated': 26, 'skipped': 0}, {'table': 'dwd.dim_groupbuy_package', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 34, 'skipped': 0}, {'table': 'dwd.dim_groupbuy_package_ex', 'mode': 'SCD2', 'processed': 34, 'inserted': 0, 'updated': 34, 'skipped': 0}, {'table': 'dwd.dwd_settlement_head', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 10366, 'processed': 10366}, {'table': 'dwd.dwd_settlement_head_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 10366, 'processed': 10366}, {'table': 'dwd.dwd_table_fee_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 9103, 'processed': 9103}, {'table': 'dwd.dwd_table_fee_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 9103, 'processed': 9103}, {'table': 'dwd.dwd_table_fee_adjust', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 1616, 'processed': 1616}, {'table': 'dwd.dwd_table_fee_adjust_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 1616, 'processed': 1616}, {'table': 'dwd.dwd_store_goods_sale', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'dwd.dwd_store_goods_sale_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 0, 'processed': 0}, {'table': 'dwd.dwd_assistant_service_log', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 2619, 'processed': 2619}, {'table': 'dwd.dwd_assistant_service_log_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 2619, 'processed': 2619}, {'table': 'dwd.dwd_assistant_trash_event', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 78, 'processed': 78}, {'table': 'dwd.dwd_assistant_trash_event_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 78, 'processed': 78}, {'table': 'dwd.dwd_member_balance_change', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 2185, 'processed': 2185}, {'table': 'dwd.dwd_member_balance_change_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 2185, 'processed': 2185}, {'table': 'dwd.dwd_groupbuy_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 7267, 'processed': 7267}, {'table': 'dwd.dwd_groupbuy_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 7267, 'processed': 7267}, {'table': 'dwd.dwd_platform_coupon_redemption', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 18311, 'processed': 18311}, {'table': 'dwd.dwd_platform_coupon_redemption_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 18311, 'processed': 18311}, {'table': 'dwd.dwd_recharge_order', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 191, 'processed': 191}, {'table': 'dwd.dwd_recharge_order_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 191, 'processed': 191}, {'table': 'dwd.dwd_payment', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 10625, 'processed': 10625}, {'table': 'dwd.dwd_refund', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 29, 'processed': 29}, {'table': 'dwd.dwd_refund_ex', 'mode': 'INCREMENT', 'inserted': 0, 'updated': 29, 'processed': 29}, {'table': 'dwd.dwd_goods_stock_summary', 'mode': 'INCREMENT', 'inserted': 716, 'updated': 0, 'processed': 716}, {'table': 'dwd.dwd_goods_stock_movement', 'mode': 'INCREMENT', 'inserted': 14306, 'updated': 0, 'processed': 14306}], 'errors': [{'table': 'dwd.dim_assistant_ex', 'error': 'year -1 is out of range'}, {'table': 'dwd.dim_member_card_account_ex', 'error': 'year -1 is out of range'}]}\n[2026-02-21 21:34:12] INFO | etl_billiards | DWS_ASSISTANT_DAILY: 抓取阶段开始,目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_ASSISTANT_DAILY\\DWS_ASSISTANT_DAILY-8904-20260221-213412\n[2026-02-21 21:34:12] INFO | etl_billiards | DWS_ASSISTANT_DAILY: 提取数据,日期范围 2026-02-20 ~ 2026-02-21\n[2026-02-21 21:34:12] INFO | etl_billiards | DWS_ASSISTANT_DAILY: 抓取完成,文件=None记录数=0\n[2026-02-21 21:34:12] INFO | etl_billiards | DWS_ASSISTANT_DAILY: 本地清洗入库开始,源目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_ASSISTANT_DAILY\\DWS_ASSISTANT_DAILY-8904-20260221-213412\n[2026-02-21 21:34:12] INFO | etl_billiards | DWS_ASSISTANT_DAILY: 开始执行(1/1),窗口[2026-02-20 19:33:37.837594+08:00 ~ 2026-02-21 23:33:37.837594+08:00]\n[2026-02-21 21:34:12] INFO | etl_billiards | DWS_ASSISTANT_DAILY: 提取数据,日期范围 2026-02-20 ~ 2026-02-21\n[2026-02-21 21:34:12] INFO | etl_billiards | DWS_ASSISTANT_DAILY: 转换数据,服务记录 0 条,废除记录 0 条\n[2026-02-21 21:34:12] INFO | etl_billiards | DWS_ASSISTANT_DAILY: 完成,统计={'counts': {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}}\n[2026-02-21 21:34:13] INFO | etl_billiards | DWS_ASSISTANT_MONTHLY: 抓取阶段开始,目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_ASSISTANT_MONTHLY\\DWS_ASSISTANT_MONTHLY-8905-20260221-213413\n[2026-02-21 21:34:13] INFO | etl_billiards | DWS_ASSISTANT_MONTHLY: 提取数据,月份范围 ['2026-02-01']\n[2026-02-21 21:34:14] INFO | etl_billiards | DWS_ASSISTANT_MONTHLY: 抓取完成,文件=None记录数=0\n[2026-02-21 21:34:14] INFO | etl_billiards | DWS_ASSISTANT_MONTHLY: 本地清洗入库开始,源目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_ASSISTANT_MONTHLY\\DWS_ASSISTANT_MONTHLY-8905-20260221-213413\n[2026-02-21 21:34:14] INFO | etl_billiards | DWS_ASSISTANT_MONTHLY: 开始执行(1/1),窗口[2026-02-20 19:33:37.837594+08:00 ~ 2026-02-21 23:33:37.837594+08:00]\n[2026-02-21 21:34:14] INFO | etl_billiards | DWS_ASSISTANT_MONTHLY: 提取数据,月份范围 ['2026-02-01']\n[2026-02-21 21:34:14] INFO | etl_billiards | DWS_ASSISTANT_MONTHLY: 转换数据1 个月份9 条聚合记录\n[2026-02-21 21:34:15] INFO | etl_billiards | DWS_ASSISTANT_MONTHLY: 加载完成,删除 9 行,插入 9 行\n[2026-02-21 21:34:15] INFO | etl_billiards | DWS_ASSISTANT_MONTHLY: 完成,统计={'counts': {'fetched': 9, 'inserted': 9, 'updated': 0, 'skipped': 0, 'errors': 0}, 'extra': {'deleted': 9}}\n[2026-02-21 21:34:16] INFO | etl_billiards | DWS_ASSISTANT_CUSTOMER: 抓取阶段开始,目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_ASSISTANT_CUSTOMER\\DWS_ASSISTANT_CUSTOMER-8906-20260221-213416\n[2026-02-21 21:34:16] INFO | etl_billiards | DWS_ASSISTANT_CUSTOMER: 提取数据,统计日期 2026-02-21\n[2026-02-21 21:34:16] INFO | etl_billiards | DWS_ASSISTANT_CUSTOMER: 抓取完成,文件=None记录数=0\n[2026-02-21 21:34:16] INFO | etl_billiards | DWS_ASSISTANT_CUSTOMER: 本地清洗入库开始,源目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_ASSISTANT_CUSTOMER\\DWS_ASSISTANT_CUSTOMER-8906-20260221-213416\n[2026-02-21 21:34:16] INFO | etl_billiards | DWS_ASSISTANT_CUSTOMER: 开始执行(1/1),窗口[2026-02-20 19:33:37.837594+08:00 ~ 2026-02-21 23:33:37.837594+08:00]\n[2026-02-21 21:34:16] INFO | etl_billiards | DWS_ASSISTANT_CUSTOMER: 提取数据,统计日期 2026-02-21\n[2026-02-21 21:34:16] INFO | etl_billiards | DWS_ASSISTANT_CUSTOMER: 转换数据285 条服务关系记录\n[2026-02-21 21:34:33] INFO | etl_billiards | DWS_ASSISTANT_CUSTOMER: 完成,统计={'counts': {'fetched': 285, 'inserted': 285, 'updated': 0, 'skipped': 0, 'errors': 0}, 'extra': {'deleted': 285}}\n[2026-02-21 21:34:34] INFO | etl_billiards | DWS_ASSISTANT_SALARY: 抓取阶段开始,目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_ASSISTANT_SALARY\\DWS_ASSISTANT_SALARY-8907-20260221-213434\n[2026-02-21 21:34:34] INFO | etl_billiards | DWS_ASSISTANT_SALARY: 非工资结算期,跳过\n[2026-02-21 21:34:34] INFO | etl_billiards | DWS_ASSISTANT_SALARY: 抓取完成,文件=None记录数=0\n[2026-02-21 21:34:34] INFO | etl_billiards | DWS_ASSISTANT_SALARY: 本地清洗入库开始,源目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_ASSISTANT_SALARY\\DWS_ASSISTANT_SALARY-8907-20260221-213434\n[2026-02-21 21:34:34] INFO | etl_billiards | DWS_ASSISTANT_SALARY: 开始执行(1/1),窗口[2026-02-20 19:33:37.837594+08:00 ~ 2026-02-21 23:33:37.837594+08:00]\n[2026-02-21 21:34:34] INFO | etl_billiards | DWS_ASSISTANT_SALARY: 非工资结算期,跳过\n[2026-02-21 21:34:34] INFO | etl_billiards | DWS_ASSISTANT_SALARY: 无数据需要写入\n[2026-02-21 21:34:34] INFO | etl_billiards | DWS_ASSISTANT_SALARY: 完成,统计={'counts': {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}}\n[2026-02-21 21:34:34] INFO | etl_billiards | DWS_ASSISTANT_FINANCE: 抓取阶段开始,目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_ASSISTANT_FINANCE\\DWS_ASSISTANT_FINANCE-8908-20260221-213434\n[2026-02-21 21:34:35] INFO | etl_billiards | DWS_ASSISTANT_FINANCE: 抓取完成,文件=None记录数=0\n[2026-02-21 21:34:35] INFO | etl_billiards | DWS_ASSISTANT_FINANCE: 本地清洗入库开始,源目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_ASSISTANT_FINANCE\\DWS_ASSISTANT_FINANCE-8908-20260221-213434\n[2026-02-21 21:34:35] INFO | etl_billiards | DWS_ASSISTANT_FINANCE: 开始执行(1/1),窗口[2026-02-20 19:33:37.837594+08:00 ~ 2026-02-21 23:33:37.837594+08:00]\n[2026-02-21 21:34:35] INFO | etl_billiards | DWS_ASSISTANT_FINANCE: 完成,统计={'counts': {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}}\n[2026-02-21 21:34:36] INFO | etl_billiards | DWS_MEMBER_CONSUMPTION: 抓取阶段开始,目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_MEMBER_CONSUMPTION\\DWS_MEMBER_CONSUMPTION-8909-20260221-213436\n[2026-02-21 21:34:36] INFO | etl_billiards | DWS_MEMBER_CONSUMPTION: 提取数据,统计日期 2026-02-21\n[2026-02-21 21:34:36] INFO | etl_billiards | DWS_MEMBER_CONSUMPTION: 抓取完成,文件=None记录数=0\n[2026-02-21 21:34:36] INFO | etl_billiards | DWS_MEMBER_CONSUMPTION: 本地清洗入库开始,源目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_MEMBER_CONSUMPTION\\DWS_MEMBER_CONSUMPTION-8909-20260221-213436\n[2026-02-21 21:34:36] INFO | etl_billiards | DWS_MEMBER_CONSUMPTION: 开始执行(1/1),窗口[2026-02-20 19:33:37.837594+08:00 ~ 2026-02-21 23:33:37.837594+08:00]\n[2026-02-21 21:34:36] INFO | etl_billiards | DWS_MEMBER_CONSUMPTION: 提取数据,统计日期 2026-02-21\n[2026-02-21 21:34:36] INFO | etl_billiards | DWS_MEMBER_CONSUMPTION: 转换数据198 条会员消费记录\n[2026-02-21 21:34:49] INFO | etl_billiards | DWS_MEMBER_CONSUMPTION: 完成,统计={'counts': {'fetched': 198, 'inserted': 198, 'updated': 0, 'skipped': 0, 'errors': 0}, 'extra': {'deleted': 198}}\n[2026-02-21 21:34:50] INFO | etl_billiards | DWS_MEMBER_VISIT: 抓取阶段开始,目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_MEMBER_VISIT\\DWS_MEMBER_VISIT-8910-20260221-213450\n[2026-02-21 21:34:50] INFO | etl_billiards | DWS_MEMBER_VISIT: 提取数据,日期范围 2026-02-20 ~ 2026-02-21\n[2026-02-21 21:34:50] INFO | etl_billiards | DWS_MEMBER_VISIT: 抓取完成,文件=None记录数=0\n[2026-02-21 21:34:50] INFO | etl_billiards | DWS_MEMBER_VISIT: 本地清洗入库开始,源目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_MEMBER_VISIT\\DWS_MEMBER_VISIT-8910-20260221-213450\n[2026-02-21 21:34:50] INFO | etl_billiards | DWS_MEMBER_VISIT: 开始执行(1/1),窗口[2026-02-20 19:33:37.837594+08:00 ~ 2026-02-21 23:33:37.837594+08:00]\n[2026-02-21 21:34:50] INFO | etl_billiards | DWS_MEMBER_VISIT: 提取数据,日期范围 2026-02-20 ~ 2026-02-21\n[2026-02-21 21:34:51] INFO | etl_billiards | DWS_MEMBER_VISIT: 转换数据0 条结账单\n[2026-02-21 21:34:51] INFO | etl_billiards | DWS_MEMBER_VISIT: 完成,统计={'counts': {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}}\n[2026-02-21 21:34:51] INFO | etl_billiards | DWS_GOODS_STOCK_DAILY: 抓取阶段开始,目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_GOODS_STOCK_DAILY\\DWS_GOODS_STOCK_DAILY-8911-20260221-213451\n[2026-02-21 21:34:51] INFO | etl_billiards | DWS_GOODS_STOCK_DAILY: 提取数据,门店=2790685415443269日期范围 2026-02-20 ~ 2026-02-21\n[2026-02-21 21:34:52] INFO | etl_billiards | DWS_GOODS_STOCK_DAILY: 提取到 0 条 DWD 记录\n[2026-02-21 21:34:52] INFO | etl_billiards | DWS_GOODS_STOCK_DAILY: 抓取完成,文件=None记录数=0\n[2026-02-21 21:34:52] INFO | etl_billiards | DWS_GOODS_STOCK_DAILY: 本地清洗入库开始,源目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_GOODS_STOCK_DAILY\\DWS_GOODS_STOCK_DAILY-8911-20260221-213451\n[2026-02-21 21:34:52] INFO | etl_billiards | DWS_GOODS_STOCK_DAILY: 开始执行(1/1),窗口[2026-02-20 19:33:37.837594+08:00 ~ 2026-02-21 23:33:37.837594+08:00]\n[2026-02-21 21:34:52] INFO | etl_billiards | DWS_GOODS_STOCK_DAILY: 提取数据,门店=2790685415443269日期范围 2026-02-20 ~ 2026-02-21\n[2026-02-21 21:34:52] INFO | etl_billiards | DWS_GOODS_STOCK_DAILY: 提取到 0 条 DWD 记录\n[2026-02-21 21:34:52] INFO | etl_billiards | DWS_GOODS_STOCK_DAILY: 无数据需要汇总\n[2026-02-21 21:34:52] INFO | etl_billiards | DWS_GOODS_STOCK_DAILY: 完成,统计={'counts': {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}}\n[2026-02-21 21:34:54] INFO | etl_billiards | DWS_GOODS_STOCK_WEEKLY: 抓取阶段开始,目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_GOODS_STOCK_WEEKLY\\DWS_GOODS_STOCK_WEEKLY-8912-20260221-213454\n[2026-02-21 21:34:54] INFO | etl_billiards | DWS_GOODS_STOCK_WEEKLY: 提取数据,门店=2790685415443269日期范围 2026-02-20 ~ 2026-02-21\n[2026-02-21 21:34:54] INFO | etl_billiards | DWS_GOODS_STOCK_WEEKLY: 提取到 0 条 DWD 记录\n[2026-02-21 21:34:54] INFO | etl_billiards | DWS_GOODS_STOCK_WEEKLY: 抓取完成,文件=None记录数=0\n[2026-02-21 21:34:54] INFO | etl_billiards | DWS_GOODS_STOCK_WEEKLY: 本地清洗入库开始,源目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_GOODS_STOCK_WEEKLY\\DWS_GOODS_STOCK_WEEKLY-8912-20260221-213454\n[2026-02-21 21:34:54] INFO | etl_billiards | DWS_GOODS_STOCK_WEEKLY: 开始执行(1/1),窗口[2026-02-20 19:33:37.837594+08:00 ~ 2026-02-21 23:33:37.837594+08:00]\n[2026-02-21 21:34:54] INFO | etl_billiards | DWS_GOODS_STOCK_WEEKLY: 提取数据,门店=2790685415443269日期范围 2026-02-20 ~ 2026-02-21\n[2026-02-21 21:34:54] INFO | etl_billiards | DWS_GOODS_STOCK_WEEKLY: 提取到 0 条 DWD 记录\n[2026-02-21 21:34:54] INFO | etl_billiards | DWS_GOODS_STOCK_WEEKLY: 无数据需要汇总\n[2026-02-21 21:34:54] INFO | etl_billiards | DWS_GOODS_STOCK_WEEKLY: 完成,统计={'counts': {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}}\n[2026-02-21 21:34:55] INFO | etl_billiards | DWS_GOODS_STOCK_MONTHLY: 抓取阶段开始,目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_GOODS_STOCK_MONTHLY\\DWS_GOODS_STOCK_MONTHLY-8913-20260221-213455\n[2026-02-21 21:34:55] INFO | etl_billiards | DWS_GOODS_STOCK_MONTHLY: 提取数据,门店=2790685415443269日期范围 2026-02-20 ~ 2026-02-21\n[2026-02-21 21:34:55] INFO | etl_billiards | DWS_GOODS_STOCK_MONTHLY: 提取到 0 条 DWD 记录\n[2026-02-21 21:34:55] INFO | etl_billiards | DWS_GOODS_STOCK_MONTHLY: 抓取完成,文件=None记录数=0\n[2026-02-21 21:34:55] INFO | etl_billiards | DWS_GOODS_STOCK_MONTHLY: 本地清洗入库开始,源目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_GOODS_STOCK_MONTHLY\\DWS_GOODS_STOCK_MONTHLY-8913-20260221-213455\n[2026-02-21 21:34:55] INFO | etl_billiards | DWS_GOODS_STOCK_MONTHLY: 开始执行(1/1),窗口[2026-02-20 19:33:37.837594+08:00 ~ 2026-02-21 23:33:37.837594+08:00]\n[2026-02-21 21:34:55] INFO | etl_billiards | DWS_GOODS_STOCK_MONTHLY: 提取数据,门店=2790685415443269日期范围 2026-02-20 ~ 2026-02-21\n[2026-02-21 21:34:55] INFO | etl_billiards | DWS_GOODS_STOCK_MONTHLY: 提取到 0 条 DWD 记录\n[2026-02-21 21:34:55] INFO | etl_billiards | DWS_GOODS_STOCK_MONTHLY: 无数据需要汇总\n[2026-02-21 21:34:55] INFO | etl_billiards | DWS_GOODS_STOCK_MONTHLY: 完成,统计={'counts': {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}}\n[2026-02-21 21:34:57] INFO | etl_billiards | DWS_FINANCE_DAILY: 抓取阶段开始,目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_FINANCE_DAILY\\DWS_FINANCE_DAILY-8914-20260221-213457\n[2026-02-21 21:34:57] INFO | etl_billiards | DWS_FINANCE_DAILY: 提取数据,日期范围 2026-02-20 ~ 2026-02-21\n[2026-02-21 21:34:57] INFO | etl_billiards | DWS_FINANCE_DAILY: 抓取完成,文件=None记录数=0\n[2026-02-21 21:34:57] INFO | etl_billiards | DWS_FINANCE_DAILY: 本地清洗入库开始,源目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_FINANCE_DAILY\\DWS_FINANCE_DAILY-8914-20260221-213457\n[2026-02-21 21:34:57] INFO | etl_billiards | DWS_FINANCE_DAILY: 开始执行(1/1),窗口[2026-02-20 19:33:37.837594+08:00 ~ 2026-02-21 23:33:37.837594+08:00]\n[2026-02-21 21:34:57] INFO | etl_billiards | DWS_FINANCE_DAILY: 提取数据,日期范围 2026-02-20 ~ 2026-02-21\n[2026-02-21 21:34:57] INFO | etl_billiards | DWS_FINANCE_DAILY: 转换数据0 天结账数据0 天充值数据\n[2026-02-21 21:34:57] INFO | etl_billiards | DWS_FINANCE_DAILY: 完成,统计={'counts': {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}}\n[2026-02-21 21:34:58] INFO | etl_billiards | DWS_FINANCE_RECHARGE: 抓取阶段开始,目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_FINANCE_RECHARGE\\DWS_FINANCE_RECHARGE-8915-20260221-213458\n[2026-02-21 21:34:58] INFO | etl_billiards | DWS_FINANCE_RECHARGE: 抓取完成,文件=None记录数=0\n[2026-02-21 21:34:58] INFO | etl_billiards | DWS_FINANCE_RECHARGE: 本地清洗入库开始,源目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_FINANCE_RECHARGE\\DWS_FINANCE_RECHARGE-8915-20260221-213458\n[2026-02-21 21:34:58] INFO | etl_billiards | DWS_FINANCE_RECHARGE: 开始执行(1/1),窗口[2026-02-20 19:33:37.837594+08:00 ~ 2026-02-21 23:33:37.837594+08:00]\n[2026-02-21 21:34:58] INFO | etl_billiards | DWS_FINANCE_RECHARGE: 完成,统计={'counts': {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}}\n[2026-02-21 21:34:59] INFO | etl_billiards | DWS_FINANCE_INCOME_STRUCTURE: 抓取阶段开始,目录=C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\JSON\\DWS_FINANCE_INCOME_STRUCTURE\\DWS_FINANCE_INCOME_STRUCTURE-8916-20260221-213459\n[2026-02-21 21:34:59] ERROR | etl_billiards | 任务 DWS_FINANCE_INCOME_STRUCTURE 失败: 错误: 当前事务被终止, 事务块结束之前的查询被忽略\nTraceback (most recent call last):\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\orchestration\\task_executor.py\", line 215, in run_single_task\n fetch_stats = self._execute_fetch(task_code, cursor_data, fetch_dir, run_id)\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\orchestration\\task_executor.py\", line 289, in _execute_fetch\n extracted = task.extract(context)\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\tasks\\dws\\finance_income_task.py\", line 75, in extract\n income_by_type = self._extract_income_by_type(site_id, start_date, end_date)\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\tasks\\dws\\finance_income_task.py\", line 125, in _extract_income_by_type\n rows = self.db.query(sql, {\n 'site_id': site_id,\n 'start_date': start_date,\n 'end_date': end_date,\n })\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\database\\operations.py\", line 99, in query\n return self._connection.query(sql, args)\n ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\database\\connection.py\", line 50, in query\n c.execute(sql, args)\n ~~~~~~~~~^^^^^^^^^^^\n File \"C:\\NeoZQYY\\.venv\\Lib\\site-packages\\psycopg2\\extras.py\", line 236, in execute\n return super().execute(query, vars)\n ~~~~~~~~~~~~~~~^^^^^^^^^^^^^\npsycopg2.errors.UndefinedColumn: 错误: 字段 \"settle_status\" 不存在\nLINE 22: AND settle_status = 1 -- 已结账\n ^\n\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\orchestration\\task_executor.py\", line 94, in run_tasks\n task_result = self.run_single_task(\n task_code, run_uuid, store_id, data_source=data_source,\n )\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\orchestration\\task_executor.py\", line 255, in run_single_task\n self.run_tracker.update_run(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n run_id=run_id,\n ^^^^^^^^^^^^^^\n ...<3 lines>...\n error_message=str(exc),\n ^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\orchestration\\run_tracker.py\", line 105, in update_run\n self.db.execute(\n ~~~~~~~~~~~~~~~^\n sql,\n ^^^^\n ...<18 lines>...\n ),\n ^^\n )\n ^\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\database\\connection.py\", line 56, in execute\n c.execute(sql, args)\n ~~~~~~~~~^^^^^^^^^^^\npsycopg2.errors.InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略\n\n[2026-02-21 21:34:59] ERROR | etl_billiards | 任务 DWS_FINANCE_DISCOUNT_DETAIL 失败: 错误: 当前事务被终止, 事务块结束之前的查询被忽略\nTraceback (most recent call last):\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\orchestration\\task_executor.py\", line 94, in run_tasks\n task_result = self.run_single_task(\n task_code, run_uuid, store_id, data_source=data_source,\n )\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\orchestration\\task_executor.py\", line 152, in run_single_task\n task_cfg = self._load_task_config(task_code, store_id)\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\orchestration\\task_executor.py\", line 429, in _load_task_config\n rows = self.db_ops.query(sql, (store_id, task_code))\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\database\\operations.py\", line 99, in query\n return self._connection.query(sql, args)\n ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\database\\connection.py\", line 50, in query\n c.execute(sql, args)\n ~~~~~~~~~^^^^^^^^^^^\n File \"C:\\NeoZQYY\\.venv\\Lib\\site-packages\\psycopg2\\extras.py\", line 236, in execute\n return super().execute(query, vars)\n ~~~~~~~~~~~~~~~^^^^^^^^^^^^^\npsycopg2.errors.InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略\n\n[2026-02-21 21:34:59] INFO | etl_billiards | DWS_WINBACK_INDEX: 开始执行工具类任务\n[2026-02-21 21:34:59] INFO | etl_billiards | 开始计算 DWS_WINBACK_INDEX\n[2026-02-21 21:34:59] ERROR | etl_billiards | DWS_WINBACK_INDEX: 工具类任务执行失败: 错误: 当前事务被终止, 事务块结束之前的查询被忽略\nTraceback (most recent call last):\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\orchestration\\task_executor.py\", line 403, in _run_utility_task\n result = task.execute(None)\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\tasks\\dws\\index\\member_index_base.py\", line 84, in execute\n tenant_id = self._get_tenant_id()\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\tasks\\dws\\index\\member_index_base.py\", line 169, in _get_tenant_id\n rows = self.db.query(sql)\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\database\\operations.py\", line 99, in query\n return self._connection.query(sql, args)\n ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\database\\connection.py\", line 50, in query\n c.execute(sql, args)\n ~~~~~~~~~^^^^^^^^^^^\n File \"C:\\NeoZQYY\\.venv\\Lib\\site-packages\\psycopg2\\extras.py\", line 236, in execute\n return super().execute(query, vars)\n ~~~~~~~~~~~~~~~^^^^^^^^^^^^^\npsycopg2.errors.InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略\n\n[2026-02-21 21:34:59] ERROR | etl_billiards | 任务 DWS_WINBACK_INDEX 失败: 错误: 当前事务被终止, 事务块结束之前的查询被忽略\nTraceback (most recent call last):\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\orchestration\\task_executor.py\", line 94, in run_tasks\n task_result = self.run_single_task(\n task_code, run_uuid, store_id, data_source=data_source,\n )\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\orchestration\\task_executor.py\", line 150, in run_single_task\n return self._run_utility_task(task_code_upper, store_id)\n ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\orchestration\\task_executor.py\", line 403, in _run_utility_task\n result = task.execute(None)\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\tasks\\dws\\index\\member_index_base.py\", line 84, in execute\n tenant_id = self._get_tenant_id()\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\tasks\\dws\\index\\member_index_base.py\", line 169, in _get_tenant_id\n rows = self.db.query(sql)\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\database\\operations.py\", line 99, in query\n return self._connection.query(sql, args)\n ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\database\\connection.py\", line 50, in query\n c.execute(sql, args)\n ~~~~~~~~~^^^^^^^^^^^\n File \"C:\\NeoZQYY\\.venv\\Lib\\site-packages\\psycopg2\\extras.py\", line 236, in execute\n return super().execute(query, vars)\n ~~~~~~~~~~~~~~~^^^^^^^^^^^^^\npsycopg2.errors.InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略\n\n[2026-02-21 21:34:59] INFO | etl_billiards | DWS_NEWCONV_INDEX: 开始执行工具类任务\n[2026-02-21 21:34:59] INFO | etl_billiards | 开始计算 DWS_NEWCONV_INDEX\n[2026-02-21 21:34:59] ERROR | etl_billiards | DWS_NEWCONV_INDEX: 工具类任务执行失败: 错误: 当前事务被终止, 事务块结束之前的查询被忽略\nTraceback (most recent call last):\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\orchestration\\task_executor.py\", line 403, in _run_utility_task\n result = task.execute(None)\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\tasks\\dws\\index\\member_index_base.py\", line 84, in execute\n tenant_id = self._get_tenant_id()\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\tasks\\dws\\index\\member_index_base.py\", line 169, in _get_tenant_id\n rows = self.db.query(sql)\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\database\\operations.py\", line 99, in query\n return self._connection.query(sql, args)\n ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\database\\connection.py\", line 50, in query\n c.execute(sql, args)\n ~~~~~~~~~^^^^^^^^^^^\n File \"C:\\NeoZQYY\\.venv\\Lib\\site-packages\\psycopg2\\extras.py\", line 236, in execute\n return super().execute(query, vars)\n ~~~~~~~~~~~~~~~^^^^^^^^^^^^^\npsycopg2.errors.InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略\n\n[2026-02-21 21:34:59] ERROR | etl_billiards | 任务 DWS_NEWCONV_INDEX 失败: 错误: 当前事务被终止, 事务块结束之前的查询被忽略\nTraceback (most recent call last):\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\orchestration\\task_executor.py\", line 94, in run_tasks\n task_result = self.run_single_task(\n task_code, run_uuid, store_id, data_source=data_source,\n )\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\orchestration\\task_executor.py\", line 150, in run_single_task\n return self._run_utility_task(task_code_upper, store_id)\n ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\orchestration\\task_executor.py\", line 403, in _run_utility_task\n result = task.execute(None)\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\tasks\\dws\\index\\member_index_base.py\", line 84, in execute\n tenant_id = self._get_tenant_id()\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\tasks\\dws\\index\\member_index_base.py\", line 169, in _get_tenant_id\n rows = self.db.query(sql)\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\database\\operations.py\", line 99, in query\n return self._connection.query(sql, args)\n ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\database\\connection.py\", line 50, in query\n c.execute(sql, args)\n ~~~~~~~~~^^^^^^^^^^^\n File \"C:\\NeoZQYY\\.venv\\Lib\\site-packages\\psycopg2\\extras.py\", line 236, in execute\n return super().execute(query, vars)\n ~~~~~~~~~~~~~~~^^^^^^^^^^^^^\npsycopg2.errors.InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略\n\n[2026-02-21 21:34:59] INFO | etl_billiards | DWS_RELATION_INDEX: 开始执行工具类任务\n[2026-02-21 21:34:59] INFO | etl_billiards | 开始计算关系指数RS/OS/MS/ML\n[2026-02-21 21:34:59] ERROR | etl_billiards | DWS_RELATION_INDEX: 工具类任务执行失败: 错误: 当前事务被终止, 事务块结束之前的查询被忽略\nTraceback (most recent call last):\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\orchestration\\task_executor.py\", line 403, in _run_utility_task\n result = task.execute(None)\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\tasks\\dws\\index\\relation_index_task.py\", line 145, in execute\n tenant_id = self._get_tenant_id()\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\tasks\\dws\\index\\relation_index_task.py\", line 688, in _get_tenant_id\n rows = self.db.query(sql)\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\database\\operations.py\", line 99, in query\n return self._connection.query(sql, args)\n ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\database\\connection.py\", line 50, in query\n c.execute(sql, args)\n ~~~~~~~~~^^^^^^^^^^^\n File \"C:\\NeoZQYY\\.venv\\Lib\\site-packages\\psycopg2\\extras.py\", line 236, in execute\n return super().execute(query, vars)\n ~~~~~~~~~~~~~~~^^^^^^^^^^^^^\npsycopg2.errors.InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略\n\n[2026-02-21 21:34:59] ERROR | etl_billiards | 任务 DWS_RELATION_INDEX 失败: 错误: 当前事务被终止, 事务块结束之前的查询被忽略\nTraceback (most recent call last):\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\orchestration\\task_executor.py\", line 94, in run_tasks\n task_result = self.run_single_task(\n task_code, run_uuid, store_id, data_source=data_source,\n )\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\orchestration\\task_executor.py\", line 150, in run_single_task\n return self._run_utility_task(task_code_upper, store_id)\n ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\orchestration\\task_executor.py\", line 403, in _run_utility_task\n result = task.execute(None)\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\tasks\\dws\\index\\relation_index_task.py\", line 145, in execute\n tenant_id = self._get_tenant_id()\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\tasks\\dws\\index\\relation_index_task.py\", line 688, in _get_tenant_id\n rows = self.db.query(sql)\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\database\\operations.py\", line 99, in query\n return self._connection.query(sql, args)\n ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^\n File \"C:\\NeoZQYY\\apps\\etl\\connectors\\feiqiu\\database\\connection.py\", line 50, in query\n c.execute(sql, args)\n ~~~~~~~~~^^^^^^^^^^^\n File \"C:\\NeoZQYY\\.venv\\Lib\\site-packages\\psycopg2\\extras.py\", line 236, in execute\n return super().execute(query, vars)\n ~~~~~~~~~~~~~~~^^^^^^^^^^^^^\npsycopg2.errors.InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略\n\n[2026-02-21 21:34:59] INFO | etl_billiards | 所有任务执行完成\n[2026-02-21 21:35:01] INFO | etl_billiards | 一致性检查报告已生成: C:\\NeoZQYY\\export\\ETL-Connectors\\feiqiu\\REPORTS\\consistency_report_20260221_213501.md\n[2026-02-21 21:35:01] INFO | etl_billiards | 计时报告已生成\n[2026-02-21 21:35:01] INFO | etl_billiards | \n╔══════════════════════════════════════════════════════════════╗\n║ 任务执行总结 ║\n╠══════════════════════════════════════════════════════════════╣\n║ 任务代码: FLOW_API_FULL ║\n║ 执行状态: 成功 ║\n║ 执行时间: 2026-02-21 21:33:37 ~ 21:35:01 (1分24秒) ║\n╠══════════════════════════════════════════════════════════════╣\n║ 数据统计 ║\n║ - 获取记录: 0 ║\n║ - 新增记录: 0 ║\n║ - 更新记录: 0 ║\n║ - 跳过记录: 0 ║\n║ - 错误记录: 2 ║\n╚══════════════════════════════════════════════════════════════╝\n[2026-02-21 21:35:01] INFO | etl_billiards | \n╔══════════════════════════════════════════════════════════════╗\n║ 任务执行总结 ║\n╠══════════════════════════════════════════════════════════════╣\n║ 任务代码: FLOW_API_FULL ║\n║ 执行状态: 成功 ║\n║ 执行时间: 2026-02-21 21:33:37 ~ 21:35:01 (1分24秒) ║\n╠══════════════════════════════════════════════════════════════╣\n║ 数据统计 ║\n║ - 获取记录: 0 ║\n║ - 新增记录: 0 ║\n║ - 更新记录: 0 ║\n║ - 跳过记录: 0 ║\n║ - 错误记录: 2 ║\n╚══════════════════════════════════════════════════════════════╝\n[2026-02-21 21:35:01] INFO | etl_billiards | Flow 执行完成: SUCCESS\n[2026-02-21 21:35:01] INFO | etl_billiards | ETL运行完成"
}