我试图将执行日期作为运行时参数传递给postgres运算符
class MyPostgresOperator(PostgresOperator):
template_fields = ('sql','parameters')
task = MyPostgresOperator(
task_id='test_date',
postgres_conn_id='redshift',
sql="test_file.sql",
parameters={'crunch_date':'{{ ds }}'},
dag=dag
)
然后我尝试在sql查询中使用此参数来接受dag传递的值
select
{{ crunch_date }} as test1,
dag正确发送了参数,但是查询只是采用空值而不是传递的执行日期。有没有办法让带有redshift的postgresql对此参数接受正确的值?
答案 0 :(得分:0)
您可以在查询字符串中使用气流宏-需要将其传递给redshift。
示例:
PostgresOperator(task_id="run_on_redshift",
dag=dag,
postgres_conn_id=REDSHIFT_CONN_ID,
sql="""
UNLOAD ('select * from abc.xyz') TO 's3://path/{{ds}}/' iam_role 's3_iam_role' DELIMITER AS '^' ALLOWOVERWRITE addquotes ESCAPE HEADER parallel off;
"""
)
答案 1 :(得分:0)
您将必须如下更新您的SQL查询:
select
{{ ds }} as test1,
您将无法在其他模板字段中使用一个模板字段。如果要在任务中传递参数并在Jinja模板中使用它,请使用params
参数。
更新:
但是请注意,params
不是模板字段。而且,如果您对其进行模板化,则不会像嵌套模板一样起作用。
task = MyPostgresOperator(
task_id='test_date',
postgres_conn_id='redshift',
sql="test_file.sql",
params={'textstring':'abc'},
dag=dag
)
其中test_file.sql
是:
select
{{ params.textstring }} as test1,
在https://medium.com/datareply/airflow-lesser-known-tips-tricks-and-best-practises-cf4d4a90f8f中检查第4点,以了解有关params
的更多信息。