web-dev-qa-db-ja.com

ダグとタスクの気流構造/構成

私の質問:

18
nono

他の人と同様にフォルダ構造をベンチマークしたいと思います。多分それはあなたがAirflowを何に使っているかに依存するでしょうが、私は私のケースを共有します。私はデータパイプラインを行ってデータウェアハウスを構築しているので、高レベルでは基本的に2つのステップがあります。

  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

これは多かれ少なかれ私の基本的なフォルダー構造です。

10
fernandosjp

私はこのようなものを使用します。

  • プロジェクトは通常、完全に別のものまたは独自のものです。おそらく、DAGは特定のクライアントから受信したファイルを処理するためのものであり、他のすべてのものとはまったく無関係です(ほとんどの場合、個別のデータベーススキーマです)。
  • 共通フォルダーにオペレーター、フック、およびいくつかのヘルパースクリプト(特定のDAGのすべてのAirflowデータを削除するなど)があります。
  • 以前はAirflowフォルダー全体に1つの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
15
trench