比较 AWS Athena 和 PrestoDB:分区限制
比较 AWS Athena 和 PrestoDB:分区限制
分区是提高性能的好方法,但 AWS Athena 分区限制可能会导致性能下降、查询失败以及浪费时间尝试诊断查询问题。 雅典娜 是一项 AWS 无服务器交互式服务,用于使用常规 SQL 查询 Amazon S3 上的 AWS 数据湖。这是一项低成本的服务;您只需为您运行的查询付费。 Athena 引擎 v2 基于旧版本的 Presto DB (v 0.217) 构建,开发人员使用 Athena 对数据湖和云中的数据源进行分析。可能导致性能不佳的一个常见限制是 Athena 的分区。
分区数据
分区将您的表拆分为多个部分,并根据列值将相关数据保存在一起。分区就像虚拟列,可以帮助系统在每次查询时扫描更少的数据。限制在分区列上的查询将运行得更快,因为系统可以在使用基于分区的过滤器时减少查询扫描的数据量。
Athena Hive 分区
AWS Athena 支持 Apache Hive 分区。您可以按一列或多列对数据进行分区。例如,您可以根据时间进行分区,这可能会导致多级分区方案。这意味着您可以按如下所示的键值组织数据:
…/ 月=01/日=01/年=2021/…
如果您的查询限制在年和/或月和/或日,这是完美的。
雅典娜有 MSCK 维修表 命令更新存储在目录中的分区元数据。但是,当有许多分区时,这是一个低效的命令。您拥有的分区越多,此命令的运行速度就越慢。此命令通过扫描指定表中的所有分区来收集元数据,并相应地更新 Hive 元存储中的元数据,以便系统知道任何新分区。但是,如果该命令有很多工作要做,则该命令可能会在 30 分钟后超时,这是 Athena 的默认查询时间限制。该命令应该运行完成,以便发现和编目所有分区,并且应该在每次添加新分区时运行它,例如,在每个 ETL/数据摄取周期之后。
AWS Glue 分区
AWS Glue 是一项提取-转换和加载 (ETL) 服务,它具有一个名为 AWS Glue 数据目录的中
AWS Athena 分区限制
如果您使用 Hive Metastore 作为 Athena 的目录,则每个表的最大分区数或 Athena 分区限制为 20,000。您可以向 AWS 请求增加配额。
如果您正在使用 AWS 胶水 (分区限制适用)对于 Athena,Glue 目录限制为每个表 1,000,000 个分区。
没有分区限制的 AWS Athena 替代方案
开源 PrestoDB
自行部署 PrestoDB 是避免 Athena 分区限制的一种方法。 PrestoDB 没有硬分区限制,这有助于提高您的性能,并且您可以自由部署最新版本的 Presto,从而受益于它的所有功能。
PrestoDB 有 Hive 系统。 同步分区元数据 更新 Metastore 中的分区的功能;它比 MSCK 维修表 AWS Athena 使用的命令。因为 AWS Athena 建立在旧版本的 PrestoDB 之上,所以它没有这个功能。
Ahana for Soon
像 Presto 这样的解决方案很复杂,并且作为新用户入门很麻烦。有一些解决方案可以简化 Presto 等工具。例如, 阿哈娜云 .这是云中 Presto 的托管服务。它允许您使用 PrestoDB 查询和分析 AWS S3 和其他数据源——但它更容易。
Images taken from Ahana.io, PrestoDB, and AWS
这里的要点是,如果您当前正在使用 Athena 并且正在处理分区限制,请知道您有其他选择。如果您正在探索选项,Presto 和 Ahana 之外还有其他的。找到你喜欢的东西,这也能让你完成你需要的东西。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明