重複データの見つけ方と対処法
CSVで重複IDや重複行がなぜ問題になるか、どう検出・対処するかを解説します。
重複が問題になる理由
CSVをデータベースにインポートするとき、主キーやユニークキー列に重複値があると、制約違反エラーでインポートが止まります。キーで2つのCSVをマージするとき、重複キーがあると「どの行が正しいか」が曖昧になり、エラーが発生するか、誤った値が正しい値を上書きします。インポートやマージの前に重複を検出して解決することが、こうした障害を防ぐ最も確実な方法です。
重複が入り込む原因
- 手動データ入力 — 既存レコードを確認せずに別の担当者が別の時点で同じレコードを入力
- システム移行 — 重複除去なしに2つのシステムのデータを統合すると、各ソースのIDが重なる
- ファイルの連結 — 重複する期間やデータセットの2つのエクスポートを連結すると、両方に存在する行が重複する
- 空白・不可視文字 — 「U001」と「U001 」は異なる文字列なので、データベースが両方を許容し、画面上では同じに見える見かけ上の重複が生まれる
- 大文字小文字の区別 — 「Alice@example.com」と「alice@example.com」をインポーターが別々に扱う場合、同一ユーザーを2行として処理してしまう
重複の種類
- 完全重複
- 行のすべてのフィールドが同一です。レコードが2回入力またはインポートされたケースです。1行だけ残して他を削除しても安全です。
- キーは同じで内容が違う
- キー列(ID、メール、コード)は同じだが他のフィールドが違います。バージョン管理の問題、きれいに適用されなかったデータ更新、または2つのソースからの競合エントリの可能性があります。どのバージョンが正しいか判断する必要があります。
- 見かけ上の重複(空白・不可視文字の差)
- キー値が同じに見えるが、空白や不可視文字が異なります。ほぼ常にエラーであり、重複検出の前に単体チェックのトリム・不可視文字除去で整理すべきです。
- 許容される重複(非ユニークキーテーブル)
- テーブルによっては同じキーが複数回出てきて正しい場合があります(注文明細、取引ログ、イベント履歴など)。これはエラーではなく削除してはいけません。正しい列を確認してください。
適切なキー列の選び方
キー列とは、ユースケースにおいて各行を一意に識別すべき列のことです。よくある選択肢:
- ID列 — user_id、product_id、order_id:明示的に一意になるよう設計された列
- メールアドレス — ユーザーデータでは自然な一意キーとしてよく使われる
- 商品コード・SKU — 商品カタログでは一意であるべき
- 複合キー — 一意性が列の組み合わせで定義される場合(例:日付+店舗ID)。複合キーは1つの列に結合してからチェックすると扱いやすいです。
どの列を使うべきかわからない場合は、そのテーブルのデータベース主キーとして使われている列を確認してください。
ステップバイステップ:重複の検出方法
- 先にクレンジング — CSV単体チェックを実行し、トリムと不可視文字の除去を先に適用します。空白による見かけ上の重複がこのステップで解決され、重複レポートがより正確になります。
- キー列を選択 — 単体チェックで一意であるべき列を選択します。
- 重複レポートを確認 — ツールが複数回出現する値と各出現の行番号を一覧表示します。各グループを確認して重複が発生した理由を把握します。
- ダウンロードして編集 — CSVをダウンロードし、業務ルールに従って重複行を手動で削除または統合します。ツールは自動で行を削除しません。正しい解決方法が状況によって異なるためです。
- 再確認 — 編集したファイルを単体チェックで再度実行して重複がないことを確認します。
どの行を残すかの判断方法
- 完全重複 — いずれか1行だけ残し、他を削除します。
- キーは同じで内容が違う — タイムスタンプ列があれば最新の行を残します。2つのソースからきている場合、そのレコード種別について信頼できるソースはどちらかを判断します。
- 判断できない — 自動的な決定が困難なら手動レビューのためフラグを立てます。誤ったデータをインポートするよりインポートエラーの方がましです。
2ファイル比較での重複の影響
2ファイル比較で旧版と新版のCSVを比較するとき、どちらかのファイルに重複キーがあると差分が誤解を招きます。ツールはキー列の値で行を対応付けます。同じキーが複数回現れると対応関係が崩れ、追加・削除された行が「変更」として表示されたり、実際に変更された行が検出されなかったりします。比較前に両ファイルから重複を除去してください。
予防策
- 重複チェックを一回限りのクリーンアップではなく、データパイプラインのインポート前検証ステップとして組み込みましょう。
- ソースシステムからエクスポートする際は、
DISTINCT句または同等のオプションを使ってエクスポート段階での重複を防ぎましょう。 - チームが扱う各CSVタイプについて、どの列が一意キーかを文書化しておきましょう。
ツールを開く
- CSV単体チェック — 重複IDの検出と一覧
- 形式・基本チェック — インポート前の列数・構造確認
- 2ファイル比較 — 重複除去後のバージョン間差分確認
- CSVクリーニングガイド — 不可視文字・トリム含む全体のクレンジング手順