ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

SQL to AsakusaFW:DELETE

2019-12-06 00:00:00 | PG(分散処理)

Asakusa Framework Advent Calendar 2019の6日目、SQLをAsakusaFWに変換するポイントについてです。

SQLのDELETE文を考えてみましょう。
WHERE条件が無いDELETE文の場合、全件削除となります。AsakusaFWでは、入力データをcore.stop演算子に渡し、core.empty演算子で空データを出力するのが良さそうです。
というか、ただ単に何もしないということなので、わざわざAsakusaバッチにする必要は全く無いですね(爆)

WHERE条件が有るDELETE文の場合、Branch演算子で条件分岐し、削除する側をcore.stop演算子に渡すことになるでしょう。


ひとつ問題となるのは、RDBへの反映方法です。
たいていのRDBを扱うAsakusaバッチの場合、出力結果をRDBに反映することになると思います。

INSERTやUPDATEの場合は出力したデータをテーブルに反映(上書き)すればいいですが、DELETEではそういうわけにいきません。RDB上の既存データと比較して存在チェックをし、無いものを実際にDELETEすることになりそうですが、面倒ですよね…。

削除したデータをcore.stop演算子に渡すのではなく削除済みデータとして出力しておけば、そのプライマリキーを元に(AsakusaFW以外のツールで)DELETE文を発行するという方法が使えます。こちらの方が幾分簡単な気がします。

なお、AsakusaFWのWindGate JDBCを使っている場合は、RDBへの反映はTRUNCATE(全件削除)+全件INSERTなので、DELETEだからと言っても特別な考慮をする必要はありません。



最新の画像もっと見る

コメントを投稿