3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Dr.Sum 新機能「DS Script」でテーブルをローテーションする

Last updated at Posted at 2020-06-19

はじめに

Dr.Sum は大量データを高速集計可能なデータベースです。
ライセンスによって1テーブルあたりの格納可能なデータ件数が異なるため、
今回は1テーブルのデータ件数の上限に近づくと自動でテーブルをローテーションする仕組みを作成します。

データが継続的に発生し、大量のデータを蓄積するような運用の場合、格納するテーブルを交代しながらデータを格納することができるためインポートの運用を止めずに安全にローテーションすることができます。

テーブルローテーションのイメージは以下となります。
※画像は公式のマニュアルを参照。
image.png

本記事について

記載する記事の情報は個人的なものです。各製品に関する公式な情報は、会社 HP・マニュアル等を参照してください。

参考記事

目次

  1. Dr.Sum とは

  2. DS Script とは

  3. DS Scriptでテーブルローテーションしてみる

  4. まとめ

Dr.Sum とは

Dr.Sum は、経営や営業などの業務の現場で、企業内の基幹データベースの情報を高速に集計できるBIツールです。

image.png

※キャプチャはウイングアーク1st社のホームページより抜粋
https://www.wingarc.com/product/dr_sum/

DS Script とは

DS Script とは、データ準備作業で実施するバッチ処理やデータ加工処理(前処理)を支援するためのスクリプト言語のこと。
開発環境も用意されており今まで煩雑になりやすかったバッチファイルなどの実行ファイル、SQL文、Dr.Sumが提供するコマンドを1つのスクリプトとして定義できるらしい。

下図のようなIDEが用意されておりブロックをドラックアンドドロップで配置することでスクリプトを作成することが可能。
ブロックモードとテキストモードの互換性があるため結構使いやすい
image.png

DS Scriptでテーブルローテーションしてみる

(1)データの用意

今回はサンプルとしてtable1という100万件のデータが格納されたテーブルを用意しました。

image.png

(2)DS Script でコマンドブロックを配置

今回はtable1のデータ件数によって処理を分岐させるため以下のような処理を行いました。

  • 処理1
    対象となるDBへ接続
    使用したコマンドブロック ➡ [データベース]-[CONNECT]

  • 処理2
    対象のテーブル件数をカウントし変数へ格納
    使用したコマンドブロック ➡ [変数]-[SET_FROM_QUERY]

  • 処理3
    CASE式を利用し条件分岐
    使用したコマンドブロック ➡ [制御フロー]-[CASE]

  • 処理4
    countが100万件であればローテーションのSQLを実行
    使用したコマンドブロック ➡ [データベース]-[SQL]

とりあえずコマンドブロックを配置してみるとこうなる
image.png

構文とかはよくわからないので処理フローだけコマンドブロックでささっと作ってしまって
あとはテキストモードで引数や呼び出す関数だけ変えることができるのはとても便利だと感じた

(3)テキストモードに切り替えてスクリプトの作成

処理のフローはコマンドブロックで簡単に作成できたため、SQLとそれぞれのコマンドブロックの引数を書き換えていく

 処理1
 接続先となるデータベースを選択

CONNECT("TEST_dhn") {
}

 処理2
 レコード数を取得し変数へ格納

SET_FROM_QUERY() {
    ($count_table)
        = select count(*) from table1;
}

 処理3+処理4
 テーブル件数に応じて処理を分岐してローテーションする
 今回は処理をわかりやすくするためテーブル件数が100万件以上のときテーブルローテーションするように設定

CASE {
    WHEN ($count_table >= 1000000) {
        SQL($_SQL_AUTO_COMMIT_ON) {
            ROTATE TABLE table1;
        }
    }
}

(4)作成したスクリプトを実行してみる

テスト実行を行うと以下のようにデバッグログが出力されスクリプトが正しく動作したことが確認できる。
image.png

(5)テーブルの確認

最後にテーブルを確認する。
table1_yyyyMMddHHmm が新規で作成されておりオリジナルのテーブル件数が0となっていたため
DS Scriptを利用してテーブルがローテーションされていることが確認できた

image.png

まとめ

以上でDS Scriptを実行してテーブルをローテーションさせることができました。
作成したスクリプトを定期的に実行することでデータ件数による対応を自動化することができる。
データが継続的に発生し、大量のデータを蓄積するような設備機器のデータやIoT関連のデータにとても有効です。

Dr.SumにはIoTのデータをリアルタイムに受け取ることができるFunnelという機能も用意されているのでこれら組み合わせることでデータ収集から運用までの仕組みを簡単に構築できるかもしれません。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?