我有一堆文件存储在S3上,每行一个MD5值,这些文件都和IT技术有关。我创建了一个AWS Athena表格,以便对这些MD5值进行去重查询。总共有数亿个MD5值在这些文件和表格中。
Athena表格创建查询语句:
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;
所有从 Athena 输出的 .csv 结果仍然具有重复的 MD5。这是怎么回事?
Athena 是否在进行部分去重?更奇怪的是,如果我在 Athena 中执行
COUNT(DISTINCT md5)
,我得到的计数与导出的行数不同。
- Athena 中的
COUNT(DISTINCT md5)
:97,533,226 - 导出的不同 MD5 记录数量:97,581,616
- 结果导出中有 14,790 个重复项,因此 COUNT(DISTINCT) 计数和结果导出都有问题。
Athena 是否在导出时创建重复项?情节渐浓。如果我查询 Athena 表格中在 Athena 结果导出中重复的 MD5 之一,我只会从表格中得到一个结果/行。我使用了
LIKE
查询进行了测试,以确保空格不会引起问题。这意味着 Athena 正在向导出中添加重复项。结果中从未有超过两个相同的 MD5。select
md5,
to_utf8(md5)
from md5s
where md5 like '%0061c3d72c2957f454eef9d4b05775d7%';
Athena的计数和结果文件都有问题吗? - 我使用MySQL对这些记录进行了去重,最终得到了97,531,010个唯一的MD5。下面是Athena的计数和结果细节。
Athena中COUNT(DISTINCT md5)
:97,533,226- 导出的不同MD5记录数量为:97,581,616
- 结果导出中有14,790个重复项,因此看起来 COUNT(DISTINCT)计数和结果导出都有问题。
我认为这是Athena的一个错误 - 我已向AWS的开发团队提交了工单以解决此问题,并将在修复后更新此帖子。
以下是相关的AWS论坛帖子,在那里其他用户也遇到了相同的问题。 https://forums.aws.amazon.com/thread.jspa?messageID=764702