Deduplicate アクションを使用して重複行を削除する
Deduplicate アクションは、テーブルから重複行を削除し、重複キーごとに1行だけを保持します
目的
Deduplicate アクションは、テーブルから重複行を削除し、インプレースで実行し、重複キーごとに1行だけを保持します。典型的なユースケースは、テーブルが追加モードで読み込まれたが、アップサートが意図されていた場合です。テーブルの識別子フィールドで重複を削除すると、アップサートが生成したテーブルと同じテーブルが得られます。他のアクションと同様に、これはオンデマンドで実行できます。または、cron トリガーでスケジュールしたり、ワークフロー内でオーケストレーションしたりできます。
このアクションは、Lakehouse (Iceberg)およびPostgreSQLデータセットに格納されたテーブルで動作します。
Deduplicate は、ターゲットテーブル自体を変更します。Lakehouse テーブルでは、以前の状態はスナップショットとして利用可能なため、タイムトラベルで実行を元に戻すことができます。PostgreSQL テーブルでは、削除は永続的です。削除する準備ができていないものを重複を削除する前に、バックアップオプションを有効にしてください。
Deduplicate アクションの設定
設定画面には、左側にテーブル設定と、右側にバックアップ&スキャンの2つのパネルがあります。左側のパネルでは、テーブル、重複キー、および保持する行を選択します。右側のパネルでは、実行を保護し、アクションを作成する前にその効果をプレビューします。
テーブルの選択
テーブルセレクターからターゲットテーブルを選択します。各エントリには、テーブル名とその所属するデータセットが表示されます。アクション名は選択したテーブルから事前に入力されます。例えば、Deduplicate - orders です。
重複キーの選択
重複キーは、ユニークな行を定義する列のセットです。実行後、テーブルにはこれらの列の組み合わせごとに1行だけが含まれます。
テーブルが識別子フィールドを宣言している場合、それらはキーセレクターの上に表示され、キーはそれらで事前に入力されます。これは推奨されるキーです。このキーを使用してテーブルを重複を削除すると、インジェスト時にアップサートロードが行ったのと同じようにテーブルを重複を削除します。
代わりに、既存の列の任意のセットを選択できます。選択がテーブルの宣言された識別子フィールドと異なる場合、警告が表示され、テーブル自身の定義による重複ではない行が削除される可能性があることをお知らせします。テーブルが識別子フィールドを宣言していない場合は、データにユニークな行を定義する列または列を選択してください。
キー列が空の行は、標準的なSQL GROUP BY セマンティクスに従ってグループ化されます。同じキー列にNULLがある2つの行は、お互いの重複としてカウントされます。
保持する行の選択
複数の行が同じキーを共有する場合、保持する行設定は、どの行が生き残るかを決定します。
- 任意の残っている行(デフォルト):生き残る行は任意です。これは、重複した行が同一のコピーである場合に適しています。重複した行がキーの外で異なる場合、保持される行は任意です。
- 最新 / 最古のエントリ:確定的です。最新または最古を選択し、並べ替え列を選択します。これは、更新タイムスタンプ、バージョン番号、または自動インクリメントIDなど、新しさを反映する日付、タイムスタンプ、または数値列です。並べ替え列が空の行は最後にランク付けされます。値のある行は常に値のない行に勝ちます。
バックアップを保持する
このテーブルのバックアップを保持するをオンにすると、何かが削除される前にテーブルの完全なコピーが作成されます。コピーは<table>_backup_<id>と名付けられ、Lakehouse Managerに他のテーブルと同様に登録されます。
バックアップは、実行が実際に削除する重複を持っている場合にのみ作成され、ターゲットテーブルに触れる前に行数が確認されます。バックアップを作成または確認できない場合、実行は停止し、テーブルはそのまま残ります。バックアップテーブルは、実行が失敗した場合でも自動的に削除されません。必要がなくなったら、自分で削除してください。
Lakehouse テーブルでは、現在の状態のスナップショットが保持されるため、バックアップは追加の安全網です。PostgreSQL テーブルでは、バックアップは削除された行を回復する唯一の方法です。
重複をスキャンする
アクションを作成する前に、スキャンをクリックして、現在の設定が削除するものの読み取り専用の見積もりを取得します。スキャンはテーブルを変更しません。スキャンには、選択されたテーブルと少なくとも1つのキー列が必要です。
結果カードには、次の内容が表示されます。
- 削除される行の数と適用されるサバイバー規則;
- キーごとに1行以上の行を持つキーの数と、キーごとの最悪のコピー数;
- 前の状態が利用可能なままになるか(Lakehouse スナップショット)または削除が永続的か(PostgreSQL)を示します。
スキャンがキーの重複を検出しない場合、カードは削除するものがないことを確認します。テーブルの半分以上が削除される場合、追加の警告が表示され、キーが本当にユニークな行を定義しているかどうかを確認するよう促します。テーブルの大部分を削除することは通常、キーが間違っていることを意味します。例えば、1日あたり多くの行を持つテーブルに対して単一の日付列です。
スキャン結果は、テーブル、キー、またはサバイバー規則を変更するたびに破棄されます。新しい見積もりを取得するには、再度実行してください。同じ統計は、各実行の開始時に再計算されるため、実行はスキャンでプレビューした内容を確認します。
重複を削除する方法
テーブルを保持するデータセットのエンジンによって、メカニズムが異なります。
各実行は、テーブルをスキャンして開始します。スキャンがキーの重複を検出しない場合、実行はすぐに終了し、テーブルは変更されません。
このアクションは、行のみを削除します。テーブルのスキーマ、パーティション、または識別子フィールドを変更することは決してありません。
Lakehouse テーブルでは、アクションが実行されている間にデータセットに一時的な<table>_dedup_tmpテーブルが表示される場合があります。このテーブルは、実行の終了時に自動的に削除され、ハードエラーの残骸は次の実行の開始時にクリーンアップされます。
アクションが実行されている間にターゲットテーブルに書き込まないでください。同時書き込みはサポートされていません。Lakehouse テーブルでは、競合するコミットが失敗し、自動ロールバックが実行前の状態を復元します。
実行の結果を確認する
各実行は、実行ログに要約を書き込みます。実行前後の行数、削除された行数、重複を持つキーの数、使用されたキー、および実行を元に戻す方法です。バックアップオプションが有効な場合、要約にはバックアップテーブルの名前も含まれます。例えば:
デデュプリケーションを元に戻す
- Lakehouse テーブル: 実行のログにプリラン スナップショット ID が印刷されます。スナップショット保持期間(デフォルトで 14 日間)内に、タイムトラベルを使用してテーブルをそのスナップショットに復元します。
- PostgreSQL テーブル: スナップショットはありませんので、削除自体を元に戻すことはできません。実行にバックアップ オプションが含まれている場合、
<table>_backup_<id>コピーにはテーブルのプリラン内容が正確に保持されています。
例
下記のタブを選択して、Advanced modeで見る JSON として表示される典型的な構成を確認してください:
追加 モードで 2 回実行されたロードにより、orders の各行が 2 回存在します。行は同一のコピーですので、どのサバイバーでも問題ありません。テーブルの識別子フィールド order_id でデデュプリケーションを行うと、アップサートが生成したテーブルが得られます:
Advanced mode を使用する
アクションの JSON 構成ファイルにアクセスする必要がある場合は、ページ上部の Advanced をクリックして Advanced mode を有効にします。
アクションには、次のパラメータが指定されます:
さらに詳しく
ソリューションの実装に関するトレーニングや技術的なアシスタンスが必要な場合は、営業担当者にお問い合わせください、または、Professional Services ページにアクセスして、見積もりを依頼し、専門家チームにプロジェクトを分析してもらってください。
Data Platform を構築するチームと直接質問したり、フィードバックを送信したり、やり取りしたりするには、専用の Discord チャネル を利用してください。
OVHcloud サービスについてサポートが必要な場合は、Help Centre でリクエストを作成してください。
コミュニティに参加してください。

