Files
Neo-ZQYY/docs/deployment/EXPORT-PATHS.md

11 KiB
Raw Permalink Blame History

Export 输出路径规范

最后更新2026-02-19 本文档描述 export/ 目录的统一结构、各子目录用途、对应的 .env 变量、以及代码中的读取方式。


目录总览

export/
├── ETL-Connectors/feiqiu/
│   ├── JSON/          — API 原始 JSON 导出ODS 抓取落盘)
│   ├── LOGS/          — ETL 运行日志(每次 run 一个 .log
│   └── REPORTS/       — ETL 质检/完整性报告JSON 格式)
├── SYSTEM/
│   ├── LOGS/          — 系统级运维日志(预留)
│   ├── REPORTS/
│   │   ├── dataflow_analysis/  — 数据流结构分析报告Markdown + 采集中间产物)
│   │   ├── field_audit/        — 字段排查报告Markdown
│   │   └── full_dataflow_doc/  — 全链路数据流文档Markdown
│   └── CACHE/
│       └── api_samples/        — API 样本缓存24h 有效gen_full_dataflow_doc 使用)
└── BACKEND/
    └── LOGS/          — 后端结构化日志(预留,待 5.3 后端日志改造后启用)

服务器部署时不保留 export/(通过 setup-server-git.py 排除),仅开发机留存。 服务器的输出路径由各环境 .env 独立配置,指向 repo/export/ 下对应子目录。


环境变量与目录映射

环境变量 默认值(开发机) 对应目录 说明
EXPORT_ROOT C:/NeoZQYY/export/ETL-Connectors/feiqiu/JSON ETL-Connectors/feiqiu/JSON/ ODS 抓取 JSON 落盘根目录
LOG_ROOT C:/NeoZQYY/export/ETL-Connectors/feiqiu/LOGS ETL-Connectors/feiqiu/LOGS/ ETL 运行日志
FETCH_ROOT C:/NeoZQYY/export/ETL-Connectors/feiqiu/JSON ETL-Connectors/feiqiu/JSON/ FETCH_ONLY 模式 JSON 输出(通常与 EXPORT_ROOT 相同)
ETL_REPORT_ROOT C:/NeoZQYY/export/ETL-Connectors/feiqiu/REPORTS ETL-Connectors/feiqiu/REPORTS/ ETL 质检/完整性报告
SYSTEM_ANALYZE_ROOT C:/NeoZQYY/export/SYSTEM/REPORTS/dataflow_analysis SYSTEM/REPORTS/dataflow_analysis/ 数据流结构分析报告
FIELD_AUDIT_ROOT C:/NeoZQYY/export/SYSTEM/REPORTS/field_audit SYSTEM/REPORTS/field_audit/ 字段排查报告
FULL_DATAFLOW_DOC_ROOT C:/NeoZQYY/export/SYSTEM/REPORTS/full_dataflow_doc SYSTEM/REPORTS/full_dataflow_doc/ 全链路数据流文档
API_SAMPLE_CACHE_ROOT C:/NeoZQYY/export/SYSTEM/CACHE/api_samples SYSTEM/CACHE/api_samples/ API 样本缓存
SYSTEM_LOG_ROOT C:/NeoZQYY/export/SYSTEM/LOGS SYSTEM/LOGS/ 系统级运维日志
BACKEND_LOG_ROOT C:/NeoZQYY/export/BACKEND/LOGS BACKEND/LOGS/ 后端结构化日志

各目录详细说明与代码配合

1. ETL-Connectors/feiqiu/JSON — API 原始 JSON 导出

环境变量:EXPORT_ROOTFETCH_ROOT

配置加载链路:

.env EXPORT_ROOT=...
  → env_parser.py ENV_MAP["EXPORT_ROOT"] → ("io.export_root",)
  → defaults.py io.export_root 默认 ""(空字符串,强制要求 .env 配置)
  → AppConfig.get("io.export_root")

代码使用:

  • utils/json_store.pydump_json() 负责写入 JSON 文件
  • tasks/ods/ods_json_archive_task.py 调用 dump_json() 将 API 原始响应落盘
  • 目录结构:{EXPORT_ROOT}/{TASK_CODE}/{TASK_CODE}-{run_id}-{timestamp}/
  • 每个子目录包含按 endpoint 命名的 .json 文件和 manifest.json

示例输出:

export/ETL-Connectors/feiqiu/JSON/
└── ODS_PAYMENT/
    └── ODS_PAYMENT-abc123-20260219_1430/
        ├── payment_transactions.json
        └── manifest.json

2. ETL-Connectors/feiqiu/LOGS — ETL 运行日志

环境变量:LOG_ROOT

配置加载链路:

.env LOG_ROOT=...
  → env_parser.py ENV_MAP["LOG_ROOT"] → ("io.log_root",)
  → defaults.py io.log_root 默认 ""(空字符串,强制要求 .env 配置)
  → AppConfig.get("io.log_root") 或 config["io"]["log_root"]

