TSVやCSVのデータ登録をバッチ更新に

というか、そもそも ReplaceSchema で TSV や CSV
のデータを登録できると思っていなかった人も多いのでは!?
仕方ありません。そもそも全面に売り出してなかった機能です。
別に今でも「基本はエクセルデータ」に変わりはありません。

ReplaceSchema - データ登録(TSV) | DBFlute
(以下、TSV と言ったら CSV も含みます)

で、そういう扱いだったので、TSV のデータ登録は、
ちょっとだけ「おいてけぼり」をくらっていました。
誰においてけぼりをくらったか!?...jflute です。
エクセルデータの方は随分前からバッチ更新を使って、
パフォーマンス向上に努めていたのですが、TSV の方は
放置状態で都度都度 insert のままでした。
そもそも TSV の存在理由の一つに:
「エクセルで扱えない大量データを登録」
というのがあるのだから、よりバッチ更新を使いたい場面
だよね、っていうところ。ようやく対応しました。
次のバージョン「DBFlute-0.9.7.5」にて反映します。
既に RC1 が出ております。(DBFlute.NET も同様)

昨日、seasar-user-MLで話題になった課題の件に関連して、
30万件のレコードを ReplaceSchema で登録しました。
そのときに「うーん、さすがにバッチ更新にしないとなぁ」と。
バッチ更新にすると、一つ別の問題が発生します。
JDBCの例外メッセージの「優しさ度」次第では、どのレコードが
登録エラーになったのかがわからないことがたびたび。
そういうときは一度バッチ更新を止め、都度 insert 形式
にして実行すると、エラーになったレコードで処理が中断します。
これは、エクセルデータの登録と全く同じ仕様です。

ReplaceSchema - バッチ更新をしないで登録 | DBFlute
エクセルデータと仕様の違いが幾つかあります。
メインのエクセル、サブのTSV、という扱い、
そして、手動作成のエクセル、どこかからの自動出力のTSV、
という場面を想定していることにより、仕様も多少の違いが。
(無論、必ずしもそうじゃないことの想定もありますが)

ReplaceSchema - TSVファイルのデータ仕様 | DBFlute

ちょっと特徴的なのが:
「テーブルに存在しないカラム定義は無視される」
というところ。
スペルミスなどを考えると厳密にチェックされた方が
うれしいとは思うところですが、こういったポイントが:
TSV はシステム間でのデータのやり取りに向いているため、
手動で作成するというよりかは、プログラム経由で出力する
ことが多く、スペルミスチェックのニーズは比較的低いかと。
また、TSVデータを外部システムからもらうことが想定され、
そういうときに不要なカラムが含まれることもしばしば。
TSV はデータ編集しづらい形式なので、できればそのまま
不要なカラムは無視して ReplaceSchema で登録、っと。

「そんなこと滅多にないようぅ」と思われるかも知れませんが、
確かにその通りです。ただ、ReplaceSchema が誕生した
プロジェクトにて、まさにその要件がありました。
お客様からテストデータをもらえるのですが、さっきのような
感じ。そして、手修正追いつかない大量のテーブル、というか
他にも作業がひっきりなし。そういった状況で、
ReplaceSchema の TSV 登録が産声をあげました。
(三年半...いや四年近く前ですかね)
という経緯があり、今に至っています。
本来はどっちの仕様が良いか、というのは一旦置いておいて、
「思い出の仕様」ということでご容赦下さい...

@DBFlute, Java, DBFlute.NET, C#, ReplaceSchema