语境:
我们想使用 Athena 来查询 S3 存储桶,该存储桶遵循 AWS 建议的最佳实践,即使用均匀分布的值作为对象名称的前缀:
s3://datasets-daily/<random-prefix>/format=parquet/dataset=navigation/year=2015/month=12/day=31/subregion=000/slice=01/part-00292-ddbc7e53-8256-46de-a1c3-55f65f808c96.c000.gz.parquet
该数据集为 40TB,包含 850k 个文件和 140k 个分区。我们的分区限制已增加到 250k。
问题:
可以msck repair table_name
在这种结构中自动分区数据,还是因为我们使用前缀,所以我们是否应该为每个键手动定义每个分区?
实验:
我们已经测试了创建表并应用msck
了以下结果:
LOCATION 's3://datasets-daily/
-->msck
超时;SELECT *
什么都不返回
LOCATION 's3://datasets-daily/*/
-->msck
快速完成;SELECT *
什么都不返回
在第一种情况下,查询在十小时后超时:
2017/05/22 20:57:36 UTC-5 MSCK REPAIR TABLE datasets_daily N/A FAILED 36003.56 0KB