Files
Neo-ZQYY/tmp/20260319error.md

2848 lines
206 KiB
Markdown
Raw 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.
[stderr] [2026-03-19 01:22:45] INFO | etl_billiards | 配置加载完成
[stderr] [2026-03-19 01:22:45] INFO | etl_billiards | 门店ID: 2790685415443269
[stderr] [2026-03-19 01:22:46] INFO | etl_billiards | 执行模式: Flow 模式
[stderr] [2026-03-19 01:22:46] INFO | etl_billiards | Flow 类型: api_full
[stderr] [2026-03-19 01:22:46] INFO | etl_billiards | 处理模式: full_window
[stderr] [2026-03-19 01:22:46] INFO | etl_billiards | 使用回溯时间窗口: 2026-03-18 21:22:46.318958+08:00 ~ 2026-03-19 01:22:46.318958+08:00
[stderr] [2026-03-19 01:22:46] INFO | etl_billiards | FLOW_API_FULL | 开始执行 Flow: api_full | 开始时间: 2026-03-19 01:22:46
[stderr] [2026-03-19 01:22:46] INFO | etl_billiards | Flow api_full: 执行增量 ETL层=['ODS', 'DWD', 'DWS', 'INDEX']
[stderr] [2026-03-19 01:22:46] INFO | etl_billiards | 开始运行任务: ['ODS_ASSISTANT_ACCOUNT', 'ODS_ASSISTANT_LEDGER', 'ODS_STAFF_INFO', 'ODS_SETTLEMENT_RECORDS', 'ODS_PAYMENT', 'ODS_REFUND', 'ODS_TABLE_USE', 'ODS_TABLE_FEE_DISCOUNT', 'ODS_TABLES', 'ODS_MEMBER', 'ODS_MEMBER_CARD', 'ODS_MEMBER_BALANCE', 'ODS_RECHARGE_SETTLE', 'ODS_GOODS_CATEGORY', 'ODS_STORE_GOODS', 'ODS_STORE_GOODS_SALES', 'ODS_TENANT_GOODS', 'ODS_PLATFORM_COUPON', 'ODS_GROUP_PACKAGE', 'ODS_GROUP_BUY_REDEMPTION', 'ODS_INVENTORY_STOCK', 'ODS_INVENTORY_CHANGE', 'DWD_LOAD_FROM_ODS', 'DWS_ASSISTANT_PROJECT_TAG', 'DWS_MEMBER_PROJECT_TAG', 'DWS_GOODS_STOCK_DAILY', 'DWS_GOODS_STOCK_WEEKLY', 'DWS_GOODS_STOCK_MONTHLY', 'DWS_ASSISTANT_DAILY', 'DWS_ASSISTANT_CUSTOMER', 'DWS_ASSISTANT_SALARY', 'DWS_BUILD_ORDER_SUMMARY', 'DWS_MEMBER_CONSUMPTION', 'DWS_MEMBER_VISIT', 'DWS_FINANCE_DAILY', 'DWS_FINANCE_RECHARGE', 'DWS_FINANCE_INCOME_STRUCTURE', 'DWS_FINANCE_DISCOUNT_DETAIL', 'DWS_ASSISTANT_MONTHLY', 'DWS_ASSISTANT_FINANCE', 'DWS_WINBACK_INDEX', 'DWS_NEWCONV_INDEX', 'DWS_RELATION_INDEX', 'DWS_SPENDING_POWER_INDEX'], run_uuid=772de6b68e78441cb6f052e274e777c5
[stderr] [2026-03-19 01:22:46] INFO | etl_billiards | ODS_ASSISTANT_ACCOUNT: ODS fetch+load start, dir=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\ODS_ASSISTANT_ACCOUNT\ODS_ASSISTANT_ACCOUNT-14505-20260319-012246
[stderr] [2026-03-19 01:22:46] INFO | etl_billiards | 开始执行ODS_ASSISTANT_ACCOUNT (ODS)
[stderr] [2026-03-19 01:22:46] INFO | etl_billiards | ODS_ASSISTANT_ACCOUNT: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:47] ERROR | etl_billiards | ODS_ASSISTANT_ACCOUNT ODS 任务失败
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/PersonnelManagement/SearchAssistantInfo
[stderr] [2026-03-19 01:22:47] INFO | etl_billiards | [ODS_ASSISTANT_ACCOUNT] 开始执行ODS_ASSISTANT_ACCOUNT (ODS)
[stderr] [2026-03-19 01:22:47] INFO | etl_billiards | [ODS_ASSISTANT_ACCOUNT] 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:47] ERROR | etl_billiards | [ODS_ASSISTANT_ACCOUNT] ODS 任务失败
[stderr] [2026-03-19 01:22:47] ERROR | etl_billiards | 任务 ODS_ASSISTANT_ACCOUNT 失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/PersonnelManagement/SearchAssistantInfo
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 97, in run_tasks
[stderr] task_result = self.run_single_task(
[stderr] task_code, run_uuid, store_id, data_source=data_source,
[stderr] )
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 191, in run_single_task
[stderr] result, last_dump = self._execute_ods_record_and_load(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] task_code, cursor_data, fetch_dir, run_id,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] )
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 340, in _execute_ods_record_and_load
[stderr] result = task.execute(cursor_data)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/PersonnelManagement/SearchAssistantInfo
[stderr] [2026-03-19 01:22:47] ERROR | etl_billiards | [ODS_ASSISTANT_ACCOUNT] 任务失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/PersonnelManagement/SearchAssistantInfo
[stderr] [2026-03-19 01:22:47] INFO | etl_billiards | ODS_ASSISTANT_LEDGER: ODS fetch+load start, dir=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\ODS_ASSISTANT_LEDGER\ODS_ASSISTANT_LEDGER-14506-20260319-012247
[stderr] [2026-03-19 01:22:47] INFO | etl_billiards | 开始执行ODS_ASSISTANT_LEDGER (ODS)
[stderr] [2026-03-19 01:22:47] INFO | etl_billiards | ODS_ASSISTANT_LEDGER: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:47] ERROR | etl_billiards | ODS_ASSISTANT_LEDGER ODS 任务失败
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/AssistantPerformance/GetOrderAssistantDetails
[stderr] [2026-03-19 01:22:47] INFO | etl_billiards | [ODS_ASSISTANT_LEDGER] 开始执行ODS_ASSISTANT_LEDGER (ODS)
[stderr] [2026-03-19 01:22:47] INFO | etl_billiards | [ODS_ASSISTANT_LEDGER] 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:47] ERROR | etl_billiards | [ODS_ASSISTANT_LEDGER] ODS 任务失败
[stderr] [2026-03-19 01:22:47] ERROR | etl_billiards | 任务 ODS_ASSISTANT_LEDGER 失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/AssistantPerformance/GetOrderAssistantDetails
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 97, in run_tasks
[stderr] task_result = self.run_single_task(
[stderr] task_code, run_uuid, store_id, data_source=data_source,
[stderr] )
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 191, in run_single_task
[stderr] result, last_dump = self._execute_ods_record_and_load(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] task_code, cursor_data, fetch_dir, run_id,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] )
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 340, in _execute_ods_record_and_load
[stderr] result = task.execute(cursor_data)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/AssistantPerformance/GetOrderAssistantDetails
[stderr] [2026-03-19 01:22:47] ERROR | etl_billiards | [ODS_ASSISTANT_LEDGER] 任务失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/AssistantPerformance/GetOrderAssistantDetails
[stderr] [2026-03-19 01:22:48] INFO | etl_billiards | ODS_STAFF_INFO: ODS fetch+load start, dir=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\ODS_STAFF_INFO\ODS_STAFF_INFO-14507-20260319-012248
[stderr] [2026-03-19 01:22:48] INFO | etl_billiards | 开始执行ODS_STAFF_INFO (ODS)
[stderr] [2026-03-19 01:22:48] INFO | etl_billiards | ODS_STAFF_INFO: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:48] ERROR | etl_billiards | ODS_STAFF_INFO ODS 任务失败
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/PersonnelManagement/SearchSystemStaffInfo
[stderr] [2026-03-19 01:22:48] INFO | etl_billiards | [ODS_STAFF_INFO] 开始执行ODS_STAFF_INFO (ODS)
[stderr] [2026-03-19 01:22:48] INFO | etl_billiards | [ODS_STAFF_INFO] 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:48] ERROR | etl_billiards | [ODS_STAFF_INFO] ODS 任务失败
[stderr] [2026-03-19 01:22:48] ERROR | etl_billiards | 任务 ODS_STAFF_INFO 失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/PersonnelManagement/SearchSystemStaffInfo
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 97, in run_tasks
[stderr] task_result = self.run_single_task(
[stderr] task_code, run_uuid, store_id, data_source=data_source,
[stderr] )
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 191, in run_single_task
[stderr] result, last_dump = self._execute_ods_record_and_load(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] task_code, cursor_data, fetch_dir, run_id,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] )
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 340, in _execute_ods_record_and_load
[stderr] result = task.execute(cursor_data)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/PersonnelManagement/SearchSystemStaffInfo
[stderr] [2026-03-19 01:22:48] ERROR | etl_billiards | [ODS_STAFF_INFO] 任务失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/PersonnelManagement/SearchSystemStaffInfo
[stderr] [2026-03-19 01:22:48] INFO | etl_billiards | ODS_SETTLEMENT_RECORDS: ODS fetch+load start, dir=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\ODS_SETTLEMENT_RECORDS\ODS_SETTLEMENT_RECORDS-14508-20260319-012248
[stderr] [2026-03-19 01:22:48] INFO | etl_billiards | 开始执行ODS_SETTLEMENT_RECORDS (ODS)
[stderr] [2026-03-19 01:22:48] INFO | etl_billiards | ODS_SETTLEMENT_RECORDS: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:48] ERROR | etl_billiards | ODS_SETTLEMENT_RECORDS ODS 任务失败
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetAllOrderSettleList
[stderr] [2026-03-19 01:22:48] INFO | etl_billiards | [ODS_SETTLEMENT_RECORDS] 开始执行ODS_SETTLEMENT_RECORDS (ODS)
[stderr] [2026-03-19 01:22:48] INFO | etl_billiards | [ODS_SETTLEMENT_RECORDS] 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:48] ERROR | etl_billiards | [ODS_SETTLEMENT_RECORDS] ODS 任务失败
[stderr] [2026-03-19 01:22:48] ERROR | etl_billiards | 任务 ODS_SETTLEMENT_RECORDS 失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetAllOrderSettleList
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 97, in run_tasks
[stderr] task_result = self.run_single_task(
[stderr] task_code, run_uuid, store_id, data_source=data_source,
[stderr] )
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 191, in run_single_task
[stderr] result, last_dump = self._execute_ods_record_and_load(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] task_code, cursor_data, fetch_dir, run_id,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] )
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 340, in _execute_ods_record_and_load
[stderr] result = task.execute(cursor_data)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetAllOrderSettleList
[stderr] [2026-03-19 01:22:48] ERROR | etl_billiards | [ODS_SETTLEMENT_RECORDS] 任务失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetAllOrderSettleList
[stderr] [2026-03-19 01:22:48] INFO | etl_billiards | ODS_PAYMENT: ODS fetch+load start, dir=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\ODS_PAYMENT\ODS_PAYMENT-14509-20260319-012248
[stderr] [2026-03-19 01:22:48] INFO | etl_billiards | 开始执行ODS_PAYMENT (ODS)
[stderr] [2026-03-19 01:22:48] INFO | etl_billiards | ODS_PAYMENT: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:48] ERROR | etl_billiards | ODS_PAYMENT ODS 任务失败
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/PayLog/GetPayLogListPage
[stderr] [2026-03-19 01:22:48] INFO | etl_billiards | [ODS_PAYMENT] 开始执行ODS_PAYMENT (ODS)
[stderr] [2026-03-19 01:22:48] INFO | etl_billiards | [ODS_PAYMENT] 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:48] ERROR | etl_billiards | [ODS_PAYMENT] ODS 任务失败
[stderr] [2026-03-19 01:22:48] ERROR | etl_billiards | 任务 ODS_PAYMENT 失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/PayLog/GetPayLogListPage
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 97, in run_tasks
[stderr] task_result = self.run_single_task(
[stderr] task_code, run_uuid, store_id, data_source=data_source,
[stderr] )
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 191, in run_single_task
[stderr] result, last_dump = self._execute_ods_record_and_load(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] task_code, cursor_data, fetch_dir, run_id,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] )
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 340, in _execute_ods_record_and_load
[stderr] result = task.execute(cursor_data)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/PayLog/GetPayLogListPage
[stderr] [2026-03-19 01:22:48] ERROR | etl_billiards | [ODS_PAYMENT] 任务失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/PayLog/GetPayLogListPage
[stderr] [2026-03-19 01:22:48] INFO | etl_billiards | ODS_REFUND: ODS fetch+load start, dir=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\ODS_REFUND\ODS_REFUND-14510-20260319-012248
[stderr] [2026-03-19 01:22:48] INFO | etl_billiards | 开始执行ODS_REFUND (ODS)
[stderr] [2026-03-19 01:22:49] INFO | etl_billiards | ODS_REFUND: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:49] ERROR | etl_billiards | ODS_REFUND ODS 任务失败
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Order/GetRefundPayLogList
[stderr] [2026-03-19 01:22:49] INFO | etl_billiards | [ODS_REFUND] 开始执行ODS_REFUND (ODS)
[stderr] [2026-03-19 01:22:49] INFO | etl_billiards | [ODS_REFUND] 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:49] ERROR | etl_billiards | [ODS_REFUND] ODS 任务失败
[stderr] [2026-03-19 01:22:49] ERROR | etl_billiards | 任务 ODS_REFUND 失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Order/GetRefundPayLogList
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 97, in run_tasks
[stderr] task_result = self.run_single_task(
[stderr] task_code, run_uuid, store_id, data_source=data_source,
[stderr] )
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 191, in run_single_task
[stderr] result, last_dump = self._execute_ods_record_and_load(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] task_code, cursor_data, fetch_dir, run_id,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] )
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 340, in _execute_ods_record_and_load
[stderr] result = task.execute(cursor_data)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Order/GetRefundPayLogList
[stderr] [2026-03-19 01:22:49] ERROR | etl_billiards | [ODS_REFUND] 任务失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Order/GetRefundPayLogList
[stderr] [2026-03-19 01:22:49] INFO | etl_billiards | ODS_TABLE_USE: ODS fetch+load start, dir=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\ODS_TABLE_USE\ODS_TABLE_USE-14511-20260319-012249
[stderr] [2026-03-19 01:22:49] INFO | etl_billiards | 开始执行ODS_TABLE_USE (ODS)
[stderr] [2026-03-19 01:22:49] INFO | etl_billiards | ODS_TABLE_USE: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:49] ERROR | etl_billiards | ODS_TABLE_USE ODS 任务失败
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetSiteTableOrderDetails
[stderr] [2026-03-19 01:22:49] INFO | etl_billiards | [ODS_TABLE_USE] 开始执行ODS_TABLE_USE (ODS)
[stderr] [2026-03-19 01:22:49] INFO | etl_billiards | [ODS_TABLE_USE] 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:49] ERROR | etl_billiards | [ODS_TABLE_USE] ODS 任务失败
[stderr] [2026-03-19 01:22:49] ERROR | etl_billiards | 任务 ODS_TABLE_USE 失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetSiteTableOrderDetails
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 97, in run_tasks
[stderr] task_result = self.run_single_task(
[stderr] task_code, run_uuid, store_id, data_source=data_source,
[stderr] )
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 191, in run_single_task
[stderr] result, last_dump = self._execute_ods_record_and_load(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] task_code, cursor_data, fetch_dir, run_id,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] )
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 340, in _execute_ods_record_and_load
[stderr] result = task.execute(cursor_data)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetSiteTableOrderDetails
[stderr] [2026-03-19 01:22:49] ERROR | etl_billiards | [ODS_TABLE_USE] 任务失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetSiteTableOrderDetails
[stderr] [2026-03-19 01:22:49] INFO | etl_billiards | ODS_TABLE_FEE_DISCOUNT: ODS fetch+load start, dir=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\ODS_TABLE_FEE_DISCOUNT\ODS_TABLE_FEE_DISCOUNT-14512-20260319-012249
[stderr] [2026-03-19 01:22:49] INFO | etl_billiards | 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)
[stderr] [2026-03-19 01:22:49] INFO | etl_billiards | ODS_TABLE_FEE_DISCOUNT: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:49] ERROR | etl_billiards | ODS_TABLE_FEE_DISCOUNT ODS 任务失败
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetTaiFeeAdjustList
[stderr] [2026-03-19 01:22:49] INFO | etl_billiards | [ODS_TABLE_FEE_DISCOUNT] 开始执行ODS_TABLE_FEE_DISCOUNT (ODS)
[stderr] [2026-03-19 01:22:49] INFO | etl_billiards | [ODS_TABLE_FEE_DISCOUNT] 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:49] ERROR | etl_billiards | [ODS_TABLE_FEE_DISCOUNT] ODS 任务失败
[stderr] [2026-03-19 01:22:49] ERROR | etl_billiards | 任务 ODS_TABLE_FEE_DISCOUNT 失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetTaiFeeAdjustList
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 97, in run_tasks
[stderr] task_result = self.run_single_task(
[stderr] task_code, run_uuid, store_id, data_source=data_source,
[stderr] )
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 191, in run_single_task
[stderr] result, last_dump = self._execute_ods_record_and_load(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] task_code, cursor_data, fetch_dir, run_id,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] )
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 340, in _execute_ods_record_and_load
[stderr] result = task.execute(cursor_data)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetTaiFeeAdjustList
[stderr] [2026-03-19 01:22:49] ERROR | etl_billiards | [ODS_TABLE_FEE_DISCOUNT] 任务失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetTaiFeeAdjustList
[stderr] [2026-03-19 01:22:50] INFO | etl_billiards | ODS_TABLES: ODS fetch+load start, dir=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\ODS_TABLES\ODS_TABLES-14513-20260319-012250
[stderr] [2026-03-19 01:22:50] INFO | etl_billiards | 开始执行ODS_TABLES (ODS)
[stderr] [2026-03-19 01:22:50] INFO | etl_billiards | ODS_TABLES: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:50] ERROR | etl_billiards | ODS_TABLES ODS 任务失败
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Table/GetSiteTables
[stderr] [2026-03-19 01:22:50] INFO | etl_billiards | [ODS_TABLES] 开始执行ODS_TABLES (ODS)
[stderr] [2026-03-19 01:22:50] INFO | etl_billiards | [ODS_TABLES] 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:50] ERROR | etl_billiards | [ODS_TABLES] ODS 任务失败
[stderr] [2026-03-19 01:22:50] ERROR | etl_billiards | 任务 ODS_TABLES 失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Table/GetSiteTables
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 97, in run_tasks
[stderr] task_result = self.run_single_task(
[stderr] task_code, run_uuid, store_id, data_source=data_source,
[stderr] )
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 191, in run_single_task
[stderr] result, last_dump = self._execute_ods_record_and_load(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] task_code, cursor_data, fetch_dir, run_id,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] )
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 340, in _execute_ods_record_and_load
[stderr] result = task.execute(cursor_data)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Table/GetSiteTables
[stderr] [2026-03-19 01:22:50] ERROR | etl_billiards | [ODS_TABLES] 任务失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Table/GetSiteTables
[stderr] [2026-03-19 01:22:50] INFO | etl_billiards | ODS_MEMBER: ODS fetch+load start, dir=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\ODS_MEMBER\ODS_MEMBER-14514-20260319-012250
[stderr] [2026-03-19 01:22:50] INFO | etl_billiards | 开始执行ODS_MEMBER (ODS)
[stderr] [2026-03-19 01:22:50] INFO | etl_billiards | ODS_MEMBER: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:50] ERROR | etl_billiards | ODS_MEMBER ODS 任务失败
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/MemberProfile/GetTenantMemberList
[stderr] [2026-03-19 01:22:50] INFO | etl_billiards | [ODS_MEMBER] 开始执行ODS_MEMBER (ODS)
[stderr] [2026-03-19 01:22:50] INFO | etl_billiards | [ODS_MEMBER] 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:50] ERROR | etl_billiards | [ODS_MEMBER] ODS 任务失败
[stderr] [2026-03-19 01:22:50] ERROR | etl_billiards | 任务 ODS_MEMBER 失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/MemberProfile/GetTenantMemberList
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 97, in run_tasks
[stderr] task_result = self.run_single_task(
[stderr] task_code, run_uuid, store_id, data_source=data_source,
[stderr] )
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 191, in run_single_task
[stderr] result, last_dump = self._execute_ods_record_and_load(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] task_code, cursor_data, fetch_dir, run_id,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] )
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 340, in _execute_ods_record_and_load
[stderr] result = task.execute(cursor_data)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/MemberProfile/GetTenantMemberList
[stderr] [2026-03-19 01:22:50] ERROR | etl_billiards | [ODS_MEMBER] 任务失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/MemberProfile/GetTenantMemberList
[stderr] [2026-03-19 01:22:50] INFO | etl_billiards | ODS_MEMBER_CARD: ODS fetch+load start, dir=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\ODS_MEMBER_CARD\ODS_MEMBER_CARD-14515-20260319-012250
[stderr] [2026-03-19 01:22:50] INFO | etl_billiards | 开始执行ODS_MEMBER_CARD (ODS)
[stderr] [2026-03-19 01:22:50] INFO | etl_billiards | ODS_MEMBER_CARD: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:51] ERROR | etl_billiards | ODS_MEMBER_CARD ODS 任务失败
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/MemberProfile/GetTenantMemberCardList
[stderr] [2026-03-19 01:22:51] INFO | etl_billiards | [ODS_MEMBER_CARD] 开始执行ODS_MEMBER_CARD (ODS)
[stderr] [2026-03-19 01:22:51] INFO | etl_billiards | [ODS_MEMBER_CARD] 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:51] ERROR | etl_billiards | [ODS_MEMBER_CARD] ODS 任务失败
[stderr] [2026-03-19 01:22:51] ERROR | etl_billiards | 任务 ODS_MEMBER_CARD 失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/MemberProfile/GetTenantMemberCardList
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 97, in run_tasks
[stderr] task_result = self.run_single_task(
[stderr] task_code, run_uuid, store_id, data_source=data_source,
[stderr] )
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 191, in run_single_task
[stderr] result, last_dump = self._execute_ods_record_and_load(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] task_code, cursor_data, fetch_dir, run_id,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] )
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 340, in _execute_ods_record_and_load
[stderr] result = task.execute(cursor_data)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/MemberProfile/GetTenantMemberCardList
[stderr] [2026-03-19 01:22:51] ERROR | etl_billiards | [ODS_MEMBER_CARD] 任务失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/MemberProfile/GetTenantMemberCardList
[stderr] [2026-03-19 01:22:51] INFO | etl_billiards | ODS_MEMBER_BALANCE: ODS fetch+load start, dir=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\ODS_MEMBER_BALANCE\ODS_MEMBER_BALANCE-14516-20260319-012251
[stderr] [2026-03-19 01:22:51] INFO | etl_billiards | 开始执行ODS_MEMBER_BALANCE (ODS)
[stderr] [2026-03-19 01:22:51] INFO | etl_billiards | ODS_MEMBER_BALANCE: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:51] ERROR | etl_billiards | ODS_MEMBER_BALANCE ODS 任务失败
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/MemberProfile/GetMemberCardBalanceChange
[stderr] [2026-03-19 01:22:51] INFO | etl_billiards | [ODS_MEMBER_BALANCE] 开始执行ODS_MEMBER_BALANCE (ODS)
[stderr] [2026-03-19 01:22:51] INFO | etl_billiards | [ODS_MEMBER_BALANCE] 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:51] ERROR | etl_billiards | [ODS_MEMBER_BALANCE] ODS 任务失败
[stderr] [2026-03-19 01:22:51] ERROR | etl_billiards | 任务 ODS_MEMBER_BALANCE 失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/MemberProfile/GetMemberCardBalanceChange
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 97, in run_tasks
[stderr] task_result = self.run_single_task(
[stderr] task_code, run_uuid, store_id, data_source=data_source,
[stderr] )
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 191, in run_single_task
[stderr] result, last_dump = self._execute_ods_record_and_load(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] task_code, cursor_data, fetch_dir, run_id,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] )
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 340, in _execute_ods_record_and_load
[stderr] result = task.execute(cursor_data)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/MemberProfile/GetMemberCardBalanceChange
[stderr] [2026-03-19 01:22:51] ERROR | etl_billiards | [ODS_MEMBER_BALANCE] 任务失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/MemberProfile/GetMemberCardBalanceChange
[stderr] [2026-03-19 01:22:51] INFO | etl_billiards | ODS_RECHARGE_SETTLE: ODS fetch+load start, dir=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\ODS_RECHARGE_SETTLE\ODS_RECHARGE_SETTLE-14517-20260319-012251
[stderr] [2026-03-19 01:22:51] INFO | etl_billiards | 开始执行ODS_RECHARGE_SETTLE (ODS)
[stderr] [2026-03-19 01:22:51] INFO | etl_billiards | ODS_RECHARGE_SETTLE: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:51] ERROR | etl_billiards | ODS_RECHARGE_SETTLE ODS 任务失败
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetRechargeSettleList
[stderr] [2026-03-19 01:22:51] INFO | etl_billiards | [ODS_RECHARGE_SETTLE] 开始执行ODS_RECHARGE_SETTLE (ODS)
[stderr] [2026-03-19 01:22:51] INFO | etl_billiards | [ODS_RECHARGE_SETTLE] 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:51] ERROR | etl_billiards | [ODS_RECHARGE_SETTLE] ODS 任务失败
[stderr] [2026-03-19 01:22:51] ERROR | etl_billiards | 任务 ODS_RECHARGE_SETTLE 失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetRechargeSettleList
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 97, in run_tasks
[stderr] task_result = self.run_single_task(
[stderr] task_code, run_uuid, store_id, data_source=data_source,
[stderr] )
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 191, in run_single_task
[stderr] result, last_dump = self._execute_ods_record_and_load(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] task_code, cursor_data, fetch_dir, run_id,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] )
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 340, in _execute_ods_record_and_load
[stderr] result = task.execute(cursor_data)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetRechargeSettleList
[stderr] [2026-03-19 01:22:51] ERROR | etl_billiards | [ODS_RECHARGE_SETTLE] 任务失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetRechargeSettleList
[stderr] [2026-03-19 01:22:51] INFO | etl_billiards | ODS_GOODS_CATEGORY: ODS fetch+load start, dir=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\ODS_GOODS_CATEGORY\ODS_GOODS_CATEGORY-14518-20260319-012251
[stderr] [2026-03-19 01:22:51] INFO | etl_billiards | 开始执行ODS_GOODS_CATEGORY (ODS)
[stderr] [2026-03-19 01:22:51] INFO | etl_billiards | ODS_GOODS_CATEGORY: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:51] ERROR | etl_billiards | ODS_GOODS_CATEGORY ODS 任务失败
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoodsCategory/QueryPrimarySecondaryCategory
[stderr] [2026-03-19 01:22:51] INFO | etl_billiards | [ODS_GOODS_CATEGORY] 开始执行ODS_GOODS_CATEGORY (ODS)
[stderr] [2026-03-19 01:22:51] INFO | etl_billiards | [ODS_GOODS_CATEGORY] 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:51] ERROR | etl_billiards | [ODS_GOODS_CATEGORY] ODS 任务失败
[stderr] [2026-03-19 01:22:52] ERROR | etl_billiards | 任务 ODS_GOODS_CATEGORY 失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoodsCategory/QueryPrimarySecondaryCategory
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 97, in run_tasks
[stderr] task_result = self.run_single_task(
[stderr] task_code, run_uuid, store_id, data_source=data_source,
[stderr] )
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 191, in run_single_task
[stderr] result, last_dump = self._execute_ods_record_and_load(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] task_code, cursor_data, fetch_dir, run_id,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] )
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 340, in _execute_ods_record_and_load
[stderr] result = task.execute(cursor_data)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoodsCategory/QueryPrimarySecondaryCategory
[stderr] [2026-03-19 01:22:52] ERROR | etl_billiards | [ODS_GOODS_CATEGORY] 任务失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoodsCategory/QueryPrimarySecondaryCategory
[stderr] [2026-03-19 01:22:52] INFO | etl_billiards | ODS_STORE_GOODS: ODS fetch+load start, dir=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\ODS_STORE_GOODS\ODS_STORE_GOODS-14519-20260319-012252
[stderr] [2026-03-19 01:22:52] INFO | etl_billiards | 开始执行ODS_STORE_GOODS (ODS)
[stderr] [2026-03-19 01:22:52] INFO | etl_billiards | ODS_STORE_GOODS: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:52] ERROR | etl_billiards | ODS_STORE_GOODS ODS 任务失败
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoods/GetGoodsInventoryList
[stderr] [2026-03-19 01:22:52] INFO | etl_billiards | [ODS_STORE_GOODS] 开始执行ODS_STORE_GOODS (ODS)
[stderr] [2026-03-19 01:22:52] INFO | etl_billiards | [ODS_STORE_GOODS] 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:52] ERROR | etl_billiards | [ODS_STORE_GOODS] ODS 任务失败
[stderr] [2026-03-19 01:22:52] ERROR | etl_billiards | 任务 ODS_STORE_GOODS 失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoods/GetGoodsInventoryList
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 97, in run_tasks
[stderr] task_result = self.run_single_task(
[stderr] task_code, run_uuid, store_id, data_source=data_source,
[stderr] )
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 191, in run_single_task
[stderr] result, last_dump = self._execute_ods_record_and_load(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] task_code, cursor_data, fetch_dir, run_id,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] )
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 340, in _execute_ods_record_and_load
[stderr] result = task.execute(cursor_data)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoods/GetGoodsInventoryList
[stderr] [2026-03-19 01:22:52] ERROR | etl_billiards | [ODS_STORE_GOODS] 任务失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoods/GetGoodsInventoryList
[stderr] [2026-03-19 01:22:52] INFO | etl_billiards | ODS_STORE_GOODS_SALES: ODS fetch+load start, dir=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\ODS_STORE_GOODS_SALES\ODS_STORE_GOODS_SALES-14520-20260319-012252
[stderr] [2026-03-19 01:22:52] INFO | etl_billiards | 开始执行ODS_STORE_GOODS_SALES (ODS)
[stderr] [2026-03-19 01:22:52] INFO | etl_billiards | ODS_STORE_GOODS_SALES: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:52] ERROR | etl_billiards | ODS_STORE_GOODS_SALES ODS 任务失败
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoods/GetGoodsSalesList
[stderr] [2026-03-19 01:22:52] INFO | etl_billiards | [ODS_STORE_GOODS_SALES] 开始执行ODS_STORE_GOODS_SALES (ODS)
[stderr] [2026-03-19 01:22:52] INFO | etl_billiards | [ODS_STORE_GOODS_SALES] 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:52] ERROR | etl_billiards | [ODS_STORE_GOODS_SALES] ODS 任务失败
[stderr] [2026-03-19 01:22:52] ERROR | etl_billiards | 任务 ODS_STORE_GOODS_SALES 失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoods/GetGoodsSalesList
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 97, in run_tasks
[stderr] task_result = self.run_single_task(
[stderr] task_code, run_uuid, store_id, data_source=data_source,
[stderr] )
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 191, in run_single_task
[stderr] result, last_dump = self._execute_ods_record_and_load(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] task_code, cursor_data, fetch_dir, run_id,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] )
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 340, in _execute_ods_record_and_load
[stderr] result = task.execute(cursor_data)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoods/GetGoodsSalesList
[stderr] [2026-03-19 01:22:52] ERROR | etl_billiards | [ODS_STORE_GOODS_SALES] 任务失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoods/GetGoodsSalesList
[stderr] [2026-03-19 01:22:52] INFO | etl_billiards | ODS_TENANT_GOODS: ODS fetch+load start, dir=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\ODS_TENANT_GOODS\ODS_TENANT_GOODS-14521-20260319-012252
[stderr] [2026-03-19 01:22:52] INFO | etl_billiards | 开始执行ODS_TENANT_GOODS (ODS)
[stderr] [2026-03-19 01:22:53] INFO | etl_billiards | ODS_TENANT_GOODS: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:53] ERROR | etl_billiards | ODS_TENANT_GOODS ODS 任务失败
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoods/QueryTenantGoods
[stderr] [2026-03-19 01:22:53] INFO | etl_billiards | [ODS_TENANT_GOODS] 开始执行ODS_TENANT_GOODS (ODS)
[stderr] [2026-03-19 01:22:53] INFO | etl_billiards | [ODS_TENANT_GOODS] 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:53] ERROR | etl_billiards | [ODS_TENANT_GOODS] ODS 任务失败
[stderr] [2026-03-19 01:22:53] ERROR | etl_billiards | 任务 ODS_TENANT_GOODS 失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoods/QueryTenantGoods
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 97, in run_tasks
[stderr] task_result = self.run_single_task(
[stderr] task_code, run_uuid, store_id, data_source=data_source,
[stderr] )
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 191, in run_single_task
[stderr] result, last_dump = self._execute_ods_record_and_load(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] task_code, cursor_data, fetch_dir, run_id,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] )
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 340, in _execute_ods_record_and_load
[stderr] result = task.execute(cursor_data)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoods/QueryTenantGoods
[stderr] [2026-03-19 01:22:53] ERROR | etl_billiards | [ODS_TENANT_GOODS] 任务失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoods/QueryTenantGoods
[stderr] [2026-03-19 01:22:53] INFO | etl_billiards | ODS_PLATFORM_COUPON: ODS fetch+load start, dir=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\ODS_PLATFORM_COUPON\ODS_PLATFORM_COUPON-14522-20260319-012253
[stderr] [2026-03-19 01:22:53] INFO | etl_billiards | 开始执行ODS_PLATFORM_COUPON (ODS)
[stderr] [2026-03-19 01:22:53] INFO | etl_billiards | ODS_PLATFORM_COUPON: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:53] ERROR | etl_billiards | ODS_PLATFORM_COUPON ODS 任务失败
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Promotion/GetOfflineCouponConsumePageList
[stderr] [2026-03-19 01:22:53] INFO | etl_billiards | [ODS_PLATFORM_COUPON] 开始执行ODS_PLATFORM_COUPON (ODS)
[stderr] [2026-03-19 01:22:53] INFO | etl_billiards | [ODS_PLATFORM_COUPON] 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:53] ERROR | etl_billiards | [ODS_PLATFORM_COUPON] ODS 任务失败
[stderr] [2026-03-19 01:22:53] ERROR | etl_billiards | 任务 ODS_PLATFORM_COUPON 失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Promotion/GetOfflineCouponConsumePageList
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 97, in run_tasks
[stderr] task_result = self.run_single_task(
[stderr] task_code, run_uuid, store_id, data_source=data_source,
[stderr] )
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 191, in run_single_task
[stderr] result, last_dump = self._execute_ods_record_and_load(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] task_code, cursor_data, fetch_dir, run_id,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] )
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 340, in _execute_ods_record_and_load
[stderr] result = task.execute(cursor_data)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Promotion/GetOfflineCouponConsumePageList
[stderr] [2026-03-19 01:22:53] ERROR | etl_billiards | [ODS_PLATFORM_COUPON] 任务失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Promotion/GetOfflineCouponConsumePageList
[stderr] [2026-03-19 01:22:53] INFO | etl_billiards | ODS_GROUP_PACKAGE: ODS fetch+load start, dir=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\ODS_GROUP_PACKAGE\ODS_GROUP_PACKAGE-14523-20260319-012253
[stderr] [2026-03-19 01:22:53] INFO | etl_billiards | 开始执行ODS_GROUP_PACKAGE (ODS)
[stderr] [2026-03-19 01:22:53] INFO | etl_billiards | ODS_GROUP_PACKAGE: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:53] ERROR | etl_billiards | ODS_GROUP_PACKAGE ODS 任务失败
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/PackageCoupon/QueryPackageCouponList
[stderr] [2026-03-19 01:22:53] INFO | etl_billiards | [ODS_GROUP_PACKAGE] 开始执行ODS_GROUP_PACKAGE (ODS)
[stderr] [2026-03-19 01:22:53] INFO | etl_billiards | [ODS_GROUP_PACKAGE] 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:53] ERROR | etl_billiards | [ODS_GROUP_PACKAGE] ODS 任务失败
[stderr] [2026-03-19 01:22:53] ERROR | etl_billiards | 任务 ODS_GROUP_PACKAGE 失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/PackageCoupon/QueryPackageCouponList
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 97, in run_tasks
[stderr] task_result = self.run_single_task(
[stderr] task_code, run_uuid, store_id, data_source=data_source,
[stderr] )
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 191, in run_single_task
[stderr] result, last_dump = self._execute_ods_record_and_load(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] task_code, cursor_data, fetch_dir, run_id,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] )
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 340, in _execute_ods_record_and_load
[stderr] result = task.execute(cursor_data)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/PackageCoupon/QueryPackageCouponList
[stderr] [2026-03-19 01:22:53] ERROR | etl_billiards | [ODS_GROUP_PACKAGE] 任务失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/PackageCoupon/QueryPackageCouponList
[stderr] [2026-03-19 01:22:54] INFO | etl_billiards | ODS_GROUP_BUY_REDEMPTION: ODS fetch+load start, dir=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\ODS_GROUP_BUY_REDEMPTION\ODS_GROUP_BUY_REDEMPTION-14524-20260319-012254
[stderr] [2026-03-19 01:22:54] INFO | etl_billiards | 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)
[stderr] [2026-03-19 01:22:54] INFO | etl_billiards | ODS_GROUP_BUY_REDEMPTION: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:54] ERROR | etl_billiards | ODS_GROUP_BUY_REDEMPTION ODS 任务失败
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetSiteTableUseDetails
[stderr] [2026-03-19 01:22:54] INFO | etl_billiards | [ODS_GROUP_BUY_REDEMPTION] 开始执行ODS_GROUP_BUY_REDEMPTION (ODS)
[stderr] [2026-03-19 01:22:54] INFO | etl_billiards | [ODS_GROUP_BUY_REDEMPTION] 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:54] ERROR | etl_billiards | [ODS_GROUP_BUY_REDEMPTION] ODS 任务失败
[stderr] [2026-03-19 01:22:54] ERROR | etl_billiards | 任务 ODS_GROUP_BUY_REDEMPTION 失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetSiteTableUseDetails
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 97, in run_tasks
[stderr] task_result = self.run_single_task(
[stderr] task_code, run_uuid, store_id, data_source=data_source,
[stderr] )
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 191, in run_single_task
[stderr] result, last_dump = self._execute_ods_record_and_load(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] task_code, cursor_data, fetch_dir, run_id,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] )
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 340, in _execute_ods_record_and_load
[stderr] result = task.execute(cursor_data)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetSiteTableUseDetails
[stderr] [2026-03-19 01:22:54] ERROR | etl_billiards | [ODS_GROUP_BUY_REDEMPTION] 任务失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/Site/GetSiteTableUseDetails
[stderr] [2026-03-19 01:22:54] INFO | etl_billiards | ODS_INVENTORY_STOCK: ODS fetch+load start, dir=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\ODS_INVENTORY_STOCK\ODS_INVENTORY_STOCK-14525-20260319-012254
[stderr] [2026-03-19 01:22:54] INFO | etl_billiards | 开始执行ODS_INVENTORY_STOCK (ODS)
[stderr] [2026-03-19 01:22:54] INFO | etl_billiards | ODS_INVENTORY_STOCK: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:54] ERROR | etl_billiards | ODS_INVENTORY_STOCK ODS 任务失败
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoods/GetGoodsStockReport
[stderr] [2026-03-19 01:22:54] INFO | etl_billiards | [ODS_INVENTORY_STOCK] 开始执行ODS_INVENTORY_STOCK (ODS)
[stderr] [2026-03-19 01:22:54] INFO | etl_billiards | [ODS_INVENTORY_STOCK] 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:54] ERROR | etl_billiards | [ODS_INVENTORY_STOCK] ODS 任务失败
[stderr] [2026-03-19 01:22:54] ERROR | etl_billiards | 任务 ODS_INVENTORY_STOCK 失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoods/GetGoodsStockReport
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 97, in run_tasks
[stderr] task_result = self.run_single_task(
[stderr] task_code, run_uuid, store_id, data_source=data_source,
[stderr] )
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 191, in run_single_task
[stderr] result, last_dump = self._execute_ods_record_and_load(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] task_code, cursor_data, fetch_dir, run_id,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] )
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 340, in _execute_ods_record_and_load
[stderr] result = task.execute(cursor_data)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoods/GetGoodsStockReport
[stderr] [2026-03-19 01:22:54] ERROR | etl_billiards | [ODS_INVENTORY_STOCK] 任务失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/TenantGoods/GetGoodsStockReport
[stderr] [2026-03-19 01:22:54] INFO | etl_billiards | ODS_INVENTORY_CHANGE: ODS fetch+load start, dir=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\ODS_INVENTORY_CHANGE\ODS_INVENTORY_CHANGE-14526-20260319-012254
[stderr] [2026-03-19 01:22:54] INFO | etl_billiards | 开始执行ODS_INVENTORY_CHANGE (ODS)
[stderr] [2026-03-19 01:22:54] INFO | etl_billiards | ODS_INVENTORY_CHANGE: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:55] ERROR | etl_billiards | ODS_INVENTORY_CHANGE ODS 任务失败
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/GoodsStockManage/QueryGoodsOutboundReceipt
[stderr] [2026-03-19 01:22:55] INFO | etl_billiards | [ODS_INVENTORY_CHANGE] 开始执行ODS_INVENTORY_CHANGE (ODS)
[stderr] [2026-03-19 01:22:55] INFO | etl_billiards | [ODS_INVENTORY_CHANGE] 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:55] ERROR | etl_billiards | [ODS_INVENTORY_CHANGE] ODS 任务失败
[stderr] [2026-03-19 01:22:55] ERROR | etl_billiards | 任务 ODS_INVENTORY_CHANGE 失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/GoodsStockManage/QueryGoodsOutboundReceipt
[stderr] Traceback (most recent call last):
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 97, in run_tasks
[stderr] task_result = self.run_single_task(
[stderr] task_code, run_uuid, store_id, data_source=data_source,
[stderr] )
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 191, in run_single_task
[stderr] result, last_dump = self._execute_ods_record_and_load(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] task_code, cursor_data, fetch_dir, run_id,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] )
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 340, in _execute_ods_record_and_load
[stderr] result = task.execute(cursor_data)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 233, in execute
[stderr] pipe_result = pipeline.run(requests, process_fn, write_fn)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 134, in run
[stderr] self._request_loop(requests, processing_queue, result)
[stderr] ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\pipeline\unified_pipeline.py", line 245, in _request_loop
[stderr] for req in requests:
[stderr] ^^^^^^^^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\ods\ods_tasks.py", line 444, in _build_requests
[stderr] for page_num, page_records, total, response_payload in self.api.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=spec.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<3 lines>...
[stderr] list_key=spec.list_key,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\recording_client.py", line 61, in iter_paginated
[stderr] for page_no, records, request_params, response in self.base.iter_paginated(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ...<5 lines>...
[stderr] list_key=list_key,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 215, in iter_paginated
[stderr] for _, records, request_params, payload in self._iter_paginated_single(
[stderr] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[stderr] endpoint=call.endpoint,
[stderr] ^^^^^^^^^^^^^^^^^^^^^^^
[stderr] ...<7 lines>...
[stderr] page_end=page_end,
[stderr] ^^^^^^^^^^^^^^^^^^
[stderr] ):
[stderr] ^
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 177, in _iter_paginated_single
[stderr] payload = self._post_json(endpoint, page_params)
[stderr] File "C:\NeoZQYY\apps\etl\connectors\feiqiu\api\client.py", line 122, in _post_json
[stderr] resp.raise_for_status()
[stderr] ~~~~~~~~~~~~~~~~~~~~~^^
[stderr] File "C:\NeoZQYY\.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
[stderr] raise HTTPError(http_error_msg, response=self)
[stderr] requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/GoodsStockManage/QueryGoodsOutboundReceipt
[stderr] [2026-03-19 01:22:55] ERROR | etl_billiards | [ODS_INVENTORY_CHANGE] 任务失败: 401 Client Error: Unauthorized for url: https://pc.ficoo.vip/apiprod/admin/v1/GoodsStockManage/QueryGoodsOutboundReceipt
[stderr] [2026-03-19 01:22:55] INFO | etl_billiards | DWD_LOAD_FROM_ODS: 抓取阶段开始,目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWD_LOAD_FROM_ODS\DWD_LOAD_FROM_ODS-14527-20260319-012255
[stderr] [2026-03-19 01:22:55] INFO | etl_billiards | DWD_LOAD_FROM_ODS: 抓取完成,文件=None记录数=0
[stderr] [2026-03-19 01:22:55] INFO | etl_billiards | DWD_LOAD_FROM_ODS: 本地清洗入库开始,源目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWD_LOAD_FROM_ODS\DWD_LOAD_FROM_ODS-14527-20260319-012255
[stderr] [2026-03-19 01:22:55] INFO | etl_billiards | DWD_LOAD_FROM_ODS: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:22:55] INFO | etl_billiards | DWD 装载开始dwd.dim_site <= ods.table_fee_transactions
[stderr] [2026-03-19 01:22:55] INFO | etl_billiards | DWD 装载开始dwd.dim_site_ex <= ods.table_fee_transactions
[stderr] [2026-03-19 01:22:55] INFO | etl_billiards | DWD 装载开始dwd.dim_table <= ods.site_tables_master
[stderr] [2026-03-19 01:22:55] INFO | etl_billiards | DWD 装载开始dwd.dim_table_ex <= ods.site_tables_master
[stderr] [2026-03-19 01:22:55] INFO | etl_billiards | DWD 装载完成dwd.dim_table用时 0.56s
[stderr] [2026-03-19 01:22:55] INFO | etl_billiards | DWD 装载开始dwd.dim_assistant <= ods.assistant_accounts_master
[stderr] [2026-03-19 01:22:56] INFO | etl_billiards | DWD 装载完成dwd.dim_table_ex用时 0.63s
[stderr] [2026-03-19 01:22:56] INFO | etl_billiards | DWD 装载开始dwd.dim_assistant_ex <= ods.assistant_accounts_master
[stderr] [2026-03-19 01:22:56] INFO | etl_billiards | DWD 装载完成dwd.dim_site用时 0.95s
[stderr] [2026-03-19 01:22:56] INFO | etl_billiards | DWD 装载开始dwd.dim_member <= ods.member_profiles
[stderr] [2026-03-19 01:22:56] INFO | etl_billiards | DWD 装载完成dwd.dim_site_ex用时 1.03s
[stderr] [2026-03-19 01:22:56] INFO | etl_billiards | DWD 装载开始dwd.dim_member_ex <= ods.member_profiles
[stderr] [2026-03-19 01:22:56] INFO | etl_billiards | DWD 装载完成dwd.dim_assistant用时 0.57s
[stderr] [2026-03-19 01:22:56] INFO | etl_billiards | DWD 装载开始dwd.dim_member_card_account <= ods.member_stored_value_cards
[stderr] [2026-03-19 01:22:56] INFO | etl_billiards | DWD 装载完成dwd.dim_assistant_ex用时 0.72s
[stderr] [2026-03-19 01:22:56] INFO | etl_billiards | DWD 装载开始dwd.dim_member_card_account_ex <= ods.member_stored_value_cards
[stderr] [2026-03-19 01:22:57] INFO | etl_billiards | DWD 装载完成dwd.dim_member用时 0.97s
[stderr] [2026-03-19 01:22:57] INFO | etl_billiards | DWD 装载开始dwd.dim_tenant_goods <= ods.tenant_goods_master
[stderr] [2026-03-19 01:22:57] INFO | etl_billiards | DWD 装载完成dwd.dim_member_ex用时 0.93s
[stderr] [2026-03-19 01:22:57] INFO | etl_billiards | DWD 装载开始dwd.dim_tenant_goods_ex <= ods.tenant_goods_master
[stderr] [2026-03-19 01:22:57] INFO | etl_billiards | DWD 装载完成dwd.dim_member_card_account用时 1.22s
[stderr] [2026-03-19 01:22:57] INFO | etl_billiards | DWD 装载开始dwd.dim_store_goods <= ods.store_goods_master
[stderr] [2026-03-19 01:22:58] INFO | etl_billiards | DWD 装载完成dwd.dim_tenant_goods用时 1.00s
[stderr] [2026-03-19 01:22:58] INFO | etl_billiards | DWD 装载开始dwd.dim_store_goods_ex <= ods.store_goods_master
[stderr] [2026-03-19 01:22:58] INFO | etl_billiards | DWD 装载完成dwd.dim_tenant_goods_ex用时 1.01s
[stderr] [2026-03-19 01:22:58] INFO | etl_billiards | DWD 装载开始dwd.dim_goods_category <= ods.stock_goods_category_tree
[stderr] [2026-03-19 01:22:58] INFO | etl_billiards | DWD 装载完成dwd.dim_store_goods用时 0.92s
[stderr] [2026-03-19 01:22:58] INFO | etl_billiards | DWD 装载开始dwd.dim_groupbuy_package <= ods.group_buy_packages
[stderr] [2026-03-19 01:22:58] INFO | etl_billiards | DWD 装载完成dwd.dim_member_card_account_ex用时 2.22s
[stderr] [2026-03-19 01:22:58] INFO | etl_billiards | DWD 装载开始dwd.dim_groupbuy_package_ex <= ods.group_buy_packages
[stderr] [2026-03-19 01:22:59] INFO | etl_billiards | DWD 装载完成dwd.dim_goods_category用时 0.83s
[stderr] [2026-03-19 01:22:59] INFO | etl_billiards | DWD 装载开始dwd.dim_staff <= ods.staff_info_master
[stderr] [2026-03-19 01:22:59] INFO | etl_billiards | DWD 装载完成dwd.dim_store_goods_ex用时 1.03s
[stderr] [2026-03-19 01:22:59] INFO | etl_billiards | DWD 装载开始dwd.dim_staff_ex <= ods.staff_info_master
[stderr] [2026-03-19 01:22:59] INFO | etl_billiards | DWD 装载完成dwd.dim_groupbuy_package用时 0.77s
[stderr] [2026-03-19 01:22:59] INFO | etl_billiards | DWD 装载开始dwd.dwd_settlement_head <= ods.settlement_records
[stderr] [2026-03-19 01:22:59] INFO | etl_billiards | DWD 装载完成dwd.dim_groupbuy_package_ex用时 0.64s
[stderr] [2026-03-19 01:22:59] INFO | etl_billiards | DWD 装载开始dwd.dwd_settlement_head_ex <= ods.settlement_records
[stderr] [2026-03-19 01:22:59] INFO | etl_billiards | DWD 装载完成dwd.dim_staff用时 0.54s
[stderr] [2026-03-19 01:22:59] INFO | etl_billiards | DWD 装载开始dwd.dwd_table_fee_log <= ods.table_fee_transactions
[stderr] [2026-03-19 01:22:59] INFO | etl_billiards | DWD 装载完成dwd.dim_staff_ex用时 0.53s
[stderr] [2026-03-19 01:22:59] INFO | etl_billiards | DWD 装载开始dwd.dwd_table_fee_log_ex <= ods.table_fee_transactions
[stderr] [2026-03-19 01:22:59] INFO | etl_billiards | DWD 装载完成dwd.dwd_settlement_head用时 0.49s
[stderr] [2026-03-19 01:22:59] INFO | etl_billiards | DWD 装载开始dwd.dwd_table_fee_adjust <= ods.table_fee_discount_records
[stderr] [2026-03-19 01:23:00] INFO | etl_billiards | DWD 装载完成dwd.dwd_settlement_head_ex用时 0.51s
[stderr] [2026-03-19 01:23:00] INFO | etl_billiards | DWD 装载开始dwd.dwd_table_fee_adjust_ex <= ods.table_fee_discount_records
[stderr] [2026-03-19 01:23:00] INFO | etl_billiards | DWD 装载完成dwd.dwd_table_fee_log用时 0.47s
[stderr] [2026-03-19 01:23:00] INFO | etl_billiards | DWD 装载开始dwd.dwd_store_goods_sale <= ods.store_goods_sales_records
[stderr] [2026-03-19 01:23:00] INFO | etl_billiards | DWD 装载完成dwd.dwd_table_fee_log_ex用时 0.48s
[stderr] [2026-03-19 01:23:00] INFO | etl_billiards | DWD 装载开始dwd.dwd_store_goods_sale_ex <= ods.store_goods_sales_records
[stderr] [2026-03-19 01:23:00] INFO | etl_billiards | DWD 装载完成dwd.dwd_table_fee_adjust用时 0.57s
[stderr] [2026-03-19 01:23:00] INFO | etl_billiards | DWD 装载开始dwd.dwd_assistant_service_log <= ods.assistant_service_records
[stderr] [2026-03-19 01:23:00] INFO | etl_billiards | DWD 装载完成dwd.dwd_table_fee_adjust_ex用时 0.47s
[stderr] [2026-03-19 01:23:00] INFO | etl_billiards | DWD 装载开始dwd.dwd_assistant_service_log_ex <= ods.assistant_service_records
[stderr] [2026-03-19 01:23:00] INFO | etl_billiards | DWD 装载完成dwd.dwd_store_goods_sale用时 0.48s
[stderr] [2026-03-19 01:23:00] INFO | etl_billiards | DWD 装载开始dwd.dwd_member_balance_change <= ods.member_balance_changes
[stderr] [2026-03-19 01:23:01] INFO | etl_billiards | DWD 装载完成dwd.dwd_store_goods_sale_ex用时 0.74s
[stderr] [2026-03-19 01:23:01] INFO | etl_billiards | DWD 装载开始dwd.dwd_member_balance_change_ex <= ods.member_balance_changes
[stderr] [2026-03-19 01:23:01] INFO | etl_billiards | DWD 装载完成dwd.dwd_assistant_service_log用时 0.62s
[stderr] [2026-03-19 01:23:01] INFO | etl_billiards | DWD 装载开始dwd.dwd_groupbuy_redemption <= ods.group_buy_redemption_records
[stderr] [2026-03-19 01:23:01] INFO | etl_billiards | DWD 装载完成dwd.dwd_assistant_service_log_ex用时 0.77s
[stderr] [2026-03-19 01:23:01] INFO | etl_billiards | DWD 装载开始dwd.dwd_groupbuy_redemption_ex <= ods.group_buy_redemption_records
[stderr] [2026-03-19 01:23:01] INFO | etl_billiards | DWD 装载完成dwd.dwd_member_balance_change用时 0.67s
[stderr] [2026-03-19 01:23:01] INFO | etl_billiards | DWD 装载开始dwd.dwd_platform_coupon_redemption <= ods.platform_coupon_redemption_records
[stderr] [2026-03-19 01:23:01] INFO | etl_billiards | DWD 装载完成dwd.dwd_member_balance_change_ex用时 0.46s
[stderr] [2026-03-19 01:23:01] INFO | etl_billiards | DWD 装载开始dwd.dwd_platform_coupon_redemption_ex <= ods.platform_coupon_redemption_records
[stderr] [2026-03-19 01:23:01] INFO | etl_billiards | DWD 装载完成dwd.dwd_groupbuy_redemption用时 0.47s
[stderr] [2026-03-19 01:23:01] INFO | etl_billiards | DWD 装载开始dwd.dwd_recharge_order <= ods.recharge_settlements
[stderr] [2026-03-19 01:23:01] INFO | etl_billiards | DWD 装载完成dwd.dwd_groupbuy_redemption_ex用时 0.48s
[stderr] [2026-03-19 01:23:01] INFO | etl_billiards | DWD 装载开始dwd.dwd_recharge_order_ex <= ods.recharge_settlements
[stderr] [2026-03-19 01:23:01] INFO | etl_billiards | DWD 装载完成dwd.dwd_platform_coupon_redemption用时 0.48s
[stderr] [2026-03-19 01:23:01] INFO | etl_billiards | DWD 装载开始dwd.dwd_payment <= ods.payment_transactions
[stderr] [2026-03-19 01:23:02] INFO | etl_billiards | DWD 装载完成dwd.dwd_platform_coupon_redemption_ex用时 0.51s
[stderr] [2026-03-19 01:23:02] INFO | etl_billiards | DWD 装载开始dwd.dwd_refund <= ods.refund_transactions
[stderr] [2026-03-19 01:23:02] INFO | etl_billiards | DWD 装载完成dwd.dwd_recharge_order用时 0.58s
[stderr] [2026-03-19 01:23:02] INFO | etl_billiards | DWD 装载开始dwd.dwd_refund_ex <= ods.refund_transactions
[stderr] [2026-03-19 01:23:02] INFO | etl_billiards | DWD 装载完成dwd.dwd_payment用时 0.50s
[stderr] [2026-03-19 01:23:02] INFO | etl_billiards | DWD 装载开始dwd.dwd_goods_stock_summary <= ods.goods_stock_summary
[stderr] [2026-03-19 01:23:02] INFO | etl_billiards | DWD 装载完成dwd.dwd_recharge_order_ex用时 0.50s
[stderr] [2026-03-19 01:23:02] INFO | etl_billiards | DWD 装载开始dwd.dwd_goods_stock_movement <= ods.goods_stock_movements
[stderr] [2026-03-19 01:23:02] INFO | etl_billiards | DWD 装载完成dwd.dwd_refund用时 0.46s
[stderr] [2026-03-19 01:23:02] INFO | etl_billiards | DWD 装载完成dwd.dwd_refund_ex用时 0.47s
[stderr] [2026-03-19 01:23:02] INFO | etl_billiards | DWD 装载完成dwd.dwd_goods_stock_summary用时 0.49s
[stderr] [2026-03-19 01:23:02] INFO | etl_billiards | DWD 装载完成dwd.dwd_goods_stock_movement用时 0.49s
[stderr] [2026-03-19 01:23:02] INFO | etl_billiards | DWD_LOAD_FROM_ODS: 完成,统计={'tables': 42, 'errors': 0, 'error_details': 0}
[stderr] [2026-03-19 01:23:03] INFO | etl_billiards | DWS_ASSISTANT_PROJECT_TAG: 抓取阶段开始,目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_ASSISTANT_PROJECT_TAG\DWS_ASSISTANT_PROJECT_TAG-14528-20260319-012303
[stderr] [2026-03-19 01:23:03] INFO | etl_billiards | DWS_ASSISTANT_PROJECT_TAG: 提取助教服务数据
[stderr] [2026-03-19 01:23:03] INFO | etl_billiards | DWS_ASSISTANT_PROJECT_TAG: 抓取完成,文件=None记录数=0
[stderr] [2026-03-19 01:23:03] INFO | etl_billiards | DWS_ASSISTANT_PROJECT_TAG: 本地清洗入库开始,源目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_ASSISTANT_PROJECT_TAG\DWS_ASSISTANT_PROJECT_TAG-14528-20260319-012303
[stderr] [2026-03-19 01:23:03] INFO | etl_billiards | DWS_ASSISTANT_PROJECT_TAG: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:23:03] INFO | etl_billiards | DWS_ASSISTANT_PROJECT_TAG: 提取助教服务数据
[stderr] [2026-03-19 01:23:03] INFO | etl_billiards | DWS_ASSISTANT_PROJECT_TAG: 生成 524 条标签记录(其中 278 条达标)
[stderr] [2026-03-19 01:23:15] INFO | etl_billiards | DWS_ASSISTANT_PROJECT_TAG: 删除 524 条,插入 524 条
[stderr] [2026-03-19 01:23:15] INFO | etl_billiards | DWS_ASSISTANT_PROJECT_TAG: 完成,统计={'status': 'SUCCESS', 'counts': {'inserted': 524, 'deleted': 524}}
[stderr] [2026-03-19 01:23:15] INFO | etl_billiards | DWS_MEMBER_PROJECT_TAG: 抓取阶段开始,目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_MEMBER_PROJECT_TAG\DWS_MEMBER_PROJECT_TAG-14529-20260319-012315
[stderr] [2026-03-19 01:23:15] INFO | etl_billiards | DWS_MEMBER_PROJECT_TAG: 提取客户台费时长数据
[stderr] [2026-03-19 01:23:15] INFO | etl_billiards | DWS_MEMBER_PROJECT_TAG: 抓取完成,文件=None记录数=0
[stderr] [2026-03-19 01:23:15] INFO | etl_billiards | DWS_MEMBER_PROJECT_TAG: 本地清洗入库开始,源目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_MEMBER_PROJECT_TAG\DWS_MEMBER_PROJECT_TAG-14529-20260319-012315
[stderr] [2026-03-19 01:23:15] INFO | etl_billiards | DWS_MEMBER_PROJECT_TAG: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:23:15] INFO | etl_billiards | DWS_MEMBER_PROJECT_TAG: 提取客户台费时长数据
[stderr] [2026-03-19 01:23:16] INFO | etl_billiards | DWS_MEMBER_PROJECT_TAG: 生成 131 条标签记录(其中 109 条达标)
[stderr] [2026-03-19 01:23:19] INFO | etl_billiards | DWS_MEMBER_PROJECT_TAG: 删除 131 条,插入 131 条
[stderr] [2026-03-19 01:23:19] INFO | etl_billiards | DWS_MEMBER_PROJECT_TAG: 完成,统计={'status': 'SUCCESS', 'counts': {'inserted': 131, 'deleted': 131}}
[stderr] [2026-03-19 01:23:19] INFO | etl_billiards | DWS_GOODS_STOCK_DAILY: 抓取阶段开始,目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_GOODS_STOCK_DAILY\DWS_GOODS_STOCK_DAILY-14530-20260319-012319
[stderr] [2026-03-19 01:23:19] INFO | etl_billiards | DWS_GOODS_STOCK_DAILY: 提取数据,门店=2790685415443269日期范围 2026-03-18 ~ 2026-03-19
[stderr] [2026-03-19 01:23:19] INFO | etl_billiards | DWS_GOODS_STOCK_DAILY: 提取到 167 条 DWD 记录
[stderr] [2026-03-19 01:23:19] INFO | etl_billiards | DWS_GOODS_STOCK_DAILY: 抓取完成,文件=None记录数=0
[stderr] [2026-03-19 01:23:19] INFO | etl_billiards | DWS_GOODS_STOCK_DAILY: 本地清洗入库开始,源目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_GOODS_STOCK_DAILY\DWS_GOODS_STOCK_DAILY-14530-20260319-012319
[stderr] [2026-03-19 01:23:19] INFO | etl_billiards | DWS_GOODS_STOCK_DAILY: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:23:19] INFO | etl_billiards | DWS_GOODS_STOCK_DAILY: 提取数据,门店=2790685415443269日期范围 2026-03-18 ~ 2026-03-19
[stderr] [2026-03-19 01:23:19] INFO | etl_billiards | DWS_GOODS_STOCK_DAILY: 提取到 167 条 DWD 记录
[stderr] [2026-03-19 01:23:19] INFO | etl_billiards | DWS_GOODS_STOCK_DAILY: 汇总完成,生成 64 条日度记录
[stderr] [2026-03-19 01:23:20] INFO | etl_billiards | DWS_GOODS_STOCK_DAILY: 写入完成inserted=64
[stderr] [2026-03-19 01:23:20] INFO | etl_billiards | DWS_GOODS_STOCK_DAILY: 完成,统计={'counts': {'fetched': 64, 'inserted': 64, 'updated': 0, 'skipped': 0, 'errors': 0}}
[stderr] [2026-03-19 01:23:21] INFO | etl_billiards | DWS_GOODS_STOCK_WEEKLY: 抓取阶段开始,目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_GOODS_STOCK_WEEKLY\DWS_GOODS_STOCK_WEEKLY-14531-20260319-012321
[stderr] [2026-03-19 01:23:21] INFO | etl_billiards | DWS_GOODS_STOCK_WEEKLY: 提取数据,门店=2790685415443269日期范围 2026-03-18 ~ 2026-03-19
[stderr] [2026-03-19 01:23:21] INFO | etl_billiards | DWS_GOODS_STOCK_WEEKLY: 提取到 167 条 DWD 记录
[stderr] [2026-03-19 01:23:21] INFO | etl_billiards | DWS_GOODS_STOCK_WEEKLY: 抓取完成,文件=None记录数=0
[stderr] [2026-03-19 01:23:21] INFO | etl_billiards | DWS_GOODS_STOCK_WEEKLY: 本地清洗入库开始,源目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_GOODS_STOCK_WEEKLY\DWS_GOODS_STOCK_WEEKLY-14531-20260319-012321
[stderr] [2026-03-19 01:23:21] INFO | etl_billiards | DWS_GOODS_STOCK_WEEKLY: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:23:21] INFO | etl_billiards | DWS_GOODS_STOCK_WEEKLY: 提取数据,门店=2790685415443269日期范围 2026-03-18 ~ 2026-03-19
[stderr] [2026-03-19 01:23:21] INFO | etl_billiards | DWS_GOODS_STOCK_WEEKLY: 提取到 167 条 DWD 记录
[stderr] [2026-03-19 01:23:21] INFO | etl_billiards | DWS_GOODS_STOCK_WEEKLY: 汇总完成,生成 64 条周度记录
[stderr] [2026-03-19 01:23:22] INFO | etl_billiards | DWS_GOODS_STOCK_WEEKLY: 写入完成inserted=64
[stderr] [2026-03-19 01:23:22] INFO | etl_billiards | DWS_GOODS_STOCK_WEEKLY: 完成,统计={'counts': {'fetched': 64, 'inserted': 64, 'updated': 0, 'skipped': 0, 'errors': 0}}
[stderr] [2026-03-19 01:23:23] INFO | etl_billiards | DWS_GOODS_STOCK_MONTHLY: 抓取阶段开始,目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_GOODS_STOCK_MONTHLY\DWS_GOODS_STOCK_MONTHLY-14532-20260319-012323
[stderr] [2026-03-19 01:23:23] INFO | etl_billiards | DWS_GOODS_STOCK_MONTHLY: 提取数据,门店=2790685415443269日期范围 2026-03-18 ~ 2026-03-19
[stderr] [2026-03-19 01:23:23] INFO | etl_billiards | DWS_GOODS_STOCK_MONTHLY: 提取到 167 条 DWD 记录
[stderr] [2026-03-19 01:23:23] INFO | etl_billiards | DWS_GOODS_STOCK_MONTHLY: 抓取完成,文件=None记录数=0
[stderr] [2026-03-19 01:23:23] INFO | etl_billiards | DWS_GOODS_STOCK_MONTHLY: 本地清洗入库开始,源目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_GOODS_STOCK_MONTHLY\DWS_GOODS_STOCK_MONTHLY-14532-20260319-012323
[stderr] [2026-03-19 01:23:23] INFO | etl_billiards | DWS_GOODS_STOCK_MONTHLY: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:23:23] INFO | etl_billiards | DWS_GOODS_STOCK_MONTHLY: 提取数据,门店=2790685415443269日期范围 2026-03-18 ~ 2026-03-19
[stderr] [2026-03-19 01:23:23] INFO | etl_billiards | DWS_GOODS_STOCK_MONTHLY: 提取到 167 条 DWD 记录
[stderr] [2026-03-19 01:23:23] INFO | etl_billiards | DWS_GOODS_STOCK_MONTHLY: 汇总完成,生成 64 条月度记录
[stderr] [2026-03-19 01:23:24] INFO | etl_billiards | DWS_GOODS_STOCK_MONTHLY: 写入完成inserted=64
[stderr] [2026-03-19 01:23:24] INFO | etl_billiards | DWS_GOODS_STOCK_MONTHLY: 完成,统计={'counts': {'fetched': 64, 'inserted': 64, 'updated': 0, 'skipped': 0, 'errors': 0}}
[stderr] [2026-03-19 01:23:25] INFO | etl_billiards | DWS_ASSISTANT_DAILY: 抓取阶段开始,目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_ASSISTANT_DAILY\DWS_ASSISTANT_DAILY-14533-20260319-012325
[stderr] [2026-03-19 01:23:25] INFO | etl_billiards | DWS_ASSISTANT_DAILY: 提取数据,日期范围 2026-03-18 ~ 2026-03-19
[stderr] [2026-03-19 01:23:25] INFO | etl_billiards | DWS_ASSISTANT_DAILY: 抓取完成,文件=None记录数=0
[stderr] [2026-03-19 01:23:25] INFO | etl_billiards | DWS_ASSISTANT_DAILY: 本地清洗入库开始,源目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_ASSISTANT_DAILY\DWS_ASSISTANT_DAILY-14533-20260319-012325
[stderr] [2026-03-19 01:23:25] INFO | etl_billiards | DWS_ASSISTANT_DAILY: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:23:25] INFO | etl_billiards | DWS_ASSISTANT_DAILY: 提取数据,日期范围 2026-03-18 ~ 2026-03-19
[stderr] [2026-03-19 01:23:25] INFO | etl_billiards | DWS_ASSISTANT_DAILY: 转换数据,服务记录 9 条
[stderr] [2026-03-19 01:23:25] INFO | etl_billiards | DWS_ASSISTANT_DAILY: 完成,统计={'counts': {'fetched': 8, 'inserted': 8, 'updated': 0, 'skipped': 0, 'errors': 0}, 'extra': {'deleted': 7}}
[stderr] [2026-03-19 01:23:26] INFO | etl_billiards | DWS_ASSISTANT_CUSTOMER: 抓取阶段开始,目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_ASSISTANT_CUSTOMER\DWS_ASSISTANT_CUSTOMER-14534-20260319-012326
[stderr] [2026-03-19 01:23:26] INFO | etl_billiards | DWS_ASSISTANT_CUSTOMER: 提取数据,统计日期 2026-03-19
[stderr] [2026-03-19 01:23:26] INFO | etl_billiards | DWS_ASSISTANT_CUSTOMER: 抓取完成,文件=None记录数=0
[stderr] [2026-03-19 01:23:26] INFO | etl_billiards | DWS_ASSISTANT_CUSTOMER: 本地清洗入库开始,源目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_ASSISTANT_CUSTOMER\DWS_ASSISTANT_CUSTOMER-14534-20260319-012326
[stderr] [2026-03-19 01:23:26] INFO | etl_billiards | DWS_ASSISTANT_CUSTOMER: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:23:26] INFO | etl_billiards | DWS_ASSISTANT_CUSTOMER: 提取数据,统计日期 2026-03-19
[stderr] [2026-03-19 01:23:26] INFO | etl_billiards | DWS_ASSISTANT_CUSTOMER: 转换数据228 条服务关系记录
[stderr] [2026-03-19 01:23:31] INFO | etl_billiards | DWS_ASSISTANT_CUSTOMER: 完成,统计={'counts': {'fetched': 228, 'inserted': 228, 'updated': 0, 'skipped': 0, 'errors': 0}, 'extra': {'deleted': 226}}
[stderr] [2026-03-19 01:23:32] INFO | etl_billiards | DWS_ASSISTANT_SALARY: 抓取阶段开始,目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_ASSISTANT_SALARY\DWS_ASSISTANT_SALARY-14535-20260319-012332
[stderr] [2026-03-19 01:23:32] INFO | etl_billiards | DWS_ASSISTANT_SALARY: 非工资结算期,跳过
[stderr] [2026-03-19 01:23:32] INFO | etl_billiards | DWS_ASSISTANT_SALARY: 抓取完成,文件=None记录数=0
[stderr] [2026-03-19 01:23:32] INFO | etl_billiards | DWS_ASSISTANT_SALARY: 本地清洗入库开始,源目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_ASSISTANT_SALARY\DWS_ASSISTANT_SALARY-14535-20260319-012332
[stderr] [2026-03-19 01:23:32] INFO | etl_billiards | DWS_ASSISTANT_SALARY: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:23:32] INFO | etl_billiards | DWS_ASSISTANT_SALARY: 非工资结算期,跳过
[stderr] [2026-03-19 01:23:32] INFO | etl_billiards | DWS_ASSISTANT_SALARY: 无数据需要写入
[stderr] [2026-03-19 01:23:32] INFO | etl_billiards | DWS_ASSISTANT_SALARY: 完成,统计={'counts': {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}}
[stderr] [2026-03-19 01:23:32] INFO | etl_billiards | DWS_BUILD_ORDER_SUMMARY: 开始执行工具类任务
[stderr] [2026-03-19 01:23:32] INFO | etl_billiards | DWS_BUILD_ORDER_SUMMARY: 开始执行(1/1), 窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:23:32] INFO | etl_billiards | DWS订单汇总: 删除=111 语句=DELETE FROM dws.dws_order_summary WHERE 1=1 AND site_id = %s AND order_date >= %s AND order_date <= %s
[stderr] [2026-03-19 01:23:32] INFO | etl_billiards | DWS_BUILD_ORDER_SUMMARY: 完成, 统计={'fetched': 0, 'inserted': 119, 'updated': 0, 'skipped': 0, 'errors': 0}
[stderr] [2026-03-19 01:23:32] INFO | etl_billiards | DWS_BUILD_ORDER_SUMMARY: 工具类任务执行成功
[stderr] [2026-03-19 01:23:32] INFO | etl_billiards | DWS_BUILD_ORDER_SUMMARY: 结果统计: {'fetched': 0, 'inserted': 119, 'updated': 0, 'skipped': 0, 'errors': 0}
[stderr] [2026-03-19 01:23:32] INFO | etl_billiards | DWS_MEMBER_CONSUMPTION: 抓取阶段开始,目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_MEMBER_CONSUMPTION\DWS_MEMBER_CONSUMPTION-14536-20260319-012332
[stderr] [2026-03-19 01:23:32] INFO | etl_billiards | DWS_MEMBER_CONSUMPTION: 提取数据,统计日期 2026-03-19
[stderr] [2026-03-19 01:23:32] INFO | etl_billiards | DWS_MEMBER_CONSUMPTION: 抓取完成,文件=None记录数=0
[stderr] [2026-03-19 01:23:32] INFO | etl_billiards | DWS_MEMBER_CONSUMPTION: 本地清洗入库开始,源目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_MEMBER_CONSUMPTION\DWS_MEMBER_CONSUMPTION-14536-20260319-012332
[stderr] [2026-03-19 01:23:32] INFO | etl_billiards | DWS_MEMBER_CONSUMPTION: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:23:32] INFO | etl_billiards | DWS_MEMBER_CONSUMPTION: 提取数据,统计日期 2026-03-19
[stderr] [2026-03-19 01:23:33] INFO | etl_billiards | DWS_MEMBER_CONSUMPTION: 转换数据199 条会员消费记录
[stderr] [2026-03-19 01:23:37] INFO | etl_billiards | DWS_MEMBER_CONSUMPTION: 完成,统计={'counts': {'fetched': 199, 'inserted': 199, 'updated': 0, 'skipped': 0, 'errors': 0}, 'extra': {'deleted': 199}}
[stderr] [2026-03-19 01:23:38] INFO | etl_billiards | DWS_MEMBER_VISIT: 抓取阶段开始,目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_MEMBER_VISIT\DWS_MEMBER_VISIT-14537-20260319-012338
[stderr] [2026-03-19 01:23:38] INFO | etl_billiards | DWS_MEMBER_VISIT: 提取数据,日期范围 2026-03-18 ~ 2026-03-19
[stderr] [2026-03-19 01:23:38] INFO | etl_billiards | DWS_MEMBER_VISIT: 抓取完成,文件=None记录数=0
[stderr] [2026-03-19 01:23:38] INFO | etl_billiards | DWS_MEMBER_VISIT: 本地清洗入库开始,源目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_MEMBER_VISIT\DWS_MEMBER_VISIT-14537-20260319-012338
[stderr] [2026-03-19 01:23:38] INFO | etl_billiards | DWS_MEMBER_VISIT: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:23:38] INFO | etl_billiards | DWS_MEMBER_VISIT: 提取数据,日期范围 2026-03-18 ~ 2026-03-19
[stderr] [2026-03-19 01:23:38] INFO | etl_billiards | DWS_MEMBER_VISIT: 转换数据11 条结账单
[stderr] [2026-03-19 01:23:39] INFO | etl_billiards | DWS_MEMBER_VISIT: 完成,统计={'counts': {'fetched': 11, 'inserted': 11, 'updated': 0, 'skipped': 0, 'errors': 0}, 'extra': {'deleted': 9, 'extra_deleted': 0}}
[stderr] [2026-03-19 01:23:39] INFO | etl_billiards | DWS_FINANCE_DAILY: 抓取阶段开始,目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_FINANCE_DAILY\DWS_FINANCE_DAILY-14538-20260319-012339
[stderr] [2026-03-19 01:23:39] INFO | etl_billiards | DWS_FINANCE_DAILY: 提取数据,日期范围 2026-03-18 ~ 2026-03-19
[stderr] [2026-03-19 01:23:39] INFO | etl_billiards | DWS_FINANCE_DAILY: 抓取完成,文件=None记录数=0
[stderr] [2026-03-19 01:23:39] INFO | etl_billiards | DWS_FINANCE_DAILY: 本地清洗入库开始,源目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_FINANCE_DAILY\DWS_FINANCE_DAILY-14538-20260319-012339
[stderr] [2026-03-19 01:23:39] INFO | etl_billiards | DWS_FINANCE_DAILY: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:23:39] INFO | etl_billiards | DWS_FINANCE_DAILY: 提取数据,日期范围 2026-03-18 ~ 2026-03-19
[stderr] [2026-03-19 01:23:39] INFO | etl_billiards | DWS_FINANCE_DAILY: 转换数据1 天结账数据0 天充值数据
[stderr] [2026-03-19 01:23:39] INFO | etl_billiards | DWS_FINANCE_DAILY: 完成,统计={'counts': {'fetched': 1, 'inserted': 1, 'updated': 0, 'skipped': 0, 'errors': 0}, 'extra': {'deleted': 1}}
[stderr] [2026-03-19 01:23:40] INFO | etl_billiards | DWS_FINANCE_RECHARGE: 抓取阶段开始,目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_FINANCE_RECHARGE\DWS_FINANCE_RECHARGE-14539-20260319-012340
[stderr] [2026-03-19 01:23:40] INFO | etl_billiards | DWS_FINANCE_RECHARGE: 抓取完成,文件=None记录数=0
[stderr] [2026-03-19 01:23:40] INFO | etl_billiards | DWS_FINANCE_RECHARGE: 本地清洗入库开始,源目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_FINANCE_RECHARGE\DWS_FINANCE_RECHARGE-14539-20260319-012340
[stderr] [2026-03-19 01:23:40] INFO | etl_billiards | DWS_FINANCE_RECHARGE: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:23:40] INFO | etl_billiards | DWS_FINANCE_RECHARGE: 完成,统计={'counts': {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0}}
[stderr] [2026-03-19 01:23:40] INFO | etl_billiards | DWS_FINANCE_INCOME_STRUCTURE: 抓取阶段开始,目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_FINANCE_INCOME_STRUCTURE\DWS_FINANCE_INCOME_STRUCTURE-14540-20260319-012340
[stderr] [2026-03-19 01:23:40] INFO | etl_billiards | DWS_FINANCE_INCOME_STRUCTURE: 抓取完成,文件=None记录数=0
[stderr] [2026-03-19 01:23:40] INFO | etl_billiards | DWS_FINANCE_INCOME_STRUCTURE: 本地清洗入库开始,源目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_FINANCE_INCOME_STRUCTURE\DWS_FINANCE_INCOME_STRUCTURE-14540-20260319-012340
[stderr] [2026-03-19 01:23:40] INFO | etl_billiards | DWS_FINANCE_INCOME_STRUCTURE: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:23:41] INFO | etl_billiards | DWS_FINANCE_INCOME_STRUCTURE: 完成,统计={'deleted': 8, 'inserted': 8}
[stderr] [2026-03-19 01:23:41] INFO | etl_billiards | DWS_FINANCE_DISCOUNT_DETAIL: 抓取阶段开始,目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_FINANCE_DISCOUNT_DETAIL\DWS_FINANCE_DISCOUNT_DETAIL-14541-20260319-012341
[stderr] [2026-03-19 01:23:41] INFO | etl_billiards | DWS_FINANCE_DISCOUNT_DETAIL: 抓取完成,文件=None记录数=0
[stderr] [2026-03-19 01:23:41] INFO | etl_billiards | DWS_FINANCE_DISCOUNT_DETAIL: 本地清洗入库开始,源目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_FINANCE_DISCOUNT_DETAIL\DWS_FINANCE_DISCOUNT_DETAIL-14541-20260319-012341
[stderr] [2026-03-19 01:23:41] INFO | etl_billiards | DWS_FINANCE_DISCOUNT_DETAIL: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:23:41] INFO | etl_billiards | DWS_FINANCE_DISCOUNT_DETAIL: 完成,统计={'deleted': 8, 'inserted': 8}
[stderr] [2026-03-19 01:23:42] INFO | etl_billiards | DWS_ASSISTANT_MONTHLY: 抓取阶段开始,目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_ASSISTANT_MONTHLY\DWS_ASSISTANT_MONTHLY-14542-20260319-012342
[stderr] [2026-03-19 01:23:42] INFO | etl_billiards | DWS_ASSISTANT_MONTHLY: 提取数据,月份范围 ['2026-03-01']
[stderr] [2026-03-19 01:23:42] INFO | etl_billiards | DWS_ASSISTANT_MONTHLY: 抓取完成,文件=None记录数=0
[stderr] [2026-03-19 01:23:42] INFO | etl_billiards | DWS_ASSISTANT_MONTHLY: 本地清洗入库开始,源目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_ASSISTANT_MONTHLY\DWS_ASSISTANT_MONTHLY-14542-20260319-012342
[stderr] [2026-03-19 01:23:42] INFO | etl_billiards | DWS_ASSISTANT_MONTHLY: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:23:42] INFO | etl_billiards | DWS_ASSISTANT_MONTHLY: 提取数据,月份范围 ['2026-03-01']
[stderr] [2026-03-19 01:23:42] INFO | etl_billiards | DWS_ASSISTANT_MONTHLY: 转换数据1 个月份25 条聚合记录
[stderr] [2026-03-19 01:23:43] INFO | etl_billiards | DWS_ASSISTANT_MONTHLY: 加载完成,删除 25 行,插入 25 行
[stderr] [2026-03-19 01:23:43] INFO | etl_billiards | DWS_ASSISTANT_MONTHLY: 完成,统计={'counts': {'fetched': 25, 'inserted': 25, 'updated': 0, 'skipped': 0, 'errors': 0}, 'extra': {'deleted': 25}}
[stderr] [2026-03-19 01:23:43] INFO | etl_billiards | DWS_ASSISTANT_FINANCE: 抓取阶段开始,目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_ASSISTANT_FINANCE\DWS_ASSISTANT_FINANCE-14543-20260319-012343
[stderr] [2026-03-19 01:23:43] INFO | etl_billiards | DWS_ASSISTANT_FINANCE: 抓取完成,文件=None记录数=0
[stderr] [2026-03-19 01:23:43] INFO | etl_billiards | DWS_ASSISTANT_FINANCE: 本地清洗入库开始,源目录=C:\NeoZQYY\export\ETL-Connectors\feiqiu\JSON\DWS_ASSISTANT_FINANCE\DWS_ASSISTANT_FINANCE-14543-20260319-012343
[stderr] [2026-03-19 01:23:43] INFO | etl_billiards | DWS_ASSISTANT_FINANCE: 开始执行(1/1),窗口[2026-03-18 19:22:46.318958+08:00 ~ 2026-03-19 03:22:46.318958+08:00]
[stderr] [2026-03-19 01:23:44] INFO | etl_billiards | DWS_ASSISTANT_FINANCE: 完成,统计={'counts': {'fetched': 8, 'inserted': 8, 'updated': 0, 'skipped': 0, 'errors': 0}, 'extra': {'deleted': 7}}
[stderr] [2026-03-19 01:23:44] INFO | etl_billiards | DWS_WINBACK_INDEX: 开始执行工具类任务
[stderr] [2026-03-19 01:23:44] INFO | etl_billiards | 开始计算 DWS_WINBACK_INDEX
[stderr] [2026-03-19 01:23:44] INFO | etl_billiards | DWS_WINBACK_INDEX: 使用回溯天数覆盖 lookback_days_recency=60
[stderr] [2026-03-19 01:23:46] INFO | etl_billiards | WBI calculation finished, inserted 52 rows
[stderr] [2026-03-19 01:23:46] INFO | etl_billiards | DWS_WINBACK_INDEX: 工具类任务执行成功
[stderr] [2026-03-19 01:23:46] INFO | etl_billiards | DWS_NEWCONV_INDEX: 开始执行工具类任务
[stderr] [2026-03-19 01:23:46] INFO | etl_billiards | 开始计算 DWS_NEWCONV_INDEX
[stderr] [2026-03-19 01:23:46] INFO | etl_billiards | DWS_NEWCONV_INDEX: 使用回溯天数覆盖 lookback_days_recency=60
[stderr] [2026-03-19 01:23:46] INFO | etl_billiards | NCI calculation finished, inserted 12 rows
[stderr] [2026-03-19 01:23:46] INFO | etl_billiards | DWS_NEWCONV_INDEX: 工具类任务执行成功
[stderr] [2026-03-19 01:23:46] INFO | etl_billiards | DWS_RELATION_INDEX: 开始执行工具类任务
[stderr] [2026-03-19 01:23:46] INFO | etl_billiards | 开始计算关系指数RS/OS/MS/ML
[stderr] [2026-03-19 01:23:47] INFO | etl_billiards | 服务关系对数量: 106
[stderr] [2026-03-19 01:23:50] INFO | etl_billiards | 关系指数计算完成,写入 106 条记录
[stderr] [2026-03-19 01:23:50] INFO | etl_billiards | DWS_RELATION_INDEX: 工具类任务执行成功
[stderr] [2026-03-19 01:23:50] INFO | etl_billiards | DWS_SPENDING_POWER_INDEX: 开始执行工具类任务
[stderr] [2026-03-19 01:23:50] INFO | etl_billiards | 开始计算 SPI 消费力指数
[stderr] [2026-03-19 01:23:50] INFO | etl_billiards | SPI 消费特征提取完成: site_id=2790685415443269, 会员数=94, 窗口=30/90天
[stderr] [2026-03-19 01:23:50] INFO | etl_billiards | SPI 充值特征提取完成: site_id=2790685415443269, 有充值会员数=36, 窗口=90天
[stderr] [2026-03-19 01:23:50] INFO | etl_billiards | SPI 日消费 EWMA 批量计算完成: site_id=2790685415443269, 会员数=94, α=0.30
[stderr] [2026-03-19 01:23:50] INFO | etl_billiards | SPI 基数校准: amount_base_spend_30 非零样本 12/94中位数 378.00
[stderr] [2026-03-19 01:23:50] INFO | etl_billiards | SPI 基数校准: amount_base_spend_90 非零样本 45/94中位数 236.00
[stderr] [2026-03-19 01:23:50] INFO | etl_billiards | SPI 基数校准: amount_base_ticket_90 非零样本 45/94中位数 36.25
[stderr] [2026-03-19 01:23:50] INFO | etl_billiards | SPI 基数校准: amount_base_recharge_90 非零样本 36/94中位数 6100.00
[stderr] [2026-03-19 01:23:50] INFO | etl_billiards | SPI 基数校准: amount_base_speed_abs 非零样本 12/94中位数 124.26
[stderr] [2026-03-19 01:23:50] INFO | etl_billiards | SPI 基数校准: amount_base_ewma_90 非零样本 45/94中位数 48.00
[stderr] [2026-03-19 01:23:52] INFO | etl_billiards | SPI 数据写入完成: site_id=2790685415443269, 插入记录=94
[stderr] [2026-03-19 01:23:52] INFO | etl_billiards | SPI 计算完成: site_id=2790685415443269, 会员数=94, 写入记录=94
[stderr] [2026-03-19 01:23:52] INFO | etl_billiards | DWS_SPENDING_POWER_INDEX: 工具类任务执行成功
[stderr] [2026-03-19 01:23:52] INFO | etl_billiards | 所有任务执行完成
[stderr] [2026-03-19 01:24:03] INFO | etl_billiards | 一致性检查报告已生成: C:\NeoZQYY\export\ETL-Connectors\feiqiu\REPORTS\consistency_report_20260319_012403.md
[stderr] [2026-03-19 01:24:03] INFO | etl_billiards | 计时报告已生成
[stderr] [2026-03-19 01:24:03] INFO | etl_billiards |
[stderr] ╔══════════════════════════════════════════════════════════════╗
[stderr] ║ 任务执行总结 ║
[stderr] ╠══════════════════════════════════════════════════════════════╣
[stderr] ║ 任务代码: FLOW_API_FULL ║
[stderr] ║ 执行状态: 成功 ║
[stderr] ║ 执行时间: 2026-03-19 01:22:46 ~ 01:24:03 (1分17秒) ║
[stderr] ╠══════════════════════════════════════════════════════════════╣
[stderr] ║ 数据统计 ║
[stderr] ║ - 获取记录: 0 ║
[stderr] ║ - 新增记录: 135 ║
[stderr] ║ - 更新记录: 0 ║
[stderr] ║ - 跳过记录: 0 ║
[stderr] ║ - 错误记录: 0 ║
[stderr] ╚══════════════════════════════════════════════════════════════╝
[stderr] [2026-03-19 01:24:03] INFO | etl_billiards |
[stderr] ╔══════════════════════════════════════════════════════════════╗
[stderr] ║ 任务执行总结 ║
[stderr] ╠══════════════════════════════════════════════════════════════╣
[stderr] ║ 任务代码: FLOW_API_FULL ║
[stderr] ║ 执行状态: 成功 ║
[stderr] ║ 执行时间: 2026-03-19 01:22:46 ~ 01:24:03 (1分17秒) ║
[stderr] ╠══════════════════════════════════════════════════════════════╣
[stderr] ║ 数据统计 ║
[stderr] ║ - 获取记录: 0 ║
[stderr] ║ - 新增记录: 135 ║
[stderr] ║ - 更新记录: 0 ║
[stderr] ║ - 跳过记录: 0 ║
[stderr] ║ - 错误记录: 0 ║
[stderr] ╚══════════════════════════════════════════════════════════════╝
[stderr] [2026-03-19 01:24:03] INFO | etl_billiards | Flow 执行完成: SUCCESS
[stderr] [2026-03-19 01:24:03] INFO | etl_billiards | ETL运行完成