Configuration 如何在Airflow中使用配置文件

Configuration 如何在Airflow中使用配置文件,configuration,airflow,Configuration,Airflow,在“气流”中,我们创建了几个DAG。其中一些共享公共属性,例如从中读取文件的目录。目前,这些房地产在每个单独的DAG中都列为一个房地产,这在将来显然会成为问题。如果目录名要更改,我们必须进入每个DAG并更新这段代码(甚至可能缺少一段) 我正在研究创建某种配置文件,当需要某个属性时,可以将其解析为气流,并由各种DAG使用,但我似乎找不到任何关于如何执行此操作的文档或指南。我能找到的最多的是关于设置连接ID的文档,但这不符合我的用例 我的帖子的问题是,是否有可能实现上述场景以及如何实现 提前感谢。根

在“气流”中,我们创建了几个DAG。其中一些共享公共属性,例如从中读取文件的目录。目前,这些房地产在每个单独的DAG中都列为一个房地产,这在将来显然会成为问题。如果目录名要更改,我们必须进入每个DAG并更新这段代码(甚至可能缺少一段)

我正在研究创建某种配置文件,当需要某个属性时,可以将其解析为气流,并由各种DAG使用,但我似乎找不到任何关于如何执行此操作的文档或指南。我能找到的最多的是关于设置连接ID的文档,但这不符合我的用例

我的帖子的问题是,是否有可能实现上述场景以及如何实现


提前感谢。

根据您的设置,有几种方法可以实现这一点:

  • 可以使用DagFactory类型的方法,其中有一个生成DAG的函数。你可以找到一个这样的例子

  • 您可以将JSON配置存储为,并通过该配置进行解析以生成DAG。您可以在Admin->Variables中存储类似的内容:


[{
“表”:“用户”,
“schema”:“app_one”,
“s3_桶”:“etl_桶”,
“s3密钥”:“应用程序用户”,
“红移连接id”:“postgres\u默认”},
{ 
“表”:“用户”,
“模式”:“应用程序二”,
“s3_桶”:“etl_桶”,
“s3_键”:“应用程序_两个用户”,
“红移连接id”:“postgres\u默认”}]

您的DAG可以生成为:

sync_config = json.loads(Variable.get("sync_config"))

with dag:
    start = DummyOperator(task_id='begin_dag')
    for table in sync_config:
        d1 = RedshiftToS3Transfer(
            task_id='{0}'.format(table['s3_key']),
            table=table['table'],
            schema=table['schema'],
            s3_bucket=table['s3_bucket'],
            s3_key=table['s3_key'],
            redshift_conn_id=table['redshift_conn_id']
        )
        start >> d1
类似地,您可以将该配置存储为本地文件,并像打开任何其他文件一样打开它。请记住,最好的答案取决于您的基础架构和用例