我正在编写一个Airflow DAG,以便从API中提取数据并将其存储在我自己的数据库中。遵循We're All Using Airflow Wrong中概述的最佳实践,我将DAG编写为一系列KubernetesPodOperator,它们运行非常简单的Python函数作为Docker映像的入口点。
我试图解决的问题是,这个DAG应该只为execution_date拉取数据。
如果我使用的是PythonOperator (doc),我可以使用provide_context参数使函数可以使用执行日期。但是从the KubernetesPodOperator's documentation来看,Kubernetes运算符似乎没有provide_context所做的事情的参数。
我最好的猜测是,您可以使用arguments命令传入一个日期范围,因为它是模板化的,所以您可以像这样引用它:
my_pod_operator = KubernetesPodOperator(
# ... other args here
arguments=['python', 'my_script.py', '{{ ds }}'],
# arguments continue
)然后,您将获得开始日期,就像您通过使用sys.argv将其他参数提供给作为脚本运行的Python文件一样。
这是正确的做法吗?
谢谢你的帮助。
发布于 2019-04-23 16:37:50
是的,这是正确的做法。
每个运算符都有template_fields。template_fields中列出的所有参数都可以渲染Jinja2模板和风流宏。
对于KubernetesPodOperator,如果您检查docs,您将发现:
template_fields = ['cmds', 'arguments', 'env_vars', 'config_file']这意味着您可以将'{{ ds }}'传递给上面列出的四个参数中的任何一个。
https://stackoverflow.com/questions/55796959
复制相似问题