Postgres Operator 的气流参数

Sau*_*uli 7 amazon-redshift airflow

我试图将执行日期作为运行时参数传递给 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
)
Run Code Online (Sandbox Code Playgroud)

然后我尝试在 sql 查询中使用此参数来接受 dag 传递的值

select 
{{ crunch_date }} as test1,
Run Code Online (Sandbox Code Playgroud)

dag 正确发送参数,但是查询只是采用空值而不是传递的执行日期。有没有办法让 postgresql with redshift 接受这个参数的正确值?

kax*_*xil 5

您必须更新您的 sql 查询,如下所示:

select 
{{ ds }} as test1,
Run Code Online (Sandbox Code Playgroud)

您将无法在另一个模板字段中使用一个模板字段。如果你想在任务中传递参数并在 Jinja 模板中使用它,请使用params参数。

更新

但请注意,这params不是模板化字段。如果您对其进行模板化,它将不会呈现,因为嵌套模板将不起作用。

task = MyPostgresOperator(
  task_id='test_date',
  postgres_conn_id='redshift',
  sql="test_file.sql",
  params={'textstring':'abc'},
  dag=dag
)
Run Code Online (Sandbox Code Playgroud)

哪里test_file.sql

select 
{{ params.textstring }} as test1,
Run Code Online (Sandbox Code Playgroud)

检查https://medium.com/datareply/airflow-lesser-known-tips-tricks-and-best-practises-cf4d4a90f8f中的第四点以了解有关params.