AWS Glue Job排除S3中1-Preparing-*目录及文件失败求助
问题分析与解决方案
排除规则失效的原因
- 正则表达式不被支持:AWS Glue的
exclusions参数仅支持glob模式,不支持正则表达式,你最初写的^1-Preparing-.*完全不会生效。 - 指定具体UUID的glob规则失效的可能原因:
- 路径匹配精度问题:如果实际目录UUID与规则中填写的不一致(比如UUID格式错误、字符拼写偏差),会导致匹配不到目标目录。
- glob模式覆盖范围有限:
1-Preparing-xxxx/**仅匹配该指定目录下的所有文件,无法批量排除多个不同UUID的1-Preparing-目录。 - Glue路径匹配逻辑限制:当
paths设为桶根s3://mybucket/时,exclusions的glob模式基于桶内对象的相对路径匹配,若S3对象键的实际存储格式(如是否包含末尾斜杠)与规则不匹配,也会导致失效。
简便解决方案
方案1:批量排除所有1-Preparing-开头的目录
使用glob模式批量匹配所有目标目录及其子文件,替换exclusions规则即可:
glueContext.create_dynamic_frame.from_options( ... connection_type="s3", format="csv", connection_options={ "paths": ["s3://mybucket/"], "recurse": True, "exclusions": ["1-Preparing-*/**"] }, ... )
1-Preparing-*/**的作用是:匹配所有以1-Preparing-开头的一级目录,并排除该目录下的所有层级文件。
方案2:直接指定目标路径(更高效)
既然只需要读取2-Ready-开头的目录,可直接跳过排除逻辑,将paths限定为目标目录:
glueContext.create_dynamic_frame.from_options( ... connection_type="s3", format="csv", connection_options={ "paths": ["s3://mybucket/2-Ready-*/"], "recurse": True }, ... )
这种方式无需排除操作,直接限定读取范围,性能更优,也避免了匹配规则出错的问题。
额外注意事项
- Glue的glob模式支持通配符:
*匹配任意不含路径分隔符/的字符,**匹配任意层级的目录和文件。 exclusions可以是字符串(多个模式用逗号分隔),也可以是字符串数组,两种格式均有效。
内容的提问来源于stack exchange,提问作者slashdot
相关产品推荐
相关产品推荐

