PrestoDB/AWS Athena- 按块检索大型 SELECT



我必须选择超过19 亿行。我正在尝试在 AWS ATHENA 控制台中查询数据库中托管的表。该表正在从 S3 存储桶读取镶木地板文件。

当我运行此查询时:

SELECT * FROM ids WHERE org = 'abcd' AND idkey = 'email-md5';

我的查询似乎超时了,因为当我对其运行 COUNT 时会返回 19 亿行。

我尝试OFFSETLIMIT但它似乎在 AWS Athena 中不起作用。

还尝试了一些东西

SELECT * FROM ids WHERE org = 'abcd' AND idkey = 'email-md5' LIMIT 0,500;

这似乎也不起作用。

不确定如何使用 SELECT 对如此大的数据集进行分块?

此处的目的是能够在没有查询超时的情况下查询整个数据集。

我运行了一个计数——

SELECT COUNT(*) FROM ids WHERE org = 'abcd' AND idkey = 'email-md5';

如上所述,返回的计数是 19 亿。我需要拉取所有 19 亿行,以便我可以下载它并进行进一步分析。

看来您的情况是:

  • 每日 ETL 过程每天提供新的 Parquet 文件
  • 一个表有 19 亿行
  • 雅典娜中的查询超时

看来您的问题与雅典娜必须查询如此多的数据有关。提高雅典娜效率(和成本(的一些方法是:

  • 使用列格式的文件(您正在使用 Parquet,所以这很棒!
  • 压缩文件(从磁盘读取更少意味着查询速度更快,成本更低(
  • 对文件进行分区(这允许雅典娜完全跳过不相关的文件(

对于您的情况,最简单的方法可能是开始对数据进行分区,方法是根据通常包含在WHERE语句中的内容将每日文件放入单独的目录中。这通常是日期,很容易分区(例如每天或每月不同的目录(,但鉴于您对orgidkey的过滤,可能无关紧要。

另一种选择是将传入文件转换为包含相关数据的新表。例如,您可以创建一个包含行摘要的表,例如包含orgidkey和这些行count的表。因此,文件中的多行将减少为一行。这需要更好地了解文件的内容以及您打算如何查询,但它会优化这些查询。基本上,您将每天的新文件处理到计算表中,然后针对计算表而不是原始数据运行查询。(通常称为 ETL 过程。

最后一个建议是将数据导入 Amazon Redshift。它可以轻松处理数十亿行,并且可以以压缩、优化的方式存储数据。仅当对数据运行大量查询时,这才有用。如果您每天只运行几个查询,那么雅典娜将是更好的选择。

相关内容

  • 没有找到相关文章

最新更新