LoginSignup
3
0

More than 5 years have passed since last update.

Redshiftで完全に重複した行を消したい

Posted at

なに?

Redshift使ってると、全く同じ行がわんさかできてしまったりします。
色々な参考を読んでいると、登録データで新しいのだけ残して消したりとかやっていますが

プログラムから全く同じモノを何回も突っ込んでしまった時とかにどうやって消込かけようかとやってみた記録です

方法

を参考に

  1. 元のテーブルから完全重複している行をDISTINCTして1行だけにして取り出す
  2. 1で取り出した情報を作業用の一時テーブルに格納する
  3. 元のテーブルから重複しているデータをごっそり消す
  4. 一時テーブルから元のテーブルにデータを書き戻す

という方法で完全重複の消込をかけました。

参考

元のテーブルはidとkyeで一意のデータに識別出来るものとする

作業用SQL
-- テーブルを削除
DROP TABLE tmp;

-- 作業用テーブルの作成
CREATE TEMP TABLE tmp (LIKE moto_no_table);

-- 完全重複している行を1行だけInsert
INSERT INTO tmp
  SELECT DISTINCT *
  FROM moto_no_table
  WHERE (id, key) IN (
          SELECT DISTINCT
            id,
            key
          FROM moto_no_table
          GROUP BY id, key
          HAVING count(id) > 1
        );

-- 元のテーブルから重複しているすべての行を削除
DELETE FROM moto_no_table
WHERE (id, key) IN (
        SELECT DISTINCT
          id,
          key
        FROM moto_no_table
        GROUP BY id, key
        HAVING count(id) > 1
      );

-- 元のテーブルへ書き戻す
INSERT INTO moto_no_table
SELECT * FROM tmp;
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0