ホーム › フォーラム › A5:SQL Mk-2掲示板 › CSVインポート時の重複処理について
- このトピックには4件の返信、2人の参加者があり、最後に
により6年前に更新されました。
-
投稿者投稿
-
Masaru
ゲストお世話になっております。
ウェブから収集したデータをExcel等で前処理後、
CSV形式で定期的にMySQLに格納しております。ウェブデータなので重複が多く、duplicateエラーが頻発しており
現状では都度CSVを編集してエラーに対応しております。CSVインポート時で重複が発生した際、「都度エラー表示」以外に
・すべて上書き
・すべてキャンセル
といった処理を行うことは可能でしょうか。よろしくお願い申し上げます。
松原正和
キーマスターMasaru さんこんにちは。
申し訳ありません。今のところ、重複エラーが起きると停止してしまいます。Version 2.14.0から高速化のロジックを入れたことも関係して、重複時はUpdate等のロジックも入れづらい状況です。
たとえば、同じレイアウトのワークテーブルを作成し、そこにインポートした後、insert select等で、処理したりできないでしょうか?。-
この返信は6年、 8ヶ月前に
松原正和が編集しました。
Masaru
ゲスト松原様
ご回答いただき、ありがとうございます。
ウェブデータに関しましてはMySQL Workbenchがインポートエラー発生時に
スキップする処理になっているようで、そちらでいったんは解決しました。
(とは言えMySQL WorkbenchのCSVインポートはカラムが欠落するといった
別の問題を抱えているのですが……)もし将来的にインポート時の課題を解決できそうでしたら、ご検討頂けますと
幸いです。なお、A5:SQL Mk-2は定型データの取り扱いでは非常に動作が安定しており、
重宝して利用させて頂いております。今後とも宜しくお願い申し上げます。Dark
ゲスト一つ質問なのですが、A5M2のCSVインポートの機能はDBごとに固有のCSVインポートの機能を利用しているという理解で大丈夫でしょうか。
もしinsert文を発行している形であれば発行する文をmerge文(あるいはinsert on duplicate key update文)にするオプションがあった場合、該当する処理をA5M2側で行わずにDB側で処理できるので実装しやすい形になるかと思うのですがいかがでしょうか。
ご検討の程よろしくおねがいします。松原正和
キーマスターDarkさんこんにちは。
内部的な動作としては、DBごとに処理を切り分けています。たとえば、Oracleでは接続に使っているライブラリであるUniDACにバッチ実行という機能があり、これを使用しています(実は、内部の実装がどうなっているか把握できていません)。MySQLの場合は、1000件ごとのバルクインサート(valuesが複数あるinsert)などを使用します。
重複時の更新はDBを個別に修正しなければいけないため少し大変かと思います。できれば行いたいのですが、少し優先度は下げなければいけないかもしれません。
以上よろしくお願いいたします。 -
この返信は6年、 8ヶ月前に
-
投稿者投稿