gpt4 book ai didi

amazon-web-services - AWS Athena + S3 限制

转载 作者:行者123 更新时间:2023-12-03 15:49:43 25 4
gpt4 key购买 nike

我目前正在将 AWS S3 + Athena 用于一个项目。
但是,在使用了 1-2 个月后,我发现它有一些局限性。
我不确定我是不知道如何使用它还是它真的是一个限制。
但是请不要问我为什么在足够的研究之前选择使用它。我认为有2点:

  • 项目要求
  • Athena S3 和 AWS 的资源不是很集中,其功能也在不断变化。在实际使用一段时间之前,我很难找到 Athena + S3 可以做什么或不能做什么。

  • 太过分了,现在回到正题。 >_<

    目前,我面临一个问题。随着数据量的增加,数据扫描量和查询量急剧增加(有时甚至会出现异常,例如 打开文件太多查询时)。但是,AWS S3 + Athena 似乎只有分区但没有索引。因此,问题来了。

    问题一:
    我可以在 AWS S3 + Athena 上做一些类似于索引的事情吗?

    问题2:
    如果我使用分区,似乎只能指定一个组合键(S3文件夹中的一列或多列作为标签);否则,数据大小将翻倍。这是真的?

    问题三:
    即使我愿意增加数据大小,也不可能有2个复合键的表。为了实现这一点,我必须有 2 个 Athena 表和 2 个相同的数据集,但在 S3 中有两种类型的分区。这是真的?

    问题 4:
    对于错误 “打开的文件太多” ,经过一些研究,它似乎是一个操作系统级别的问题,具有预定义的有限数量的文件描述符。我现在的情况是SQL大部分时间没有异常,但在某些时候,它很容易出现异常。我的理解是,亚马逊会有一组计算机(例如,32 个节点服务器)来服务一定数量的客户,包括我的公司和其他公司。每个服务器都有有限数量的可用文件描述符,并在所有客户之间共享。然后,在某些高峰期(其他公司正在执行大量查询),文件描述符的可用数量会下降,这也解释了为什么我的具有相同数据集的 SQL 有时会出现异常但并非总是如此。这是真的?

    问题5:
    由于缺乏索引功能,S3 + Athena 不应该执行复杂的 SQL 查询。这意味着,复杂的连接逻辑只能在加载到 S3 之前在转换层的某处完成。这是真的?

    问题 6:
    这个问题在上一个问题 5 之后。
    让我用一个简单的例子来说明:
    开发了一个报告系统来显示订单和交易。关系是订单执行后,会产生一笔交易。Order_ID 是链接一笔交易及其相关订单事件的关键。分区设置为日期。
    现在,以下数据来了:
    enter image description here
    要求是:
    1.第一天的报告,只有订单记录 O001-下订单 显示
    2.第2天的报告,只有订单记录 O002-订单变更单显示
    3.第3天的报告,显示所有记录,包括4个订单记录和1个交易记录
    4.第4天的报告,只有订单记录 O004-备注变更显示
    对于第 1、2 和 4 天,这很容易,因为我只显示同一天的数据。
    但是,对于第 3 天,我需要显示所有数据,有些是过去的,有些是将来的(O001-备注更改)。
    为了避免复杂的SQL,我只能在Transformation层做join逻辑。
    但是,在第3天进行改造时,如果第1天和第2天的数据方不给我发送数据,则只能找到历史文件,这并不好,因为您永远不知道需要回查多少天。
    即使我们在 Athena 进行搜索,由于 Order_ID 不在分区中,因此需要进行全表扫描。
    以上还不是最坏的,最坏的情况是在第3天的改造中, O001-备注变更第 4 天是 future 数据,不应在第 3 天知道。
    有没有更好的方法来做到这一点?或者 AWS S3 + Athena 不适合这种复杂的情况(以上情况只是我目前情况的简化版本)?

    我知道我的问题太多太多了。但所有这些都是我真正想澄清的,我找不到明确的答案。任何帮助都受到高度赞赏,非常感谢。

    最佳答案

    索引

    不,Amazon Athena(以及它所基于的 Presto)不支持索引。这是因为 Athena/Presto(甚至 Redshift)是为大数据设计的,所以即使是大数据上的索引也是大数据,因此维护一个巨大的索引效率不高。

    虽然传统数据库使用索引变得更快,但这不适用于大数据系统。相反,使用索引、压缩和列数据格式来提高性能。

    分区

    分区是分层的(例如 Year -> Month -> Day )。分区的目标是“跳过”不需要读取的文件。因此,它们只会在 WHERE 时提供好处。子句使用分区层次结构。

    例如,使用 SELECT ... WHERE year=2018将使用分区并跳过所有其他年份。

    如果您的查询未将这些分区字段之一放入 WHERE子句,则需要扫描所有目录和文件,因此没有任何好处。

    你说“数据大小会翻倍”,但事实并非如此。所有数据只存储一次。分区不会修改数据大小。

    打开的文件太多

    如果这是 Amazon Athena 生成的错误,则您应该向 AWS Support 提出该错误。

    复杂查询

    Athena 当然可以进行复杂的查询,但它不是理想的平台。如果您经常进行复杂的 SQL 查询,请考虑使用 Amazon Redshift。

    问题 6:表/查询

    我无法按照您的要求进行流程。如果您正在寻求 SQL 帮助,请创建一个单独的问题,显示表中的数据示例和您正在寻求的输出示例。

    关于amazon-web-services - AWS Athena + S3 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51016060/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com