なに?
Redshift使ってると、全く同じ行がわんさかできてしまったりします。
色々な参考を読んでいると、登録データで新しいのだけ残して消したりとかやっていますが
プログラムから全く同じモノを何回も突っ込んでしまった時とかにどうやって消込かけようかとやってみた記録です
方法
を参考に
- 元のテーブルから完全重複している行をDISTINCTして1行だけにして取り出す
- 1で取り出した情報を作業用の一時テーブルに格納する
- 元のテーブルから重複しているデータをごっそり消す
- 一時テーブルから元のテーブルにデータを書き戻す
という方法で完全重複の消込をかけました。
参考
元のテーブルは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;