AWS Athena (Presto) DISTINCT SQL 查询中的重复结果?
Duplicate results in an AWS Athena (Presto) DISTINCT SQL Query?
我在 S3 上有一堆只包含 MD5 的文件,每行一个。我创建了一个 AWS Athena table 到 运行 针对 MD5 的重复数据删除查询。这些文件和 table.
中总共有数亿个 MD5
雅典娜Table创作查询:
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/';
以下是我尝试过的所有 "dedup" 查询(这些应该都是一样的):
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 Table 中查询在 Athena 结果导出中重复的 MD5 之一,我只会从 table 中得到一个 result/row。我使用 LIKE
查询对此进行了测试,以确保空格不会导致问题。这意味着 Athena 正在向导出添加重复项。结果中相同的 MD5 永远不会超过两个。
select
md5,
to_utf8(md5)
from md5s
where md5 like '%0061c3d72c2957f454eef9d4b05775d7%';
Athena 的计数和结果文件都错了吗? - 我使用 MySQL 对这些相同的记录进行了重复数据删除,最后得到 97,531,010 个唯一的 MD5。 Athenas 计数和结果详情如下。
COUNT(DISTINCT md5)
在雅典娜:97,533,226
- 导出不同 MD5 的记录数:97,581,616
- 结果导出中有 14,790 个重复项,所以看起来 两个 COUNT(DISTINCT) 计数都是错误的,结果导出也是错误的。
我认为这是一个 Athena 错误 - 我已经向 AWS 的开发团队提交了一张票以修复此问题,并将在 post 修复时更新此错误.
这是相关的 AWS 论坛 Post,其他用户在其中看到了相同的问题。
https://forums.aws.amazon.com/thread.jspa?messageID=764702
我已与 AWS 团队确认,在提出问题时这是 AWS Athena 的一个已知错误。我不确定这是否已经解决。
如有疑问,请使用 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
我在 S3 上有一堆只包含 MD5 的文件,每行一个。我创建了一个 AWS Athena table 到 运行 针对 MD5 的重复数据删除查询。这些文件和 table.
中总共有数亿个 MD5雅典娜Table创作查询:
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/';
以下是我尝试过的所有 "dedup" 查询(这些应该都是一样的):
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 Table 中查询在 Athena 结果导出中重复的 MD5 之一,我只会从 table 中得到一个 result/row。我使用 LIKE
查询对此进行了测试,以确保空格不会导致问题。这意味着 Athena 正在向导出添加重复项。结果中相同的 MD5 永远不会超过两个。
select
md5,
to_utf8(md5)
from md5s
where md5 like '%0061c3d72c2957f454eef9d4b05775d7%';
Athena 的计数和结果文件都错了吗? - 我使用 MySQL 对这些相同的记录进行了重复数据删除,最后得到 97,531,010 个唯一的 MD5。 Athenas 计数和结果详情如下。
COUNT(DISTINCT md5)
在雅典娜:97,533,226- 导出不同 MD5 的记录数:97,581,616
- 结果导出中有 14,790 个重复项,所以看起来 两个 COUNT(DISTINCT) 计数都是错误的,结果导出也是错误的。
我认为这是一个 Athena 错误 - 我已经向 AWS 的开发团队提交了一张票以修复此问题,并将在 post 修复时更新此错误.
这是相关的 AWS 论坛 Post,其他用户在其中看到了相同的问题。 https://forums.aws.amazon.com/thread.jspa?messageID=764702
我已与 AWS 团队确认,在提出问题时这是 AWS Athena 的一个已知错误。我不确定这是否已经解决。
如有疑问,请使用 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