追加で保存したデータの最新版を使う。

# はじめに
Domoを使い始めて、二ヶ月目。データをいろいろ集めてはいますが、日々、精進しております。

今回は、とあるK○t○neのデータを毎日最新版として取り込んでいますが、今後、変更箇所を見ていくこともあると思い、
取り込んだデータの履歴を全て取り込んでいます。

ですが、使うのは最新のデータだけ！

最新のデータだけ使えるようにするETLを紹介します。

# 対象者
ETL初心者

# 使ったデータ
今回、使ったデータは、こんな感じです。追加なので、これを数回取り込んで使ってみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798145/3fca8cd0-7de8-97ce-b009-f4a15694a595.png)

# データを追加で取り込むとは？
そもそもデータを追加で取り込むというのは、どういうことか！？

Domoには、データを取り込むときのバターンとして、「置き換え」と「追加」というモードがあリます。
「置き換え」とは、今入っているデータを全て削除して、データを置き換えます。
そのため、前のデータは無くなります。
それに対して「追加」は、前のデータは残しながら、データを追加で保存しておきます。

その設定は、DataSetを作るときに、アップデートモードというものがあり、
更新方法を、「追加」にすると、そのような動きになります。
![M_二次判定結果_PROD_Higashi_-_Domo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798145/243fa314-ab9e-1034-c544-99debb36d84e.png)

## データの追加の時のデータ構造
追加で保存されると、データが混ざってしまわないか、心配になりますよね。
そこはご心配なく！

追加でデータを取り込んだときには、【\_BATCH_ID_】、【\_BATCH_LAST_RUN_】の列が自動的に追加されます。

【\_BATCH_ID_】には、取り込んだ時のグループ番号が入ります。初めて取り込んだら１、そこから取り込むたびに＋１された数値が入ります。
【\_BATCH_LAST_RUN_】には、取り込んだ時の時間が入ります。タイムスタンプ型なので秒まで格納されますが、取り込む時間がすごく掛かっても、同じグループ番号の時間は同じものが入るようです。

![M_追加データ_RAW_higashi_-_Domo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798145/5a1aca82-04cc-6257-4643-fa0689f0d7a8.png)

ただデータが、どんどん積み上がっていくので、このままグラフにするとかは、加工するのは難しい状態です。

# 最新のデータだけ抽出する。
とりあえず使うデータは最新のデータだけでいいので、【\_BATCH_LAST_RUN_】だと一番新しい時間、【\_BATCH_ID_】だと一番大きいものが対象になります。

ではETLで作っていきます。

## 完成したETLはコチラ！
まずは、こんな感じでいけます。ひとつづつ説明していきます。

![FL_M_最新データ_RAW_higashi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798145/06f6b545-cf9f-ec05-1689-43d6b266344d.png)

## １.定数追加します。
はじめに【tmp_key】という列で、値は１を追加します。
これ見たら「何やっているの？」っという気持ちになりますが、最後までお付き合いください。m(_ _)m

![FL_M_最新データ_RAW_higashi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798145/9a8bb0ec-1cde-8b47-6cc0-e53eba9131bd.png)

## ２.分岐して、グループ化
グループ化するキーは【tmp_key】と設定
新しい集計列には【batch_max】とつけます。
新しい列は【\_BATCH_ID_】の「最大」を入れることにします。

![FL_M_最新データ_RAW_higashi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798145/e2e54b01-873f-79d0-cb7e-4de0a98633b9.png)

出来上がったデータをプレビューで見てみた。
そりゃそうだ！
【tmp_key】に１入れて、それでグルーピングしたら、一行になるよ！
でも【\_BATCH_ID_】の最大の数値を手に入れることができた！

![FL_M_最新データ_RAW_higashi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798145/25e153c8-91bf-e553-53a7-99dc56267163.png)

## ３.【\_BATCH_ID_】の最大の数値を結合する。
「結合」を使います。
JOINタイプを「左外側」に設定して、元のデータを基本にしていきます。
結合条件は追加した【tmp_key】。。。。。１が入っているんだよなぁ。
出力列については【tmp_key】が重複しているので、どっちかを消します。

これでどうなるんだろう。。。。

![FL_M_最新データ_RAW_higashi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798145/60c5006e-c748-eb70-d39c-25e4ba664225.png)

![FL_M_最新データ_RAW_higashi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798145/470812b6-dd32-74df-16fc-3cf4b924366c.png)

データを見てみると、全ての行に【batch_max】の値が追加されています。

そっか！！！！

![FL_M_最新データ_RAW_higashi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798145/86b99b5d-1527-da2b-aee5-211d6e655d3e.png)

## 4.行フィルターで、【\_BATCH_ID_】の最大の数値だけ残す。
全ての列に【\_BATCH_ID_】の最大の数値である【batch_max】が入っています。
【\_BATCH_ID_】と【batch_max】が同じ行だけ残せば、最新のデータだけにすることができます。

「行をフィルター」を使って、
フィルターをかける列は、【\_BATCH_ID_】
比較タイプは、「等しい」
比較する対象は、「列からの値」で【batch_max】を指定します。

![FL_M_最新データ_RAW_higashi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798145/d61bbd20-6e4c-f649-a41e-dae36a058b4a.png)

## 5.出力DataSetを使う。
出力DataSetを使って、最新のデータだけになったDataSetを使えることになります。
列を選択を使って、【tmp_key】【batch_max】などは削除してもらっても大丈夫ですが、省略します。


# まとめ

スクリプト使ったりすれば、もっとシンプルにできるかもしれません。
もっと良い方法があれば、教えてください！

今回もお疲れ様でした。