fetch_table_code.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #!/usr/bin/env python
  2. # coding=utf-8
  3. """根据表名从 DataWorks 获取生产代码,保存到 production_code/ 目录。
  4. 用法:
  5. python fetch_table_code.py loghubods.dwd_recsys_alg_exposure_base_20250108
  6. python fetch_table_code.py loghubods.dwd_recsys_alg_exposure_base_20250108 --force
  7. python fetch_table_code.py loghubods.dwd_recsys_alg_exposure_base_20250108 --recursive
  8. python fetch_table_code.py loghubods.dwd_recsys_alg_exposure_base_20250108 --recursive --depth 5
  9. """
  10. import sys
  11. import argparse
  12. def main():
  13. parser = argparse.ArgumentParser(description="获取表的 DataWorks 生产代码")
  14. parser.add_argument("table_name", help="表名,格式: project.table 或 table")
  15. parser.add_argument("--force", action="store_true", help="跳过缓存,强制从 API 拉取")
  16. parser.add_argument("--recursive", "-r", action="store_true", help="递归获取所有上游表的代码")
  17. parser.add_argument("--depth", type=int, default=3, help="递归最大深度(默认 3)")
  18. args = parser.parse_args()
  19. from lib.odps_module import DataWorksClient
  20. dw = DataWorksClient()
  21. if args.recursive:
  22. dw.get_node_code_recursive(args.table_name, max_depth=args.depth, force=args.force)
  23. else:
  24. results = dw.get_node_code(args.table_name, force=args.force)
  25. if not results:
  26. print(f"未找到 '{args.table_name}' 的生产代码")
  27. sys.exit(1)
  28. for r in results:
  29. print(f"任务: {r['task_name']} 代码长度: {len(r['content'])} chars")
  30. if __name__ == "__main__":
  31. main()