Dags和任务的气流结构/组织

时间:2017-06-07 23:47:33

标签: airflow apache-airflow

我的问题:

2 个答案:

答案 0 :(得分:4)

我很乐意将文件夹结构与其他人进行对比。也许这将取决于你使用Airflow的内容,但我将分享我的案例。我正在做数据管道来构建数据仓库,所以在高级别我基本上有两个步骤:

  1. 将大量数据转储到数据湖中(只能由少数人直接访问)
  2. 将数据从数据湖加载到分析数据库中,数据将被建模并暴露给仪表板应用程序(许多SQL查询以对数据建模)
  3. 今天我将文件整理成三个主要文件夹,试图反映上面的逻辑:

    ├── dags
    │   ├── dag_1.py
    │   └── dag_2.py
    ├── data-lake
    │   ├── data-source-1
    │   └── data-source-2
    └── dw
        ├── cubes
        │   ├── cube_1.sql
        │   └── cube_2.sql
        ├── dims
        │   ├── dim_1.sql
        │   └── dim_2.sql
        └── facts
            ├── fact_1.sql
            └── fact_2.sql
    

    这或多或少是我的基本文件夹结构。

答案 1 :(得分:4)

我用这样的东西。

  • 项目通常是完全独立或独特的东西。也许DAG可以处理我们从某个客户端接收到的文件,而这些文件将与其他所有东西完全无关(几乎可以肯定是一个单独的数据库模式)
  • 我的操作员,挂钩和一些帮助程序脚本(删除某个DAG的所有Airflow数据,等等)位于一个公用文件夹中
  • 我以前为整个Airflow文件夹提供了一个git仓库,但是现在每个项目都有一个单独的git(由于项目之间的关系不多,因此它更有条理,并且更容易授予Gitlab权限)。这意味着每个项目文件夹也分别为.git和.gitignore等
  • 我倾向于保存原始数据,然后“保留”数据的修改后的副本,该副本恰好是复制到数据库中的副本。由于来自不同客户端的格式不同(Excel,Web抓取,HTML电子邮件抓取,平面文件,来自SalesForce或其他数据库来源的查询...),我不得不对某些原始数据进行大量修改。

示例树:

├───dags
│   ├───common
│   │   ├───hooks
│   │   │       pysftp_hook.py
│   │   │
│   │   ├───operators
│   │   │       docker_sftp.py
│   │   │       postgres_templated_operator.py
│   │   │
│   │   └───scripts
│   │           delete.py
│   │
│   ├───project_1
│   │   │   dag_1.py
│   │   │   dag_2.py
│   │   │
│   │   └───sql
│   │           dim.sql
│   │           fact.sql
│   │           select.sql
│   │           update.sql
│   │           view.sql
│   │
│   └───project_2
│       │   dag_1.py
│       │   dag_2.py
│       │
│       └───sql
│               dim.sql
│               fact.sql
│               select.sql
│               update.sql
│               view.sql
│
└───data
    ├───project_1
    │   ├───modified
    │   │       file_20180101.csv
    │   │       file_20180102.csv
    │   │
    │   └───raw
    │           file_20180101.csv
    │           file_20180102.csv
    │
    └───project_2
        ├───modified
        │       file_20180101.csv
        │       file_20180102.csv
        │
        └───raw
                file_20180101.csv
                file_20180102.csv
相关问题