我正在编写一个Airflow DAG来从API中提取数据并将其存储在我拥有的数据库中。遵循We're All Using Airflow Wrong中概述的最佳实践,我将DAG编写为KubernetesPodOperator
s序列,它运行非常简单的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文件的任何其他参数一样。
这是正确的做法吗?
谢谢您的帮助。
是的,这是正确的做法。
每个运营商都有template_fields
。 template_fields
中列出的所有参数都可以渲染Jinja2模板和Airflow宏。
对于KubernetesPodOperator,如果你检查docs,你会发现:
template_fields = ['cmds', 'arguments', 'env_vars', 'config_file']
这意味着你可以通过'{{ ds }}'
to上面列出的四个参数中的任何一个。