質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

2回答

2629閲覧

CSVにあってテーブルにないデータを削除したい。

FujiCandy

総合スコア13

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2018/11/29 02:40

前提・実現したいこと

MYSQL5.7にて、連携されるCSVデータをマスタテーブルに取り込みしているのですが、
CSVの中にないデータを削除をしたいと思っています。

連携されてくるCSV側での対応ができないため、取込側で何とかせざるを得ない状況ですが、
方法として2案考えており、速度的な点を重視して対応ができればと考えています。
どちらが方法がよいのか、また別案があれば教えてください。

なお、データ件数は100万件ぐらいで、テーブルデータ件数もほぼニアリーイコールです。
DB形式はInnoDBになります。

案1:
一度、truncate tableをしてから、Load Dataですべて取り込む。
→ 試したところ削除はすぐだが、取込はIndexの貼り直しがあるので、5分程度かかった。

案2:CSVをワークテーブルに入れて、ワークとマスタを比較して差分データを削除する。
→ まだ試してませんが、結局ワークに入れる際、削除から取込処理が入るため、
全体的に速度が落ちる。マスタ側への影響が少ないだけがメリット。

最初は、LOAD DATA INFILE 'test.CSV' REPLACE INTO TABLE test でやってましたが、
存在しないものは消えないというのがわかって、変更しているところです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

何をもってデータが合致するか次第
削除だけが目的なら後者の別テーブルにロード後
突合して合致しないデータだけ削除するのが楽
削除だけでなく挿入や更新もあるなら案1が確実

投稿2018/11/29 02:48

yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FujiCandy

2018/11/29 03:07

プライマリキーが一致した場合に限り、更新処理をしてます。 そのためReplaceでなんとかなってましたが、 挿入更新以外に、削除がでてきたため、質問させていただきました。 1日1回、日々実行しているのですが、DBへのパフォーマンスへの影響はどうなんでしょうか。徐々に速度が落ちていくなどの影響も知りたいです。
yambejp

2018/11/29 03:12

> 挿入更新以外に、削除がでてきた つまりすべての処理が必要だということならtruncateが確実です truncateは一種の初期化ですから速度が落ちることはないでしょう 気になるならテーブルの最適化は定期的におこなってください
FujiCandy

2018/11/29 03:30

ありがとうございます! サイクルテストして影響が大きそうであれば、定期メンテナンスを検討いたします。
guest

0

CSVに無いデータをマスタから削除したいということですよね?
普通は、マスタは物理削除ではなく、論理削除するものですが、大丈夫なんでしょうか?

CSVのデータに含まれているかどうかを判別する方法ですが、OAD DATA INFILESET 句を使用してはどうでしょうか。
CSV連携用の項目を用意(例えば論理削除のフラグ)して連携前にクリアしておき、SET句で更新する。

そうすれば、処理後にその項目の値で、CSVのデータ有無を判断できます。

投稿2018/11/29 03:17

sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FujiCandy

2018/11/29 03:32

連携元が論理削除ではなく、物理削除であり、さらに削除されたという履歴情報すらない状態でしたので、 相手側の仕様的な問題なってしまいます。 相手側の改修が見込めないため、今回のような対応になっています。
sazi

2018/11/29 04:10

そうですか。 そのマスターを関係的に参照しているものも同時に削除なら話は分かりますが、そうでないなら、破綻してしまいますので、頭の片隅にでも留めて置かれた方が良いかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問