代码使用:

  • orchestration/task_executor.py_attach_run_file_logger() 方法
    • 读取 self.config["io"]["log_root"]
    • 创建 {LOG_ROOT}/{run_uuid}.log
    • 每次 ETL 运行生成一个以 run_uuid 命名的日志文件
  • utils/logging_utils.pyconfigure_logging() 上下文管理器
    • 接收 log_file: Path 参数,支持同时输出到控制台和文件

示例输出:

export/ETL-Connectors/feiqiu/LOGS/
├── 37f16195960649b384a6bf1e3bdb092c.log
├── 7b6d77fe8a6a4503a0ce4374e3864be9.log
└── ecc3684e2c794d1ba30b6748b999593c.log

3. ETL-Connectors/feiqiu/REPORTS — ETL 质检/完整性报告

环境变量:ETL_REPORT_ROOT

当前代码行为(已适配):

  • quality/integrity_service.pywrite_report() 函数
    • 读取 ETL_REPORT_ROOT 环境变量作为输出根目录
    • 环境变量缺失时抛出 KeyError
    • 支持 report_path 参数覆盖
  • quality/integrity_checker.py_default_report_path() 函数
    • 读取 ETL_REPORT_ROOT 环境变量
    • 环境变量缺失时抛出 KeyError
  • tasks/dwd/dwd_quality_task.pyDwdQualityTask
    • REPORT_PATHETL_REPORT_ROOT 环境变量读取
    • 环境变量缺失时 load() 抛出 RuntimeError
  • scripts/debug/generate_report.py
    • REPORTS_DIRETL_REPORT_ROOT 环境变量读取
    • 环境变量缺失时抛出 KeyError
  • ETL 内部脚本(check/repair/debug/scripts/
    • 均通过 os.environ.get("ETL_REPORT_ROOT") 读取
    • 环境变量缺失时抛出 KeyError

4. SYSTEM/REPORTS/dataflow_analysis — 数据流结构分析报告

环境变量:SYSTEM_ANALYZE_ROOT

代码使用:

  • scripts/ops/gen_dataflow_report.pyresolve_data_dir() 函数
    • 通过 _env_paths.get_output_path("SYSTEM_ANALYZE_ROOT") 读取
    • 环境变量缺失时抛出 KeyError
    • 支持 --output-dir CLI 参数覆盖
  • scripts/ops/analyze_dataflow.pyresolve_output_dir() 函数
    • 通过 _env_paths.get_output_path("SYSTEM_ANALYZE_ROOT") 读取
    • 环境变量缺失时抛出 KeyError

目录内容:

export/SYSTEM/REPORTS/dataflow_analysis/
├── bd_descriptions/       — 业务描述 JSON每表一个
├── db_schemas/            — 数据库表结构 JSONODS + DWD
├── field_mappings/        — 字段映射 JSON
├── json_trees/            — API JSON 结构树
├── collection_manifest.json  — 采集清单
└── dataflow_YYYY-MM-DD_HHMMSS.md  — 最终报告

已适配:代码直接读取 SYSTEM_ANALYZE_ROOT,无需改动。


5. SYSTEM/REPORTS/field_audit — 字段排查报告

环境变量:FIELD_AUDIT_ROOT

当前代码行为(已适配):

  • scripts/ops/field_audit.py
    • 通过 _env_paths.get_output_path("FIELD_AUDIT_ROOT") 读取
    • 环境变量缺失时抛出 KeyError
    • 支持 --output 参数覆盖
  • scripts/ops/export_dwd_field_review.py
    • 通过 _env_paths.get_output_path("FIELD_AUDIT_ROOT") 读取
    • 环境变量缺失时抛出 KeyError

6. SYSTEM/REPORTS/full_dataflow_doc — 全链路数据流文档

环境变量:FULL_DATAFLOW_DOC_ROOT

当前代码行为(已适配):

  • scripts/ops/gen_full_dataflow_doc.py
    • OUT 通过 _env_paths.get_output_path("FULL_DATAFLOW_DOC_ROOT") 读取
    • SAMPLE_DIR 通过 _env_paths.get_output_path("API_SAMPLE_CACHE_ROOT") 读取
    • 环境变量缺失时抛出 KeyError
  • scripts/ops/gen_dataflow_doc.py
    • OUT 通过 _env_paths.get_output_path("FULL_DATAFLOW_DOC_ROOT") 读取
    • 环境变量缺失时抛出 KeyError
  • scripts/ops/gen_api_field_mapping.py
    • INPUT_DOC 通过 _env_paths.get_output_path("FULL_DATAFLOW_DOC_ROOT") 读取
    • 环境变量缺失时抛出 KeyError

7. SYSTEM/CACHE/api_samples — API 样本缓存

环境变量:API_SAMPLE_CACHE_ROOT

当前代码行为(已适配):

  • scripts/ops/gen_full_dataflow_doc.py
    • SAMPLE_DIR 通过 _env_paths.get_output_path("API_SAMPLE_CACHE_ROOT") 读取
    • 环境变量缺失时抛出 KeyError
    • 缓存 24 小时有效,超时重新从 API 获取

8. BACKEND/LOGS — 后端结构化日志

环境变量:BACKEND_LOG_ROOT(预留)

当前状态:

  • 后端仅使用 uvicorn 默认日志,无文件输出
  • 对应 LAUNCH-CHECKLIST 第 5.3 项"后端结构化日志"

启用时机:

  • 后端接入结构化日志后,配置 BACKEND_LOG_ROOT 指向此目录

9. SYSTEM/LOGS — 系统级运维日志

环境变量:SYSTEM_LOG_ROOT(预留)

当前状态:

  • 预留给未来的系统级运维脚本日志输出
  • 如监控系统LAUNCH-CHECKLIST 7.2)上线后的采集器日志

