TECH BLOG

MENU

オンプレクラウド

Dr.Sum

Dr.Sum

当月分や当年分のみ更新したい場合など、特定期間のみを洗い替えたいときによく利用されるDELETE-INSERTについて紹介します。Dr.Sumの既存のテーブルに対してデータをインポートする方法には、オプション含め3つあります。

  1. テーブルの中身を削除してインポート(全件洗い替え)
  2. テーブルに行を追加してインポート
  3. テーブルに設定されたキー項目の有無に応じて更新・追加(差分更新)

一方、当月の月初~当日(もしくは前日)までの売上明細が基幹システムから毎日出力されるような場合、1や2の方法は勿論、3もユニークなキー項目がないためうまく更新分を反映できません。

こうした場合、多くのシーンで利用される「DELETE-INSERT」という方法について紹介していきます。本記事ではDELETE-INSERTの手順や内容について理解を深めてもらうため、GUI操作をベースに”手動で”実行する方法を紹介します。バッチコマンドを使った自動化については下記をご覧ください。

 

 

DELETE-INSERTの仕組み

DELETE-INSERTは冒頭の例に挙げたように、キー項目の存在しないトランザクションデータ(売上明細など)に対して特定の期間のみを洗い替えるといったシーンでよく使われる方法です。とはいえ手法としてはすごく簡単で期間をDELETEした後に行を追加する形でインポート(INSERT)すればOKです。図で表現すると以下のようになります。

  1. DELETE
  2. 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を記述します。

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以降のデータが削除されます。その他様々な関数が用意されているので、シーンに合わせて使ってみてくださいね。

Dr.Sumマニュアル:第6章 関数

 

INSERTを実行する

次に第二ステップのINSERTですがここでは詳しく紹介しません。インポートを行う際、モードとして「テーブルに行を追加」を選択すればOKです。サンプルデータは下記からダウンロードください。

4月分のデータを行を追加してインポートをすることで、うまく4月分だけをテーブルに反映させることができていますね!

忘れてはいけない再構築(REBUILD)

テーブル上はDELETE-INSERTによってうまく特定期間の更新ができました。しかし、Dr.Sumの内部では削除領域として残り続けてしまいます。このままDELETE-INSERTを続けると削除領域が増大してリソースの肥大化が発生したり、レコードが不連続になることによる集計パフォーマンスの低下が懸念されます。

そのため、Dr.Sum上で定期的にテーブルのREBUILD(再構築)して不要領域の削除を忘れずに行いましょう。操作はシンプルで、Enterprise Manager上から対象のテーブル上で右クリックし、[再構築]→リビルド方法を選択し[OK]をクリックするだけでOKです。

データ量やインポート頻度にもよりますが再構築(REBUILD)は毎回実行する必要はなく、月単位や半年単位で実施すればOKです。逆に、DELETE-INSERTを実施しているテーブルに対して最近集計が遅いな…と感じられる場合はこの再構築を実施してみても良いかも知れません。再構築の詳細については下記ページやマニュアルを参照ください。

 

Dr.Sumマニュアル:2-3-9 テーブルを再構築する
Dr.Sumマニュアル:[テーブルの再構築] 画面

 

さいごに

本記事では特定期間のみを洗い替えたいときによく利用されるDELETE-INSERTについて紹介しました。またその際に忘れてはいけない再構築(REBUILD)についても紹介しました。今回はGUIベースで手動実行する方法を紹介しましたが、データを消し(DELETE)追加インポートし(INSERT)再構築する(REBUILD)という各ステップはバッチコマンドとしても用意されていますので、冒頭に紹介した記事にて自動化もチャレンジしてみてくださいね!

この記事にリアクションしてみませんか?

  • 分かりやすい (0)
  • 問題が解決した (0)
評価いただいてありがとうございます!
プロフィールへ

宇根 昌和

新卒でウイングアーク1stへ入社、プリセールス活動を行っています。Pythonをベースに様々なツールからデータをDr.Sumへ集約しMotionBoardで可視化する仕組みを作ったり、Web APIを使ったデータ蓄積ノウハウをテーマにイベント登壇したりしています。Dr.Sum及びMotionBoardを中心とした役立つ情報を発信していきます!

Related article

Related article関連記事

Pick up

Pick upおすすめ記事

【まとめ】SVFCloud帳票をinvoiceAgentに連携する方法

  • #帳票作成・出力
  • #システム連携
  • #電帳法
  • #文書定義
  • #処理定義

2024.04.18

SVF

Dr.Sum Copilotをインストールしてみた【OpenAI】

  • #Copilot

2024.04.05

Dr.Sum

特定の文字列で分割して階層構造をつくりたい!~DS Scriptで分割する~1

  • #データ加工
  • #DS Script

2023.07.17

Dr.Sum

Ranking

Rankingランキング

1

Excelのデータを加工したい。~変換(横持ち⇔縦持ち)について~

  • #データ取り込み
  • #データ加工

2021.01.19

Dr.Sum

2

【Excelの取り込み】データベースにExcelデータをインポートしよ…

  • #データ取り込み

2020.08.14

Dr.Sum

3

Dr.Sum Copilotをインストールしてみた【OpenAI】

  • #Copilot

2024.04.05

Dr.Sum

Info

Information

ウイングアーク1stからのお知らせ