Athena 在 S3 上查询数据的替代方案

2024-01-16

我身边有300 GBs的数据S3。假设数据如下:

## S3://Bucket/Country/Month/Day/1.csv 

S3://Countries/Germany/06/01/1.csv 
S3://Countries/Germany/06/01/2.csv 
S3://Countries/Germany/06/01/3.csv 

S3://Countries/Germany/06/02/1.csv 
S3://Countries/Germany/06/02/2.csv 

我们正在做一些复杂聚合就数据而言,由于有的国家数据大,有的国家数据小,AWS EMR用起来没有意义,小国家一旦完了,资源就被浪费了,大国还要长期运转。因此,我们决定使用AWS Batch(Docker 容器) with Athena。一项工作处理每个国家一天的数据。

现在大致有1000 个职位一起开始,当他们查询雅典娜读取数据时,容器失败,因为它们到达了Athena 查询限制.

因此,我想知道还有哪些其他可能的方法来解决这个问题?我应该使用红移星团,加载所有数据并将所有容器查询到 Redshift 集群,因为它们没有查询限制。但价格昂贵,而且需要很长时间才能完成。

另一种选择是读取数据EMR并使用Hive 或 Presto在它之上查询数据,但同样会达到查询限制。

如果有人能够提供更好的选择来解决这个问题,那就太好了。


据我了解,您只需将查询发送到 AWS Athena 服务,在所有聚合步骤完成后,您只需检索结果csv文件来自 Athena 保存结果的 S3 存储桶,因此您最终会得到 1000 个文件(每个作业一个)。但问题是并发 Athena 查询的数量,而不是总执行时间。

您是否考虑过使用阿帕奇气流 https://airflow.apache.org/用于编排和安排您的查询。我认为气流是 Lambda 和 Step Functions 组合的替代方案,但它是完全免费的。它很容易在本地和远程计算机上进行设置,具有用于任务监控的 CLI 和 GUI,抽象出所有调度和重试逻辑。气流甚至有hooks https://airflow.apache.org/_api/airflow/contrib/hooks/aws_hook/index.html与 AWS 服务交互。天啊,它甚至还有一个专职操作员 https://airflow.apache.org/_api/airflow/contrib/operators/aws_athena_operator/index.html用于向 Athena 发送查询,因此发送查询非常简单:

from airflow.models import DAG
from airflow.contrib.operators.aws_athena_operator import AWSAthenaOperator
from datetime import datetime

with DAG(dag_id='simple_athena_query',
         schedule_interval=None,
         start_date=datetime(2019, 5, 21)) as dag:

    run_query = AWSAthenaOperator(
        task_id='run_query',
        query='SELECT * FROM  UNNEST(SEQUENCE(0, 100))',
        output_location='s3://my-bucket/my-path/',
        database='my_database'
    )

我将它用于类似类型的每日/每周任务(使用 CTAS 语句处理数据),这些任务超出了并发查询数量的限制。

有大量博客文章和文档可以帮助您入门。例如:

  • 中柱 https://medium.com/slido-dev-blog/automate-executing-aws-athena-queries-and-moving-the-results-around-s3-with-airflow-dd3603dc611d:自动执行 AWS Athena 查询并使用 Airflow 在 S3 中移动结果。
  • Airflow 安装完整指南,link 1 https://medium.com/@srivathsankr7/apache-airflow-a-practical-guide-5164ff19d18b and link 2 http://site.clairvoyantsoft.com/installing-and-configuring-apache-airflow/

您甚至可以设置与 Slack 集成 https://medium.com/datareply/integrating-slack-alerts-in-airflow-c9dcd155105用于在查询以成功或失败状态终止时发送通知。

