DataSpider（Dr.Sum Connect）をつかった月初・月末の取得方法【ETLならだいたい同じ】

#最初に
###Dr.Sum とは

https://www.wingarc.com/product/dr_sum/

https://www.wingarc.com/product/dr_sum/ds20th-anniversary/index.html

<details><summary>【詳細はこちら】**Dr.Sum**は10億件のデータを1秒台で集計できる超高速データベースツールです。</summary><div>
高速のディスク集計と、ハイブリッドで使える超高速のメモリ集計をつかいながら、最適な運用コストでのパフォーマンスを実現します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/e8924330-f537-38f2-e276-ecdd0d96341d.png)

また、Dr.Sumは集計速度だけでなく、データベース構築経験の少ない方でもGUI操作でDBをつくったり、データを取り込んだりできます。
データベース周りにそこまで強くないぼくのような人間でも、気軽にデータハンドリングができるところが素敵です。

さて、Dr.Sumという製品は単純にデータベースがあるだけではなく、様々なオプション製品を加えることで、多様な使い方が可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/12be6f13-7354-f58a-773c-b43934d30666.png)

詳しくは公式ホームページをご参照いただきたいのですが、
✅ データを抜いて
✅ データを加工して
✅ データを貯めて
✅ データを高速集計する
ことが可能となります。

[製品の一覧はこちら](https://www.wingarc.com/product/dr_sum/lineup/index.html)

</div></details>


###Dr.Sum Connect とは

https://www.wingarc.com/product/dr_sum/lineup/connect.html

<details><summary>【詳細はこちら】**Dr.Sum Connect**はデータを抽出・加工・取り込みをするETLツールです。</summary><div>


下図のように様々な環境からデータを取得して、加工して、Dr.Sumに投げ込むことのできるツールです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/f7ac2d53-4b95-063c-27af-2fe4a07da4de.png)

エラーになったらログを吐いたり、メールを飛ばしたり、だいたいGUIで操作できるので、プログラムを書かずとも連携の仕組みを作ることができます。

基本的なスクリプトのつくり方についてはこちらの解説記事をお読みください。
[Dr.Sum ConnectをつかったETLのスクリプトのつくり方](https://qiita.com/Ryo---san/items/5c952ed15a6adb576547)

</div></details>

Dr.Sum ConnectはDataSpiderのOEM製品です。
以降の記事ではConnectと書きます。


さて、今回はConnectで覚えておくと便利なマッピングの小技について解説をします。

#マッピングとはなにか

マッピングはETLツールの代表的な機能である、データの加工の部分のことを指します。
Map、Mapper、Mappingなどツールによっていろいろな呼び方がされますね。

たとえば基幹システムのDBから、Dr.Sumにデータを取り込む過程で、基幹DBでは西暦（2021年）、月（4月）、日（1日）という項目を持っているところを
マッピングをすることで年月日（2021/04/01）として、Dr.Sumに入れることが可能です。
この場合、"年"、"月"、"日"という文字列を抜いて、"/"を入れて、"4"だったら"04"とするような加工をしています。


今回紹介する内容はマッピングを使って、スクリプト変数で加工した日付を持つ方法となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/2dff09e6-009d-d2a5-bfa1-132808ccd70b.png)

スクリプトをつくるにあたり、SQLのパラメーターにつかったり、ログを出すときにつかったりと、**日付を変数で持つ**ことは重要です。

#月初・月末をとってみる
今回は、月初を翌月スタート日、月末を当月最終日として取得しています。
本日が2021/06/22であれば、翌月のスタートは2021/07/01、当月の最終日は2021/06/30となります。
月初は簡単ですが、月末は30日だったり、31日だったり、29日だったりと月によって異なるので、注意が必要ですね。

さぁ、見ていきましょう。

##月初
実は上で出した画像に答えがのっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/d4a669ef-d6f3-38f2-ed17-e3d611ab4bcc.png)

赤線のルートで月初（翌月スタート日）を出しています。
何をやっているかというと、
① [現在日時]コンポーネントで、現在日時を取得（ex. 2021/06/22）
② [月を増減]コンポーネントで、1を足して、翌月する（ex. 2021/07/22）
③ [日の設定]コンポーネントで、日の部分を"01"に変換する（ex. 2021/07/01）
④ [日のフォーマッティング]コンポーネントで、フォーマットを整える（ex. 2021/07/01）

この解説だと④がいらないように見えますが、実際は③までは時分秒がついていたりするので、整えが必要なのですね。
加工し終えたものをスクリプト変数の[翌月スタート日]に格納します。

月初の取得はこれでOKです。

##月末
さて、当月最終日を取得します。
こちらは月初の加工にもう一手間加える必要があります。

緑の線のところが追加要素ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/f755ff5e-e601-0c6c-3276-8e72c148a52d.png)

① [現在日時]コンポーネントで、現在日時を取得（ex. 2021/06/22）
② [月を増減]コンポーネントで、1を足して、翌月する（ex. 2021/07/22）
③ [日の設定]コンポーネントで、日の部分を"01"に変換する（ex. 2021/07/01）
④ [日の増減]コンポーネントで、1を引いて、先月末にする（ex. 2021/06/30）
⑤ [日のフォーマッティング]コンポーネントで、フォーマットを整える（ex. 2021/06/30）

④のところが追加要素です。
一度、翌月初を出してから、1日引いて、当月末を出しています。


こういった細かな技の積み重ねで、変数を作り込んでいくところが、ETLツールの奥ゆかしいところですね。


#最後に
いかがだったでしょうか。

スクリプトの実行時にこんな変数取得ロジックを入れてみると、スクリプト内で呼び出すだけですぐ使えるので、いろいろお得です。
慣れれば慣れるほど、ETLツールの利便性が向上します。

ぜひ様々な変数の取得にチャレンジしてみてください。