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

时间:2017-02-01 01:32:07

标签: hive duplicates presto amazon-athena

我在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;

Athena的所有结果输出.csvs仍然重复MD5。是什么给了什么?

Athena是否正在进行部分重复数据删除? - 更奇特的是,如果我在Athena中执行COUNT(DISTINCT md5),我获得的计数与导出时返回的行数不同。

    雅典娜的
  • COUNT(DISTINCT md5):97,533,226
  • 出口不同MD5的记录:97,581,616
  • 结果导出中有14,790个重复项,因此 COUNT(DISTINCT)计数都不好,结果导出错误。

雅典娜是否在出口时重复创作? - 情节变粗。如果我在Athena表中查询Athena结果导出中重复的MD5之一,我只从表中获得一个结果/行。我使用LIKE查询对此进行了测试,以确保空格不会导致问题。这意味着Athena正在向导出添加重复项。结果中至少有两个相同的MD5。

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

是雅典娜的计数&结果文件错误? - 我使用MySQL重复了这些相同的记录,最终获得了97,531,010个独特的MD5。 Athenas计数和结果详情如下。

    雅典娜的
  • 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

2 个答案:

答案 0 :(得分:3)

我已与AWS团队确认,在提出问题时,这是AWS Athena的一个已知错误。我不确定这是否已经解决。

答案 1 :(得分:0)

如有疑问,请使用CTAS删除所有重复项:

CREATE TABLE new_table
WITH (
      format = 'Parquet',
      parquet_compression = 'SNAPPY')
AS SELECT DISTINCT *
FROM old_table;

参考:https://docs.aws.amazon.com/athena/latest/ug/ctas-examples.html