我成功设置了Airflow服务器。我想运行一些测试工作,但我很难找到适合我想做的初学者指南。
现状:
我对大多数脚本的逻辑基于文件是否尚未处理,然后处理它。 “已处理”文件或者按照db表中的文件名进行组织,或者将文件移动到特殊的已处理文件夹。
我的其他逻辑基于文件名中的日期。我比较了存在的文件的日期与应该存在的日期(日期范围)。如果该文件不存在,那么我创建它(通常是BCP或PSQL查询)。
我只是让Airflow运行这些.py文件吗?或者我应该改变我的脚本以使用一些Airflow参数/ jinja模板?
我几乎觉得我几乎可以使用BashOperator。这会有用吗
dag_input = sys.argv[1]
def alter_table(query, engine=pg_engine):
fake_conn = engine.raw_connection()
fake_cur = fake_conn.cursor()
fake_cur.execute(query)
fake_conn.commit()
fake_cur.close()
query_list = [
f'SELECT * from table_1 where report_date = \'{dag_input}\'',
f'SELECT * from table_2 where report_date = \'{dag_input}\'',
]
for value in query_list:
alter_table(value)
然后dag会是这样的,有一个用于sys.argv的气流参数?
templated_command = """
python download_raw.py "{{ ds }}"
"""
t3 = BashOperator(
task_id='download_raw',
bash_command=templated_command,
dag=dag)
答案 0 :(得分:2)
由于此任务的代码是在python中,我将使用PythonOperator。
在download_raw.py中添加一个方法,该方法将** kwargs作为参数,您可以访问上下文中的所有内容。
from download_raw import my_func
t3 = PythonOperator(
task_id='download_raw',
python_callable=my_func,
dag=dag)
#inside download_raw.py
def my_func(**kwargs):
context = kwargs
ds = context['ds']
... (do your logic here)
我会这样做,或者你的bash命令在上下文的几个部分时会变得可怕。