Airflow DAG和任务的结构/组织
我的问题是:Airflow DAG和任务的结构/组织,airflow,apache-airflow,Airflow,Apache Airflow,我的问题是: 为了组织DAG和任务,什么是好的目录结构?(dags示例仅显示两个任务) 我现在把我的DAG放在DAG文件夹的根目录下,把我的任务放在不同的目录下,不知道该怎么做 我们应该使用zip文件吗 我也想与其他人一起测试文件夹结构。也许这将取决于你使用气流来做什么,但我将分享我的案例。我正在使用数据管道来构建数据仓库,因此在高层,我基本上有两个步骤: 将大量数据转储到数据池中(只有少数人可以直接访问) 将数据从data lake加载到分析数据库中,在该数据库中,数据将被建模并公开给仪表板
- 为了组织DAG和任务,什么是好的目录结构?(dags示例仅显示两个任务)
- 我现在把我的DAG放在DAG文件夹的根目录下,把我的任务放在不同的目录下,不知道该怎么做
- 我们应该使用zip文件吗李>
├── 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
这或多或少是我的基本文件夹结构 我用这样的东西
- 项目通常是完全独立或独特的。也许DAG可以处理我们从某个客户机接收到的文件,这些文件将与其他所有内容完全无关(几乎可以肯定是一个单独的数据库模式)
- 我的操作符、挂钩和一些助手脚本(删除某个DAG的所有气流数据等)位于一个公用文件夹中
- 我曾经为整个Airflow文件夹提供一个git存储库,但现在每个项目都有一个单独的git(这样可以更有序地授予Gitlab权限,因为项目之间非常不相关)。这意味着每个项目文件夹也可以作为.git和.gitignore等
- 我倾向于保存原始数据,然后“保留”数据的修改副本,这正是复制到数据库中的数据。由于来自不同客户机的不同格式(Excel、网页抓取、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
只是重申这只是我的组织方式。如果有人来问这个问题,最好用其他方法来构造文件夹和文件的基准测试我发现这个目录结构非常有用;只有一个疑问:
scheduler
的性能会因为将所有内容都放在dag
目录下而受到影响吗?虽然即使我将包含运算符
s(或除实际DAG
s以外的任何内容)的文件放在DAG
目录之外,并将它们导入DAG
文件,但这或多或少意味着相同的事情。但是dag
文件夹中的非python
文件(如上面的.sql
文件)可能(理论上)导致调度器不必要的开销
哦,我不确定。不过我还是得调查一下。老实说,我从来没有想过——我之所以这样设置,更多是因为版本控制(易于克隆或端到端共享特定的项目,而不会混淆项目)我曾经为整个文件夹设置了一个git存储库,但是现在我每个项目都有一个单独的git
那么如何将不同的回购协议粘在主回购协议中呢?(我当前的解决方案是使用git子模块)只是跟进这个线程。是否有人看到此存储库结构对调度程序有任何影响?