本記事では特定期間のデータのみを洗い替える場合などに便利なDELETE-INSERTという方法について、Dr.Sumで用意されているバッチコマンドで自動化する方法を紹介します。DELETE-INSERTの概要やDr.Sumにおける基本的な操作の流れ、気をつけるべきポイントについては是非こちらの記事をご覧ください。
DELETE及びINSERTに加え、Dr.SumにおいてはREBUILDも考慮に入れる必要がありますが、これら3つの命令を実行するコマンドは用意されているため1から構築する必要なく自動化を実現することができます。
事前準備
今回利用するバッチコマンドはAdministrative Toolsと呼ばれるモジュールに含まれています。こちらは「<Administrative Toolsのインストールフォルダー>\cmd\JPN」配下にあります。デフォルトでインストールした場合は「C:\DrSumXX\AdminTools\cmd\JPN」(XXはバージョン)の配下にありますので確認してみてください。
次に、仮想テーブルを作成する必要があります。仮想テーブルはデータソース(CSVやExcel、その他データベース)からDr.Sumへどのデータをどのように格納するか定義した変換テーブルです。。仮想テーブルの詳細や作成方法については下記のページをご覧ください。
使用するコマンド
DELETEコマンド
データの削除を行うには「dwtab_delete」コマンドを使用します。引数として削除する条件(期間)を指定できます。その他の引数については下記マニュアルをご覧ください。
サンプルとして、データベース「売上データ」内の「売上明細」テーブルに対して「日付」という項目を使って当年当月初日以降のデータを削除する場合、下記のようになります。
dwtab_delete "localhost" 6001 "Administrator" "[PASSWORD]" "売上データ" "売上明細" "日付>=CONCAT(YEAR(CURRENT_DATE()),'/',MONTH(CURRENT_DATE()),'/01')"
INSERTコマンド(行を追加してインポート)
データのインポートを行うには「dwtab_import」コマンドを使用します。引数としてインポートモードを指定することができ、全件洗い替えか行追加かなどを指定できます。その他の引数については下記マニュアルをご覧ください。
サンプルとして同上のテーブルにCSVファイル(C:\DATA\Sample.csv)をインポートする場合、下記のようになります。今回は行を追加してインポートのため、最後から2つ目の引数は必ず「2」としてください。
dwtab_import "localhost" 6001 "Administrator" "[PASSWORD]" "売上データ" "売上明細" "VTB_ROOT/VTB_FOLDER_PATH" "VTB_NAME" "C:/DATA/Sample.csv" "" 0 2 1
また、最後の引数(例では「1」)はCSVファイルがサーバー or クライアントのどちらに存在するかによって異なるため、エラーが出る場合はマニュアルを確認してみてください。
REBUILDコマンド
REBUILDを行うには「dwtab_rebuild」コマンドを使用します。概要については、以下をご覧ください。
引数として簡易リビルドか完全リビルドかを指定できます(マニュアル参照)。
サンプルとして同上のテーブルを完全リビルドする場合、下記のようになります。
dwtab_rebuild "localhost" 6001 "Administrator" "[PASSWORD]" "売上データ" "売上明細" 0 2 0
必要なコマンドは以上です。これら3つのコマンドを一つにまとめて新たなバッチを作成し、Windowsの「タスクスケジューラ」などで夜間に動作するといった仕組みをつくるとよいでしょう。REBUILDに関しては多くの場合毎回実行する必要は無いため、一ヶ月に一回や半年に一回程度が一般的です。また下記の記事のように各テーブルが再構築(リビルド)が必要かを判定して、必要なものだけ再構築(リビルド)をする方法があります。
コマンドプロンプトで実行してみる
では、実際に実行してみましょう!例として次のような処理を実行します。
- 「売上データ」データベースの「売上明細」テーブルにある、2023年4月1日以降のデータを削除
- 「C:/CSVs/delete_insert/売上_4月分.csv」を同テーブルに行を追加してインポート
- 同テーブルを完全リビルド
3つの処理を順次実行するバッチファイル「delete_insert_rebuild.bat」を下記のように作成しました。どのフォルダからでも実行できるようコマンドは絶対パスで指定しています。
call C:\DrSum57\AdminTools\cmd\JPN\dwtab_delete.bat "localhost" 6001 "Administrator" "" "売上データ" "売上明細" "日付 >= '2023/04/01'"
call C:\DrSum57\AdminTools\cmd\JPN\dwtab_import.bat "localhost" 6001 "Administrator" "" "売上データ" "売上明細" "VTB_ROOT/" "delete_insert" "C:/CSVs/delete_insert/売上_4月分.csv" "" 0 2 1
call C:\DrSum57\AdminTools\cmd\JPN\dwtab_rebuild.bat "localhost" 6001 "Administrator" "" "売上データ" "売上明細" 0 2 0
こちらをコマンドプロンプトで実行します。3つのコマンドが順に実行されますが、すべて「正常に処理が終了しました」と表示されていれば成功です。
うまく2023/4/3までのデータが反映できていますね!
【番外】インポートタスクで実施する
Dr.Sumには特定のフォルダを監視して、特定の名称のCSVファイルが格納されたら自動でインポートする仕組「インポートタスク」があります。
インポートタスクの設定画面では、取り込みを行う前と後で任意のコマンドを実行させることが可能です。そのため、INSERT(行を追加してインポート)の前にDELETEコマンドを、後にはREBUILDコマンドを実行するように指定すればインポートタスクでもDELETE-INSERTを実現することが可能です!
[イベント]タブをクリックすると、インポート前後のコマンドを指定する画面が表示されますので前章のコマンドをそれぞれ設定してみてください!
ただし、REBUILDについてはインポートのたびに毎回実行する必要はないため、インポートタスクの画面上ではなくWindowsのタスクスケジューラで月に一回程度実行させる運用も検討してみてください。
さいごに
本記事ではDELETE-INSERT及びREBUILDの一連の流れをコマンドで実行する方法とインポートタスク機能を使った場合での実現方法を紹介しました。基幹システムから直接繋げない場合はCSVなどのファイル連携になるため、自動化によってシームレスに連携ができるようになるとよいですね。