Athena查询CloudTrail日志新增数据是否需更新分区及配置方案
AWS CloudTrail日志 Athena分区配置问题解答
问题1:表的LOCATION参数是否应该设置为s3://<s3 bucket name>/AWSLogs/<account id>/CloudTrail/?
是,该路径是当前CloudTrail日志存储的根目录,与后续要设置的分区层级完全对齐,设置为这个路径后,Athena只会扫描该路径下的相关日志文件,不会读取路径外的无关内容,避免额外的扫描开销。
问题2:分区是否应该设置为region、year、month、day四个字段?
完全建议这么设置。四个分区字段和你现有S3的目录层级一一对应,不需要调整现有存储结构即可实现分区裁剪。查询时如果带上这几个字段的过滤条件,Athena会直接跳过不匹配的目录,查询性能会有非常明显的提升,也能减少扫描的数据量、降低Athena的查询成本。
问题3:仅新增对应年/月/日的目录时,是否需要更新分区?
必须更新分区。Athena的表元数据存储在AWS Glue数据目录中,你新增的年/月/日目录如果没有注册为Glue表的分区,Athena查询时根本感知不到这些新目录下的日志文件,不是一次定义分区就可以永久生效的,每新增一组分区对应的目录,都需要将分区信息注册到元数据中才可以被查询到。
问题4:新增分区的最优实现方式是什么?
两种方案各有适用场景,可根据自身需求选择:
- 无代码、低运维需求场景选Glue Crawler:只需配置好Crawler的爬取目标路径、调度频率(根据对数据新鲜度的要求设置,比如每天/每小时运行一次),Crawler会自动识别新增的目录并注册为对应分区,不需要编写和维护代码,运维成本极低,适合大多数常规分析场景。
- 对数据新鲜度要求高的场景选S3事件触发Lambda:配置S3对应前缀的创建事件触发Lambda函数,Lambda解析新增文件的S3路径,提取出region、year、month、day四个分区值后,调用Athena API执行
ALTER TABLE ADD PARTITION命令完成分区注册。该方案延迟远低于定时调度的Crawler,可实现分钟级的数据可见性,适合近实时分析场景,但需要自行编写Lambda代码、处理重复触发、权限配置等问题。
注意:原生CloudTrail的存储路径不是Hive风格的带键值对的路径格式,所以无法使用MSCK REPAIR TABLE命令自动加载分区,只能选择上述两种方案。
内容的提问来源于stack exchange,提问作者Alex Fomin
相关产品推荐
相关产品推荐

