当月分や当年分のみ更新したい場合など、特定期間のみを洗い替えたいときによく利用されるDELETE-INSERTについて紹介します。Dr.Sumの既存のテーブルに対してデータをインポートする方法には、オプション含め3つあります。
- テーブルの中身を削除してインポート(全件洗い替え)
- テーブルに行を追加してインポート
- テーブルに設定されたキー項目の有無に応じて更新・追加(差分更新)
一方、当月の月初~当日(もしくは前日)までの売上明細が基幹システムから毎日出力されるような場合、1や2の方法は勿論、3もユニークなキー項目がないためうまく更新分を反映できません。
こうした場合、多くのシーンで利用される「DELETE-INSERT」という方法について紹介していきます。本記事ではDELETE-INSERTの手順や内容について理解を深めてもらうため、GUI操作をベースに”手動で”実行する方法を紹介します。バッチコマンドを使った自動化については下記をご覧ください。
DELETE-INSERTの仕組み
DELETE-INSERTは冒頭の例に挙げたように、キー項目の存在しないトランザクションデータ(売上明細など)に対して特定の期間のみを洗い替えるといったシーンでよく使われる方法です。とはいえ手法としてはすごく簡単で期間をDELETEした後に行を追加する形でインポート(INSERT)すればOKです。図で表現すると以下のようになります。
- DELETE
- INSERT
Dr.Sumでの実現方法
期間のDELETEを実行する
まず第一ステップとして削除の方法を紹介します。データの削除は基本的にSQLを記述し実行します。Dr.SumにはGUIベースでSQLを実行できる「SQL Executor」というツールが用意されているのでこちらを使ってみましょう!Enterprise Managerの上部、「SQL」と書かれた青いアイコンから起動可能です。
サンプルとしてDr.Sum側に「売上データ」というデータベースを作成し、その中に「売上明細」というテーブルを作成しています。2023/4/2までのデータが入っています。
お手元で試す場合は下記ボタンからダウンロードください。また、データベースの作成方法やCSVのインポート方法については下記記事をご覧ください。
SQL Executorの画面左上のプルダウンから対象のデータベースを選択し、SQL記述欄にSQLを記述していきます。
今回は、”売上明細というテーブルに対して”、”2023/4/1以降を削除する”という内容のSQLを記述します。
- 注意!:以下のコマンドは「WHERE ~」の部分で削除する期間を絞っています。WHEREを忘れてデータを全削除しないようご注意ください!
DELETE FROM 売上明細
WHERE 日付>='2023/04/01';
入力後、左上にある緑の矢印アイコンをクリック、もしくはF5キーを押下するとSQLが実行されます。
では、うまく特定期間が削除できているか確認してみましょう。左のメニューにある「売上明細」の上で右クリック→「開く」とすると中身が確認できます。2023/4/1以降が削除できていることが確認できますね!
上記で紹介したSQLは「2023/04/01以降」という条件を直接入力しています。これだと毎月SQLを書き換える必要があるため若干手間ですね。Dr.Sumの関数を駆使して、実行した日付に合わせて年・月の情報が動的に変更されるSQLも記述可能です。
DELETE FROM 売上明細
WHERE 日付>=CONCAT(YEAR(CURRENT_DATE()),'/',MONTH(CURRENT_DATE()),'/01');
動きとしては、CURRENT_DATE関数で現在の日付を取得し、YEARとMONTH関数を用いて年と月を抽出し、CONCAT関数でそれらを文字列結合することで「yyyy/mm/01」という日付形式を構築しています。例えばこちらを2024/12/24に実行した場合は、2024/12/01以降のデータが削除されます。その他様々な関数が用意されているので、シーンに合わせて使ってみてくださいね。
INSERTを実行する
次に第二ステップのINSERTですがここでは詳しく紹介しません。インポートを行う際、モードとして「テーブルに行を追加」を選択すればOKです。サンプルデータは下記からダウンロードください。
4月分のデータを行を追加してインポートをすることで、うまく4月分だけをテーブルに反映させることができていますね!
忘れてはいけない再構築(REBUILD)
テーブル上はDELETE-INSERTによってうまく特定期間の更新ができました。しかし、Dr.Sumの内部では削除領域として残り続けてしまいます。このままDELETE-INSERTを続けると削除領域が増大してリソースの肥大化が発生したり、レコードが不連続になることによる集計パフォーマンスの低下が懸念されます。
そのため、Dr.Sum上で定期的にテーブルのREBUILD(再構築)して不要領域の削除を忘れずに行いましょう。操作はシンプルで、Enterprise Manager上から対象のテーブル上で右クリックし、[再構築]→リビルド方法を選択し[OK]をクリックするだけでOKです。
データ量やインポート頻度にもよりますが再構築(REBUILD)は毎回実行する必要はなく、月単位や半年単位で実施すればOKです。逆に、DELETE-INSERTを実施しているテーブルに対して最近集計が遅いな…と感じられる場合はこの再構築を実施してみても良いかも知れません。再構築の詳細については下記ページやマニュアルを参照ください。
さいごに
本記事では特定期間のみを洗い替えたいときによく利用されるDELETE-INSERTについて紹介しました。またその際に忘れてはいけない再構築(REBUILD)についても紹介しました。今回はGUIベースで手動実行する方法を紹介しましたが、データを消し(DELETE)追加インポートし(INSERT)再構築する(REBUILD)という各ステップはバッチコマンドとしても用意されていますので、冒頭に紹介した記事にて自動化もチャレンジしてみてくださいね!