はじめに
Domoを使い始めて、二ヶ月目。データをいろいろ集めてはいますが、日々、精進しております。
今回は、とあるK○t○neのデータを毎日最新版として取り込んでいますが、今後、変更箇所を見ていくこともあると思い、
取り込んだデータの履歴を全て取り込んでいます。
ですが、使うのは最新のデータだけ!
最新のデータだけ使えるようにするETLを紹介します。
対象者
ETL初心者
使ったデータ
今回、使ったデータは、こんな感じです。追加なので、これを数回取り込んで使ってみました。
データを追加で取り込むとは?
そもそもデータを追加で取り込むというのは、どういうことか!?
Domoには、データを取り込むときのバターンとして、「置き換え」と「追加」というモードがあリます。
「置き換え」とは、今入っているデータを全て削除して、データを置き換えます。
そのため、前のデータは無くなります。
それに対して「追加」は、前のデータは残しながら、データを追加で保存しておきます。
その設定は、DataSetを作るときに、アップデートモードというものがあり、
更新方法を、「追加」にすると、そのような動きになります。
データの追加の時のデータ構造
追加で保存されると、データが混ざってしまわないか、心配になりますよね。
そこはご心配なく!
追加でデータを取り込んだときには、【_BATCH_ID_】、【_BATCH_LAST_RUN_】の列が自動的に追加されます。
【_BATCH_ID_】には、取り込んだ時のグループ番号が入ります。初めて取り込んだら1、そこから取り込むたびに+1された数値が入ります。
【_BATCH_LAST_RUN_】には、取り込んだ時の時間が入ります。タイムスタンプ型なので秒まで格納されますが、取り込む時間がすごく掛かっても、同じグループ番号の時間は同じものが入るようです。
ただデータが、どんどん積み上がっていくので、このままグラフにするとかは、加工するのは難しい状態です。
最新のデータだけ抽出する。
とりあえず使うデータは最新のデータだけでいいので、【_BATCH_LAST_RUN_】だと一番新しい時間、【_BATCH_ID_】だと一番大きいものが対象になります。
ではETLで作っていきます。
完成したETLはコチラ!
まずは、こんな感じでいけます。ひとつづつ説明していきます。
1.定数追加します。
はじめに【tmp_key】という列で、値は1を追加します。
これ見たら「何やっているの?」っという気持ちになりますが、最後までお付き合いください。m(_ _)m
2.分岐して、グループ化
グループ化するキーは【tmp_key】と設定
新しい集計列には【batch_max】とつけます。
新しい列は【_BATCH_ID_】の「最大」を入れることにします。
出来上がったデータをプレビューで見てみた。
そりゃそうだ!
【tmp_key】に1入れて、それでグルーピングしたら、一行になるよ!
でも【_BATCH_ID_】の最大の数値を手に入れることができた!
3.【_BATCH_ID_】の最大の数値を結合する。
「結合」を使います。
JOINタイプを「左外側」に設定して、元のデータを基本にしていきます。
結合条件は追加した【tmp_key】。。。。。1が入っているんだよなぁ。
出力列については【tmp_key】が重複しているので、どっちかを消します。
これでどうなるんだろう。。。。
データを見てみると、全ての行に【batch_max】の値が追加されています。
そっか!!!!
4.行フィルターで、【_BATCH_ID_】の最大の数値だけ残す。
全ての列に【_BATCH_ID_】の最大の数値である【batch_max】が入っています。
【_BATCH_ID_】と【batch_max】が同じ行だけ残せば、最新のデータだけにすることができます。
「行をフィルター」を使って、
フィルターをかける列は、【_BATCH_ID_】
比較タイプは、「等しい」
比較する対象は、「列からの値」で【batch_max】を指定します。
5.出力DataSetを使う。
出力DataSetを使って、最新のデータだけになったDataSetを使えることになります。
列を選択を使って、【tmp_key】【batch_max】などは削除してもらっても大丈夫ですが、省略します。
まとめ
スクリプト使ったりすれば、もっとシンプルにできるかもしれません。
もっと良い方法があれば、教えてください!
今回もお疲れ様でした。