如何在Airflow中使用配置文件

时间:2018-08-24 13:57:26

标签: configuration airflow

在Airflow中,我们创建了多个DAGS。其中一些共享通用属性,例如从中读取文件的目录。当前,这些属性在每个单独的DAG中被列为属性,这在将来显然会成为问题。假设目录名称要更改,我们必须进入每个DAG并更新这段代码(甚至可能丢失其中的一段代码)。

我一直在寻找创建某种配置文件,可以将其解析为Airflow并在需要特定属性时供各种DAGS使用,但是我似乎找不到任何类型的文档或操作指南这个。我最多能找到的是建立连接ID的文档,但这不符合我的用例。

我的帖子的问题是,是否可以做上述情况?如何做?

谢谢。

1 个答案:

答案 0 :(得分:2)

有几种方法可以根据您的设置来完成此操作:

  • 您可以在具有函数生成DAG的情况下使用DagFactory类型的方法。您可以找到一个类似here

  • 的示例
  • 您可以将JSON配置存储为Airflow Variable,并对其进行解析以生成DAG。您可以在Admin->变量中存储以下内容:

[{ "table": "users", "schema":"app_one", "s3_bucket":"etl_bucket", "s3_key":"app_one_users", "redshift_conn_id":"postgres_default" }, { "table": "users", "schema":"app_two", "s3_bucket":"etl_bucket", "s3_key":"app_two_users", "redshift_conn_id":"postgres_default"}]

您的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

类似地,您可以将该配置存储为本地文件,然后像打开其他任何文件一样打开它。请记住,对此的最佳答案将取决于您的基础结构和用例。