我一直在使用AWS Athena在多个表中查询存储在S3上的分析数据 . 在一段时间内,我提出了2-3个复杂的SQL查询(涉及多个连接)来提取相关数据 . 因为,Athena用于临时查询(而不是预定义的查询),除了处理几TB和30分钟超时的高昂成本外,我正在寻找替代方案 .
我能想到的两个选择是:
-
使用基于Presto的EMR集群并运行现有查询 . 它消除了30分钟的限制,并且(可能)降低了成本(5美元/ TB) . 但是,缺点是在连续运行时重新处理相同的数据 .
-
执行ETL(例如通过AWS Glue)和非规范化数据 . 这应该减少重复的连接,因为只处理增量数据 . 随后使用一些SQL接口查询扁平化数据 - Athena / Hive . 但是,除了存储冗余(巨大)数据的成本之外,我不确定非规范化是否是一个好主意 .
哪一个是更好的选择还是有更好的标准技术来解决这个问题?
2 回答
数据的非规范化取决于您的用例,但最常用于s3 / hdfs结构 . 您可以点击此链接以获得更好的雅典娜存储和性能:
https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/
我认为最好做2(非规范化)然后1(在优化的数据布局上运行Presto) . 此外,Presto与基于成本的优化器可能值得一看:https://www.starburstdata.com/technical-blog/starburst-presto-on-aws-18x-faster-than-emr/