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