S3 には、1 行に 1 つずつ、MD5 だけを含むファイルがたくさんあります。MD5 に対して重複除外クエリを実行するための AWS Athena テーブルを作成しました。これらのファイルとテーブルには、合計で数億の 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 は部分的な重複排除を行っていますか? - さらに奇妙なことにCOUNT(DISTINCT md5)
、Athena で a を実行すると、得られるカウントがエクスポートで返される行数とは異なります。
COUNT(DISTINCT md5)
アテナ: 97,533,226- 個別の MD5 のエクスポートの記録: 97,581,616
- 結果のエクスポートには 14,790 の重複があるため、両方の COUNT(DISTINCT) カウントが正しくなく、結果のエクスポートも正しくありません。
Athena はエクスポート時に重複を作成していますか? - プロットが厚くなります。Athena 結果エクスポートで複製された MD5 の 1 つについて Athena テーブルをクエリすると、テーブルから 1 つの結果/行しか得られません。これをクエリでテストして、LIKE
空白が問題の原因ではないことを確認しました。これは、Athena がエクスポートに重複を追加していることを意味します。結果に同じ MD5 が 2 つ以上存在することはありません。
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 の開発チームにチケットを提出しました。修正されたら、この投稿を更新します。
これは、他のユーザーが同じ問題を見ている関連する AWS フォーラムの投稿です。 https://forums.aws.amazon.com/thread.jspa?messageID=764702