如何使用AWS Glue Crawler为动态S3路径创建Athena表
AWS Glue Crawler 动态分区建表配置方案
前置准备
首先在AWS Glue控制台创建两个独立的数据库:
- 用于存储当前最新数据表的库:
current_input_db - 用于存储归档数据表的库:
archived_input_db
1. 当前最新数据Crawler配置(对应latest路径)
- 数据源路径:填写
s3://test_bucket/,不要直接指定到latest层级,确保Crawler可以捕获上层的val1、val2动态值 - 排除规则:添加
**/archived/**,避免扫描到归档路径的内容 - 分区设置:开启自动分区推断功能,Crawler会自动识别路径中的
{val1}、{val2}层级,生成分区字段 - 输出配置:目标数据库选择
current_input_db,勾选每个独立路径生成一张表(适配每个文件夹下CSV schema不同的需求) - 可选配置:如果CSV有自定义分隔符、表头行规则,可以新增CSV分类器,指定分隔符类型、是否读取第一行作为表头
- 运行后生成的所有表都会默认携带
val1、val2两个分区字段,Athena查询时会自动下推分区过滤条件,降低扫描成本
2. 归档数据Crawler配置(对应archived路径)
- 数据源路径:填写
s3://test_bucket/,不要直接指定到timestamp层级,确保Crawler可以捕获上层的val1、val2以及val3动态值 - 包含规则:添加
**/archived/**,仅扫描归档路径下的内容 - 分区设置:开启自动分区推断功能,路径中的
timestamp={val3}符合Hive分区命名规范,Crawler会自动识别val1、val2、val3三个分区字段
注意:路径中
timestamp={val3}的命名格式默认生成的分区字段名为timestamp,如果需要修改为val3,可在表生成后通过Glue控制台编辑表结构或者执行Athena ALTER语句修改字段名即可
- 输出配置:目标数据库选择
archived_input_db,同样勾选每个独立路径生成一张表 - 可选优化:开启Crawler增量扫描,仅扫描新增的timestamp分区,减少每次扫描的资源消耗
验证&注意事项
- 首次运行Crawler后,进入Athena控制台分别查询两个库下的表结构,确认分区字段符合预期
- 如果路径中的
val1、val2存在特殊字符,建议提前统一命名规范,避免Crawler生成非预期的字段名 - 若后续CSV schema更新,重新运行Crawler即可自动同步表结构,不会丢失已生成的历史分区数据
内容的提问来源于stack exchange,提问作者Shubhanshu Singh
相关产品推荐
相关产品推荐

