Airflow PostgresOperator 仅在与 DAG 相同的文件夹中查找 SQL 文件

Bep*_*e C 3 python airflow

只有将 SQL 文件放在与 DAG 相同的文件夹中时,我才能运行它:

create_tables = PostgresOperator(
task_id="create_tables",
dag=dag,
postgres_conn_id="redshift",
sql="create_tables.sql"
)
Run Code Online (Sandbox Code Playgroud)

如果 create_tables.sql 位于不同的文件夹(父文件夹、同级文件夹)中,PostgresOperator 会抛出异常jinja2.exceptions.TemplateNotFound,我尝试过绝对路径、相对路径(../create_tables.sql),但没有运气。

如何理解这个算子的文件加载机制?

Jav*_*más 6

定义 dag 时,您必须添加 template_searchpath 作为参数,它是文件夹的绝对路径。然后你只需要调用文件名即可。例子:

with DAG('retraining_sagemaker',
         default_args=default_args,
         schedule_interval = timedelta(days=21),
         template_searchpath = ['/home/ubuntu/airflow_ci/current/scripts/antifraud']
         ) as dag:


    start = DummyOperator(
            task_id = 'start')

    generate_train_and_test_tables = PostgresOperator(
        task_id = 'generate_train_and_test_tables',
        sql = ['generate_train_and_test_tables.sql'],
        postgres_conn_id = 'redshift',
        autocommit = True)
Run Code Online (Sandbox Code Playgroud)