但是,那主要缺点 https://stackoverflow.com/questions/57145967/aws-athena-concurrency-limits-number-of-submitted-queries-vs-number-of-running我面临的是,只有 4-5 个查询同时实际执行,而其他所有查询都处于空闲状态。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Athena 在 S3 上查询数据的替代方案 的相关文章

  • 如何使用 Elements 将持卡人姓名添加到 Stripe 结帐?

    我需要在自定义表单中添加一个附加字段 我想添加信用卡的名称 我尝试了以下方式 var cardNameElement elements create cardName style style placeholder Custom card
  • AWS ElasticSearch Service - 从 CF 模板设置加密选项

    我正在创建一个云形成模板来在AWS中配置elasticsearch服务域 我想将加密下的此属性设置为 true 域的所有流量都需要 HTTPS 但我无法在 AWS 文档中找到执行此操作的方法 用于设置加密属性的其他选项 例如 启用静态数据加
  • 如何在不声明新数据的情况下更改类型(String,Int)元组的 Ord 实例?

    我正在尝试对类型列表进行排序 String Int 默认情况下 它按字符串排序 然后按整数排序 如果字符串相等 我希望它是相反的 首先比较整数 然后如果相等则比较字符串 另外 我不想切换到 Int String 我找到了一种通过定义实例来实
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框
  • 如何在 Jquery/Javascript 中绑定模糊和更改,但只触发一次函数?

    我试图在选择元素更改时触发函数 由于 Ipad 在 on change 方面遇到问题 我还想绑定到 blur 这在 Ipad 上工作得很好 但是我不希望两个事件都触发该函数两次 所以我需要某种挂钩来确保两个事件是否都触发change and
  • 使用 z = f(x, y) 形式的 B 样条方法来拟合 z = f(x)

    作为一个潜在的解决方案这个问题 https stackoverflow com questions 76476327 how to avoid creating many binary switching variables in gekk
  • Ruby 中的 url_encode

    I read 的文档url encode http rdoc info stdlib erb 1 9 3 ERB Util 3Aurl encode 是否有一个表可以准确地告诉我哪个字符被编码为什么 使用url encode ERB s u
  • jolt变换后json对象的排序

    Input The input json object 所需输出 Event1 Value1 Event2 collection of json objects Event3 The input json object 所以基本上输入 js
  • AWS DynamoDB 写后读一致性 - 理论上它是如何工作的?

    大多数nosql解决方案仅使用最终一致性 并且考虑到DynamoDB将数据复制到三个数据中心 如何保持写后读一致性 解决此类问题的通用方法是什么 我认为这很有趣 因为即使在 MySQL 复制中 数据也是异步复制的 我将详细告诉您 Dynam
  • 张量流中的复杂卷积

    我正在尝试运行一个简单的卷积 但包含复数 r np random random 1 10 10 10 i np random random 1 10 10 10 x tf complex r i conv layer tf layers c
  • Kivy - 单击按钮时编辑标签

    我希望 Button1 在单击时编辑标签 etykietka 但我不知道如何操作 你有什么想法吗 class Zastepstwa App def build self lista WebOps getList layout BoxLayo
  • CGImage/UIImage 在 UI 线程上延迟加载会导致卡顿

    我的程序显示一个水平滚动表面 从左到右平铺有 UIImageViews 代码在 UI 线程上运行 以确保新可见的 UIImageView 分配有新加载的 UIImage 加载发生在后台线程上 一切工作几乎都很好 除了每个图像变得可见时出现口
  • 使用 AppleScript 运行另一个应用程序而不将其显示在扩展坞上

    使用 AppleScript 您可以创建运行另一个应用程序的脚本 然后将该脚本本身另存为应用程序并将其放置在 Dock 中 问题 不是真正的问题 是 当您单击它时 它仍然会在扩展坞上显示其他应用程序 是否可以阻止其他应用程序在扩展坞中显示
  • 防止索引超出范围错误

    我想编写对某些条件的检查 而不必使用 try catch 并且我想避免出现 Index Out of Range 错误的可能性 if array Element 0 Object Length gt 0 array Element 1 Ob
  • 如何在 PHP 中从字符串类名实例化? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何创建返回方法名称的新实例 不幸的是我收到这个错误 错误 类名必须是有效的对象或字符串 这是我的代码 class Foo public f
  • 如何使用配置文件 (.ebextensions) 在 AWS Elastic Beanstalk 上安装 PHP IMAP 扩展?

    有谁知道如何使用配置文件 ebextensions 在 AWS Elastic Beanstalk 上安装和启用 PHP IMAP 扩展 我使用的是 64 位 Amazon Linux 2017 03 v2 4 0 运行 PHP 7 0 1
  • 使用随机放置的 NaN 创建示例 numpy 数组

    出于测试目的 我想创建一个M by Nnumpy 数组与c随机放置的 NaN import numpy as np M 10 N 5 c 15 A np random randn M N A mask np nan 我在创建时遇到问题mas
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两

随机推荐