如何在AWS中基于两个Glue表创建合并Athena表且不重复存储S3数据
问题解答
单条查询加载数据的实现
完全可以通过单条查询完成全量分区加载,对应两种适用场景:
- 如果你的S3分区路径符合Hive风格命名规则(格式为
{分区键}={分区值},例如按日期分区的路径为s3://bucket_name/my_tables/dt=2024-01-01/),直接执行以下命令即可自动扫描全路径下所有分区并批量加载:
MSCK REPAIR TABLE MyTables;
- 如果你的S3路径不符合Hive命名规范,可以使用单条
ALTER TABLE批量添加多个分区,无需逐个执行语句:
ALTER TABLE MyTables ADD PARTITION (dt='2024-01-01') LOCATION 's3://bucket_name/my_tables/2024-01-01/' PARTITION (dt='2024-01-02') LOCATION 's3://bucket_name/my_tables/2024-01-02/' PARTITION (dt='2024-01-03') LOCATION 's3://bucket_name/my_tables/2024-01-03/';
补充说明:你当前的Table1、Table2结构不同的场景完全可以实现无重复存储的合并查询,只要建MyTables表时包含两个表的全部字段,Athena读取Parquet文件时会自动为缺失字段补NULL值,无需做数据转存。
新增分区是否需要手动操作
不需要每次手动逐个添加分区,有两种自动/半自动方案可选:
- 如果路径符合Hive分区命名规则:可以配置Glue Crawler定期扫描你的S3根路径
s3://bucket_name/my_tables/,自动识别新增分区并更新到Glue元数据中,全程无需人工干预;也可以在新增分区后手动执行一次上文提到的MSCK REPAIR TABLE MyTables;命令即可完成新分区加载,仅需执行单条语句。 - 如果路径不符合Hive命名规范:可以提前批量创建未来一段时间的分区,或者每次新增分区后使用上文的批量
ADD PARTITION语法完成加载,不需要逐行写ALTER语句。
内容的提问来源于stack exchange,提问作者Varun Singh
相关产品推荐
相关产品推荐

