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

BI技術者の雑記

データドリブンを実現するデータ基盤ソリューション「Dr.Sum」!
「導入してはみたものの使いこなせていない」「これから使ってみたいけど分からない機能がある」…
そんなお悩みも少なくないと思います。

こうしたお悩みや疑問について、我々システムエグゼのBI部門が、少しでもお手伝いになるような情報を発信していけたらと思います!
今回は、Dr.Sum Ver.5.5で強化された機能の一つである、コマンド「ROTATE TABLE」をご紹介します。

1.テーブルのローテーションとは

テーブルのローテーションとは、Dr.Sumがテーブルに格納できるレコード数の上限に達しないように、テーブルの格納データを退避またはコピーする事です。

Dr.Sumの各エディションは、ライセンスにより、テーブルとインメモリテーブルのデータ格納件数が異なります。(ウイングアーク1st社公式ページより)
もし、Dr.Sumのライセンスが追加・変更できない場合、テーブルのレコード件数を減らすか、または別のテーブルにデータを移行する必要があります。

  製品名 テーブルベース件数 インメモリ
サーバー数 格納件数
Mモデル Dr.Sum M100 ※1 2,000万件
Dr.Sum M500 1億件 1 1億件
Dr.Sum M2000 4億件 1 4億件
Gモデル Dr.Sum G5 20億件 1 50億件
Dr.Sum G10 20億件 1 100億件

※1 Dr.Sum M100では、インメモリオプション搭載なし

今回は、Dr.Sum Ver.5.5の新機能DS Scriptで、テーブルをローテーションします。

2.テーブルのローテーションコマンド

従来、データ件数の上限に達しないよう、テーブルの格納データを退避またはコピーする場合は「テーブルのリネーム」と「テーブルの新規作成」をそれぞれ実施する必要がありました。

be08_01.png

Dr.Sum Ver.5.5で強化された機能として、コマンド「ROTATE TABLE」を利用することで、データベースの運用を止めずに、テーブルを交代しながら、データを格納させる事が可能となります。
また、テーブルのローテーションは、インメモリテーブルに対しても実施できます。

「ROTATE TABLE」のSQLコマンドの構文は以下となります。

ROTATE TABLE  [TO _yyyyMMddHHmm] [MODE COPY]

Dr.Sumのテーブルのローテーションには、以下2つのモードがあります。

①ローテーションモード
データを格納していたテーブルをリネームし、元テーブル名で新規作成したテーブルへのデータ格納を継続しながらローテーションします。

例:元テーブル(Sample)を交代しながら、データを格納します。
・ローテーションモードの実行例

ROTATE TABLE Sample TO Sample_202011121300;

 ⇩

Ⅰ Sample_202011121300(元テーブルのデータを格納)
Ⅱ Sample(元テーブルの名前で自動生成、空状態)
→新データを格納し、次の元テーブルになります。

be08_02.png

②コピーモード
データを格納しているテーブルを複製(リネーム)し、ベースとなるテーブルへのデータの格納を継続しながら、テーブルをローテーションします。
※コピーモードを利用したい場合、SQLコマンドの最後に「MODE COPY」という記載を追加してください。

例:元テーブル(Sample)を交代しながら、データを格納します。
・コピーモードの実行例:

ROTATE TABLE Sample TO Sample_202011121300 MODE COPY;

 ⇩

Ⅰ Sample_202011121300(元テーブルをコピーし、リネームされる)
Ⅱ Sample(新データを格納継続し、次の元テーブルになる)

be08_03.png

3.DS Script とは(Dr.Sum Ver.5.5マニュアルより引用 )

DS Scriptは、Dr.Sum Ver.5.5の新機能で、データ準備作業で実施するバッチ処理やデータ加工処理(前処理)を支援するためのスクリプト言語です。

その特長は、主に3つあります。

  1. バッチ処理支援
  2. データ加工の高速化
  3. 開発支援

4.DS Scriptでテーブルをローテーションする

それでは、DS Scriptを使ってテーブルをローテーションしてみましょう。
テーブルのローテーションが必要となるような具体的な状況を想定してみます。

①想定シナリオ

各学校の卒業者進路状況というデータが、毎年継続的に発生し、蓄積されています。

EXE大学の管理者は、以下の事を考えています。
Ⅰ 入学日付ごとに、現時点から5年以内のデータを格納するテーブルを自動でローテーションしたい。
Ⅱ インポートの運用を止めず、安全にテーブルをローテーションすることが望ましい。

上記の状況を踏まえ、DS Scriptでテーブルをローテーションする処理を作りましょう。
処理の内容は、以下の通りです。
Ⅰ 卒業者進路状況データをコピーモードでローテーションする。
Ⅱ ローテーションした後、元テーブルの5年以上前のデータを、別途DELETE文を用いて削除する。

②データ準備

ローテーションの動作を確認するために、入学日付が2015/4/1~2020/4/1となる、6年分の卒業生データを6,000件用意しました。

be08_04.png

③Script Editorを起動

「Enterprise Manager」から「Script Editor」を起動します。

be08_05.png

④スクリプトを作成

ブロックモードでは、コマンドブロックで以下の処理を配置します。
処理Ⅰ:対象となるDBへ接続します。
使用したコマンドブロック:[データベース]-[CONNECT]

処理Ⅱ:対象のテーブルをコピーモードでローテーションします。
使用したコマンドブロック:[データベース]-[SQL]

処理Ⅲ:ローテーション後の元テーブルに対して、データ削除の条件を設定します。
(ローテーションした後に行うデータ削除の条件:実行時点の年より5年以上前のデータを削除)
使用したコマンドブロック:[データベース]-[SQL]

be08_06.png

[テキストモード]タグを選択すると、スクリプト全体を確認できます。
また、スクリプト内容をコピー&ペーストで修正できる点が非常に便利です。

be08_07.png

⑤スクリプトを実行

スクリプトタブの実行ボタンをクリックした後、ログが表示されます。
エラーが発生する場合は、Script Editorで出力されたログを確認すると、エラーを素早く特定できます。
また、「解析」ボタンで、実行前にスクリプトの構文をチェックできます。

be08_08.png

⑥テーブルを確認

DS Scriptを利用して、テーブル「卒業データtest」がローテーションされていることを確認しましょう。

Ⅰ テーブル「卒業データtest_1」の確認:
・テーブル「卒業データtest_1」は、元テーブル「卒業データtest」が指定された名前でリネームされました。

be08_09.png

・ローテーション後のテーブル「卒業データtest_1」は、元テーブル「卒業データtest」をコピーしたため、データ件数が元テーブルと同じです。

be08_10.png

Ⅱ テーブル「卒業データtest」の確認:
・テーブル「卒業データtest」が元テーブルで、ローテーションした実行時点の年より5年以上前のデータが削除されたため、2016年度~2020年度のデータが残されています。

be08_11.png

5.おわりに

最後にDS Scriptを用いたテーブルローテーションのメリットを以下にまとめます。

  • 従来のように「テーブルのリネーム」と「テーブルの新規作成」をそれぞれ実施する必要がなく、それらを同時に実現できます。
  • 複雑なテーブルのローテーションであっても、DS Scriptを利用して簡単に実現できます。
  • テーブルの上限件数を超過しないよう自動的な制御が実現可能です。

最後までお読みいただきありがとうございました。

BI_banner01.png