如何在project目录用单个.airflowignore忽略所有dag下的deprecated文件夹?
问题描述
我的目录结构如下:
. ├── project │ ├── dag_1 │ │ ├── dag │ │ │ ├── current │ │ │ │ └── dag_1_v2.py │ │ │ └── deprecated │ │ │ └── dag_1_v1.py │ │ └── sparkjobs │ │ ├── current │ │ └── deprecated │ └── dag_2 │ ├── dag │ │ ├── current │ │ │ └── dag_2_v2.py │ │ └── deprecated │ │ └── dag_2_v1.py │ └── sparkjobs │ ├── current │ └── deprecated
我想忽略所有deprecated文件夹,尝试过在每个dag_1/dag_2目录下放.airflowignore,内容写*/deprecated,能成功忽略对应目录下的deprecated DAG,但需要每个目录都放文件,太麻烦。
后来尝试在project目录下只放一个.airflowignore,内容写**/**/deprecated,但Airflow还是会识别到deprecated里的DAG。
请问怎么在project层级只用一个.airflowignore文件,忽略每个dag_n/dag文件夹下的所有deprecated文件夹?这是否可行?
解决方案
当然可行,你只需要在project目录下的.airflowignore里写对规则就行,推荐两种写法:
写法一:精准匹配目标路径
适合固定以dag_开头的DAG目录场景:
dag_*/dag/deprecated/
写法二:兼容灵活扩展
如果以后可能新增非dag_开头的DAG目录,用这个更稳妥:
*/dag/deprecated/ **/dag/deprecated/
要是你还想顺便忽略sparkjobs下的deprecated文件夹,把规则补全即可:
*/dag/deprecated/ */sparkjobs/deprecated/ **/dag/deprecated/ **/sparkjobs/deprecated/
为啥之前的**/**/deprecated没效果?
Airflow的.airflowignore是从你放置文件的目录(也就是project)开始计算相对路径的。你的目标路径是dag_1/dag/deprecated(三级路径),而**/**/deprecated的匹配逻辑是“任意两级目录之后的deprecated”,对应到project下就是a/b/deprecated,自然匹配不上三级路径的a/b/c/deprecated。
内容的提问来源于stack exchange,提问作者OdiumPura
相关产品推荐
相关产品推荐

