backfill_multi_demand_video_urls.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #!/usr/bin/env python3
  2. """回填 multi_demand_video_detail 已有行的 url1/url2(从 ODPS 拉取)。
  3. Usage:
  4. python scripts/backfill_multi_demand_video_urls.py
  5. python scripts/backfill_multi_demand_video_urls.py --decode-dt 20260729
  6. python scripts/backfill_multi_demand_video_urls.py --limit 500 --offset 0
  7. python scripts/backfill_multi_demand_video_urls.py --batch-size 100
  8. """
  9. from __future__ import annotations
  10. import argparse
  11. import json
  12. import logging
  13. import sys
  14. from pathlib import Path
  15. _ROOT = Path(__file__).resolve().parents[1]
  16. if str(_ROOT) not in sys.path:
  17. sys.path.insert(0, str(_ROOT))
  18. from supply_infra.scheduler.jobs.demand_pool.videos import ( # noqa: E402
  19. VIDEO_SYNC_BATCH_SIZE,
  20. backfill_multi_demand_video_urls,
  21. )
  22. logging.basicConfig(
  23. level=logging.INFO,
  24. format="%(asctime)s %(levelname)s %(name)s: %(message)s",
  25. )
  26. def _build_parser() -> argparse.ArgumentParser:
  27. parser = argparse.ArgumentParser(
  28. description="回填 multi_demand_video_detail.url1/url2"
  29. )
  30. parser.add_argument(
  31. "--decode-dt",
  32. help="ODPS dwd_topic_decode_result_di 分区日期 YYYYMMDD,默认昨天",
  33. )
  34. parser.add_argument(
  35. "--limit",
  36. type=int,
  37. default=None,
  38. help="本轮最多处理的 vid 数,默认全部",
  39. )
  40. parser.add_argument(
  41. "--offset",
  42. type=int,
  43. default=0,
  44. help="pending 列表起始偏移,用于分批手工执行",
  45. )
  46. parser.add_argument(
  47. "--batch-size",
  48. type=int,
  49. default=VIDEO_SYNC_BATCH_SIZE,
  50. help=f"每批查询 ODPS 的 vid 数,默认 {VIDEO_SYNC_BATCH_SIZE}",
  51. )
  52. return parser
  53. def main(argv: list[str] | None = None) -> int:
  54. args = _build_parser().parse_args(argv)
  55. result = backfill_multi_demand_video_urls(
  56. limit=args.limit,
  57. offset=args.offset,
  58. batch_size=args.batch_size,
  59. decode_dt=args.decode_dt,
  60. )
  61. print(json.dumps(result, ensure_ascii=False, indent=2))
  62. return 0
  63. if __name__ == "__main__":
  64. raise SystemExit(main())