【发布时间】:2019-07-30 21:47:33
【问题描述】:
我正在尝试通过使用变量填充 sql= 属性来在 Airflow 中使用 BigQueryOperator。我遇到的问题是使用 Jinja 变量时文件扩展名被删除。我的代码设置如下:
dag = DAG(
dag_id='data_ingest_dag',
template_searchpath=['/home/airflow/gcs/dags/sql/'],
default_args=DEFAULT_DAG_ARGS
)
bigquery_transform = BigQueryOperator(
task_id='bq-transform',
write_disposition='WRITE_TRUNCATE',
sql="{{dag_run.conf['sql_script']}}",
destination_dataset_table='{{dag_run.conf["destination_dataset_table"]}}',
dag=dag
)
传递的变量包含存储在单独 SQL 目录中的 SQL 文件的名称。如果我将该值作为静态字符串 sql="example_file.sql" 传递,则一切正常。但是,当我使用 Jinja 模板变量传递 example_file.sql 时,它会自动删除文件扩展名并收到此错误:
BigQuery job failed.
Final error was: {u'reason': u'invalidQuery', u'message': u'Syntax error: Unexpected identifier "example_file" at [1:1]', u'location': u'query'}
此外,我尝试将“.sql”硬编码到变量的末尾,以防扩展名将被删除。但是,这会导致整个变量引用被解释为字符串。
如何使用变量填充 BigQueryOperator 属性?
【问题讨论】:
标签: google-bigquery airflow google-cloud-composer