9

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

4

2 に答える 2