基于现有Amazon S3目录结构配置单爬虫,实现分区识别与多表创建
问题:Amazon Glue爬虫无法识别嵌套分区,需保留现有目录结构实现表名+分区字段
我通过Python脚本手动创建了Amazon S3目录,结构如下:
s3://my_bucket/landing_zone/year=2024/month=10/day=01/sales/file.csv s3://my_bucket/landing_zone/year=2024/month=10/day=01/account/file.csv
每个日期目录下包含约10张表(示例为sales、account)。我配置了路径为s3://my_bucket/landing_zone/的单个爬虫,但仅生成了sales、account表,未识别year、month、day分区。期望以目录最后一级作为表名,键值对(year、month、day)作为分区字段,且无法修改现有目录结构,请问该需求是否可行及实现方法?若不可行,请给出推荐的目录结构。
可行性分析与实现方法
该需求可行,通过调整Glue爬虫配置和自定义分类器即可实现:
1. 配置自定义分类器并调整优先级
- 创建自定义CSV分类器:根据你的
file.csv实际格式,指定分隔符、是否包含表头。这一步是为了让爬虫优先使用自定义规则识别文件结构,避免内置分类器干扰分区识别。 - 在爬虫配置的分类器选项中,将自定义分类器移至优先级最高的位置(内置分类器默认优先,需调整顺序)。
2. 调整爬虫的分区识别规则
- 确保爬虫开启递归爬取(默认已开启,可在“爬取选项”中确认)。
- 在爬虫的高级设置中,配置分区路径:选择“根据键值对(key=value)识别分区”,并添加分区路径匹配模式为
landing_zone/year=*/month=*/day=*。此设置会告诉爬虫将路径中这三级的key=value对识别为分区字段,而最后一级目录(如sales、account)作为表名。
3. 验证与调试
- 重新运行爬虫后,检查Glue数据目录中的表结构,确认
sales和account表是否包含year、month、day三个分区字段。 - 若仍未识别分区,可尝试在爬虫的排除模式中添加无关路径(如果有的话),减少爬取干扰,但一般无需此操作。
若配置无效的推荐目录结构
如果因Glue爬虫的默认逻辑限制导致无法识别(例如它默认将最后一级key=value视为分区),推荐调整为AWS标准数据湖目录结构,将表名放在分区路径之前:
s3://my_bucket/landing_zone/sales/year=2024/month=10/day=01/file.csv s3://my_bucket/landing_zone/account/year=2024/month=10/day=01/file.csv
这种结构无需额外配置,Glue爬虫会自动识别sales、account为表名,year、month、day为分区字段,是最稳定的实现方式。
内容的提问来源于stack exchange,提问作者Abhi5421
相关产品推荐
相关产品推荐

