当前位置: 首页 > 知识库问答 >
问题:

AWS Athena(Presto)DISTINCT SQL查询中的结果是否重复?

长孙景天
2023-03-14

我在S3上有一堆只包含MD5的文件,每行一个。我创建了一个AWS Athena表来运行针对MD5的重复删除查询。这些文件和表中总共有数以亿计的MD5。

雅典娜表创建查询:

CREATE EXTERNAL TABLE IF NOT EXISTS database.md5s (
  `md5` string 
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = ',',
  'field.delim' = ','
) LOCATION 's3://bucket/folder/';
SELECT DISTINCT md5
FROM md5s;`

SELECT md5
FROM md5s
GROUP BY md5;

SELECT md5
FROM md5s
GROUP BY DISTINCT md5;

SELECT DISTINCT md5
FROM md5s
GROUP BY DISTINCT md5;
  • 计数(DISTINCT md5)(雅典娜):97,533,226
  • 导出不同MD5的记录:97,581,616
  • 结果导出中有14,790个重复项,因此计数(DISTINCT)计数都是错误的,结果导出也是错误的。

雅典娜是否在导出时创建了副本?--情节变得更加浓重。如果我查询我的Athena表,查找在Athena结果导出中重复的MD5之一,我只从表中得到一个结果/行。我使用like查询对此进行了测试,以确保空格不会导致该问题。这意味着雅典娜正在向导出添加副本。结果中相同的MD5从不超过两个。

select
  md5,
  to_utf8(md5)
from md5s
where md5 like '%0061c3d72c2957f454eef9d4b05775d7%';

雅典娜的计数和结果文件都错了吗?-我使用MySQL删除了这些相同的记录,最终得到了97,531,010个唯一的MD5。雅典娜的计数和结果详情如下。

    null

我认为这是一个雅典娜的错误--我已经向AWS的开发团队申请了一张罚单来修复这个问题,并且会在它出现的时候更新这个帖子。

这里是AWS论坛的相关帖子,其他用户看到了同样的问题。https://forums.aws.amazon.com/thread.jspa?messageid=764702

共有1个答案

杨豪
2023-03-14

我已经与AWS团队确认,这是一个已知的错误与AWS雅典娜时的问题被问到。我不确定这件事是否已经解决了。

 类似资料:
  • 查询结果的重打分 有些应用场景中,对查询语句的结果文档进行重新打分是很有必要的。重新打分的原因可能会各不相同。其中的一个原因可能是出于性能的考虑,比如,对整个有序的结果集进行重排序开销会很大,通常就会只对结果集的子集进行处理。可以想象重打分在业务中应用会相当广泛。接下来了解一下这项功能,学习如何将它应用在业务中。 理解重打分 在ElasticSearch中,重打分是一个对限定数目的查询结果进行再次

  • 问题内容: 谁能指出如何检查选择查询是否返回非空结果集? 例如,我有下一个查询: 我应该像下一个那样做吗: 测试结果集是否不为空? 问题答案: 使用@@ ROWCOUNT: 根据SQL Server联机丛书: 返回受最后一条语句影响的行数。如果行数超过20亿,请使用ROWCOUNT_BIG。

  • 我正在将我的PHP代码从mysql更新到mysqli,但我似乎找不到这个问题的答案:mysqli更新查询是否返回结果? 使用mysql,我可以 即使该查询不返回任何行,也将为true。 现在,在mysqli代码中,我有如下内容(为了清晰起见,删除了错误处理): 结果是错误的。 对于记录来说,查询是有效的(忽略我可能在将其转录到stackoverflow中时犯的任何错别字),字段1在数据库中按预期正

  • 我的MongoDB集合中有一个深度嵌套的集合。 当我运行以下查询时: 我在这里得到了这个嵌套结果: 现在,这就是我想要的: 或者这个: 或者其他类似的东西…这可能吗?

  • 要运行查询,在工具栏中点击 运行 。如果查询语句是正确的,该查询将被运行,如果该查询应该返回数据,结果 选项卡会打开查询返回的数据。如果运行查询时发生错误,运行停止,显示相应的错误信息。 结果 选项卡以网格显示查询返回的结果数据。数据可以用两种模式显示:网格查看 和 表单查看。详细信息请看表查看 器。 提示:Navicat 支持返回 10 个结果集。 注意:你可以通过选择 查看 -> 显示结果 -

  • 你可以在任何的服务器运行查询。在工具栏的下拉式列表中选择目标服务器和数据库。然后点击 “运行”。如果该查询语句是正确的,它将被运行。如果该查询应该返回数据,“结果”选项卡会打开并显示返回的数据。如果运行查询时发生错误,运行会停止并显示相应的错误信息。 “结果”选项卡以网格显示查询返回的结果数据。数据可以用三种模式显示:网格视图、树视图和 JSON 视图。详细信息请参阅数据查看器。 【注意】Navi