配置优先级

所有路径变量遵循项目统一的配置优先级:

defaults.py 默认值(路径类均为空字符串)< 根 .env < 应用 .env如 feiqiu/.env< 环境变量 < CLI 参数

ETL 模块的路径变量通过 env_parser.pyENV_MAP 映射到 AppConfigio.* 配置节。 defaults.py 中所有 io.* 路径默认值已清空为 "",如果 .env 未配置,下游代码会因空路径而失败。 系统级脚本直接通过 os.environ.get()python-dotenv 读取。


代码适配状态

目录 环境变量 代码已适配 备注
ETL JSON EXPORT_ROOT env_parser.pyio.export_root
ETL LOGS LOG_ROOT env_parser.pyio.log_root
ETL FETCH FETCH_ROOT env_parser.pyio.fetch_root
ETL REPORTS ETL_REPORT_ROOT integrity_service.py / dwd_quality_task.py 已适配
dataflow_analysis SYSTEM_ANALYZE_ROOT gen_dataflow_report.py 已读取
field_audit FIELD_AUDIT_ROOT field_audit.py 已适配
full_dataflow_doc FULL_DATAFLOW_DOC_ROOT gen_full_dataflow_doc.py 已适配
api_samples API_SAMPLE_CACHE_ROOT gen_full_dataflow_doc.py 已适配
SYSTEM LOGS SYSTEM_LOG_ROOT 预留
BACKEND LOGS BACKEND_LOG_ROOT 预留

服务器环境配置示例

开发机(C:\NeoZQYY\.env

EXPORT_ROOT=C:/NeoZQYY/export/ETL-Connectors/feiqiu/JSON
LOG_ROOT=C:/NeoZQYY/export/ETL-Connectors/feiqiu/LOGS
FETCH_ROOT=C:/NeoZQYY/export/ETL-Connectors/feiqiu/JSON
ETL_REPORT_ROOT=C:/NeoZQYY/export/ETL-Connectors/feiqiu/REPORTS
SYSTEM_ANALYZE_ROOT=C:/NeoZQYY/export/SYSTEM/REPORTS/dataflow_analysis
BACKEND_LOG_ROOT=C:/NeoZQYY/export/BACKEND/LOGS

服务器测试环境(D:\NeoZQYY\test\repo\.env

EXPORT_ROOT=D:/NeoZQYY/test/repo/export/ETL-Connectors/feiqiu/JSON
LOG_ROOT=D:/NeoZQYY/test/repo/export/ETL-Connectors/feiqiu/LOGS
FETCH_ROOT=D:/NeoZQYY/test/repo/export/ETL-Connectors/feiqiu/JSON
ETL_REPORT_ROOT=D:/NeoZQYY/test/repo/export/ETL-Connectors/feiqiu/REPORTS
SYSTEM_ANALYZE_ROOT=D:/NeoZQYY/test/repo/export/SYSTEM/REPORTS/dataflow_analysis
BACKEND_LOG_ROOT=D:/NeoZQYY/test/repo/export/BACKEND/LOGS

服务器正式环境(D:\NeoZQYY\prod\repo\.env

EXPORT_ROOT=D:/NeoZQYY/prod/repo/export/ETL-Connectors/feiqiu/JSON
LOG_ROOT=D:/NeoZQYY/prod/repo/export/ETL-Connectors/feiqiu/LOGS
FETCH_ROOT=D:/NeoZQYY/prod/repo/export/ETL-Connectors/feiqiu/JSON
ETL_REPORT_ROOT=D:/NeoZQYY/prod/repo/export/ETL-Connectors/feiqiu/REPORTS
SYSTEM_ANALYZE_ROOT=D:/NeoZQYY/prod/repo/export/SYSTEM/REPORTS/dataflow_analysis
BACKEND_LOG_ROOT=D:/NeoZQYY/prod/repo/export/BACKEND/LOGS