""" 整理 apps/etl/connectors/feiqiu/docs/database/ 下的过时文档。 - 归档:changes/ 下的变更记录、已删除表的 BD_manual、过时的 DDL 对比报告、过时的 overview 数据字典 - 保留:当前有效的 ODS/DWD/DWS/ETL_Admin BD_manual(main/ 和 Ex/)、mappings/ 用法:cd C:\\NeoZQYY && python scripts/ops/_archive_etl_db_docs.py """ import shutil from pathlib import Path ROOT = Path(__file__).resolve().parent.parent.parent ETL_DB_DOCS = ROOT / "apps" / "etl" / "connectors" / "feiqiu" / "docs" / "database" ARCHIVE = ETL_DB_DOCS / "_archived" # ── 需要归档的文件 ──────────────────────────────────────────────────────── FILES_TO_ARCHIVE = [] # 1. 所有 changes/ 目录下的 .md 文件(变更记录,已吸收进新 DDL 基线) for changes_dir in ETL_DB_DOCS.rglob("changes"): if changes_dir.is_dir(): for f in changes_dir.glob("*.md"): FILES_TO_ARCHIVE.append(f) # 2. 过时的 DDL 对比报告 ddl_compare = ETL_DB_DOCS / "ddl_compare_results.md" if ddl_compare.exists(): FILES_TO_ARCHIVE.append(ddl_compare) # 3. overview/ 下的数据字典(引用旧 DDL 路径,已过时) overview_dir = ETL_DB_DOCS / "overview" if overview_dir.exists(): for f in overview_dir.glob("*.md"): FILES_TO_ARCHIVE.append(f) # 4. 已删除表的 BD_manual(assistant_abolish 清理后这些表不存在了) DELETED_TABLE_DOCS = [ "DWD/main/BD_manual_dwd_assistant_trash_event.md", "DWD/Ex/BD_manual_dwd_assistant_trash_event_ex.md", "ODS/main/BD_manual_assistant_cancellation_records.md", # ODS mappings 中对应的映射文档 "ODS/mappings/mapping_GetAbolitionAssistant_assistant_cancellation_records.md", ] for rel in DELETED_TABLE_DOCS: p = ETL_DB_DOCS / rel if p.exists(): FILES_TO_ARCHIVE.append(p) def main(): if not FILES_TO_ARCHIVE: print("没有需要归档的文件。") return ARCHIVE.mkdir(parents=True, exist_ok=True) moved = [] for src in FILES_TO_ARCHIVE: # 保留相对于 ETL_DB_DOCS 的路径结构 rel = src.relative_to(ETL_DB_DOCS) dest = ARCHIVE / rel dest.parent.mkdir(parents=True, exist_ok=True) shutil.move(str(src), str(dest)) moved.append(str(rel)) # 清理空的 changes/ 和 overview/ 目录(只剩 .gitkeep 的保留) for d in ETL_DB_DOCS.rglob("changes"): if d.is_dir(): remaining = [f for f in d.iterdir() if f.name != ".gitkeep"] if not remaining: gk = d / ".gitkeep" if not gk.exists(): gk.touch() if overview_dir.exists(): remaining = [f for f in overview_dir.iterdir() if f.name != ".gitkeep"] if not remaining: gk = overview_dir / ".gitkeep" if not gk.exists(): gk.touch() print(f"归档目录:{ARCHIVE}") print(f"已归档 {len(moved)} 个文件:") for f in moved: print(f" ✅ {f}") if __name__ == "__main__": main()