如何让AWS Glue Crawler为S3中的每个客户文件夹创建独立表?
没问题,我帮你梳理下用AWS Glue Crawler给每个客户文件夹生成独立表的具体方案,两种方式任你选:
先明确你的S3目录结构(方便对照配置):
├── bucket │ ├── customer_1 │ │ ├── year=2016 │ │ ├── year=2017 │ │ │ ├── month=11 │ │ │ │ ├── sometype-2017-11-01.parquet │ │ │ │ ├── sometype-2017-11-02.parquet │ │ │ │ ├── ... │ │ │ ├── month=12 │ │ │ │ ├── sometype-2017-12-01.parquet │ │ │ │ ├── sometype-2017-12-02.parquet │ │ │ │ ├── ... │ │ ├── year=2018 │ │ │ ├── month=01 │ │ │ │ ├── sometype-2018-01-01.parquet │ │ │ │ ├── sometype-2018-01-02.parquet │ │ │ │ ├── ... │ ├── customer_2 │ │ ├── year=2017 │ │ │ ├── month=...
方案一:创建独立爬虫(适合客户数量少的场景)
这是最直观的方式,每个客户对应一个Glue Crawler:
- 打开AWS Glue控制台,新建爬虫,数据源选择S3,路径指定为单个客户的根目录,比如
s3://bucket/customer_1/ - 在爬虫配置的输出环节,给这个爬虫生成的表指定清晰的名称(比如
customer_1_transactions),避免和其他客户的表混淆 - 重复上述步骤,给
customer_2及其他客户创建各自的爬虫 - 运行所有爬虫后,你会在Glue Data Catalog里看到每个客户对应的独立表,每个表会自动识别
year和month作为分区列
方案二:单爬虫批量生成表(适合客户数量多的场景)
如果客户很多,不想一个个建爬虫,就用这个批量方案:
- 新建一个Glue Crawler,数据源路径设为S3桶的根目录
s3://bucket/ - 关键配置来了:在爬虫的配置页,找到「S3路径的分组行为」,选择为每个S3路径创建一个单独的表(这个选项会让爬虫把每个
customer_x文件夹当作独立的表) - 还可以在「表名生成」里设置规则,比如直接用目录名作为表名(这样生成的表就是
customer_1、customer_2),或者加统一前缀 - 运行爬虫后,Glue会自动为每个客户文件夹生成独立的表,并且自动识别每个表内部的
year/month分区
额外注意事项
- 确保Glue Crawler的IAM角色拥有访问对应S3路径和Glue资源的权限(比如
s3:GetObject、glue:*相关权限) - 如果后续新增了客户文件夹,方案一需要新建对应爬虫,方案二只要重新运行一次根目录的爬虫即可
- 因为你的数据是Parquet格式,Glue Crawler会自动识别文件内的字段Schema,只要同一客户下的Parquet结构一致,生成的表结构就没问题
内容的提问来源于stack exchange,提问作者scarecrow
相关产品推荐
相关产品推荐

