Amazon redshift Postgres操作员的气流参数

Amazon redshift Postgres操作员的气流参数,amazon-redshift,airflow,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':

我试图将执行日期作为运行时参数传递给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正确地发送参数,但是查询只是采用空值,而不是传递的执行日期。有没有办法让带红移的postgresql接受此参数的正确值?

您可以使用查询字符串中的气流宏-需要将其传递给红移

例如:

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;
                     """
                 )


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

选择
{{ds}}作为test1,
您将无法在另一个模板字段中使用一个模板字段。如果要在任务中传递参数并在Jinja模板中使用它,请使用
params
参数

更新

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

task=MyPostgresOperator(
任务\u id='test\u date',
postgres_conn_id='redshift',
sql=“test\u file.sql”,
params={'textstring':'abc'},
dag=dag
)
其中
test_file.sql
是:

选择
{{params.textstring}}作为test1,

查看中的第四点以了解有关
参数的更多信息

它的红移@a_horse_,没有名称移除
{ds}
@psychoCoder周围的空格我已经尝试过了,但不起作用。虽然dag正确发送参数,但我唯一的问题是sql文件无法识别参数。我知道我可以在sql查询中使用宏。但是我想做的不是在dag中编写整个SQL查询,而是在dag中只调用SQL文件,然后将参数从dag传递到该SQL文件。我不确定您是否理解我的问题。你给出的解决方案已经是我尝试过但失败了。我将给出另一个简单的例子:task=MyPostgresOperator(task_id='test_date',postgres_conn_id='redshift',sql=“test_file.sql”,parameters={'textstring':'abc'},dag=dag),这里textstring是参数名,abc是它的值,现在我想在sql文件中获取参数值:选择{{textstring}与test1一样,但文本字符串只是空的。非常感谢,您是救世主。这完全符合预期。这里的一个问题是,当传递字符串值时,解决方案可以完美地工作,但不能与测试文件“{params.crunchdate}”中的ds参数sql='ETL models/test_file.sql',params={crunchdate':'{ds}}'一起工作'作为test1,它给出了一个错误:psycopg2.DataError:类型时间戳的输入语法无效:“{{ds}”