TROCCOでデータ転送～データチェックまでを1クリックでできるように設定してみた

## はじめに
先日開催した01（zeroOne）の講演を見ていて、改めてデータの信頼性って大事だなと思いました。
TROCCOのワークフローでは、転送・加工したデータが欲しい状態になっているか確認する「**データチェック**」ができるので、これを使ってデータの信頼性を高めていきたいと思います！

## 今回のゴール
下記の3つをワークフローに組み込んで、1クリックでできるようにする

- データ転送
- データ加工
- データチェック

## データチェックって何？？
DWHに対してクエリを発行して、クエリ結果とエラー条件を突合し、条件に合致する場合に該当のタスクをエラーとする機能です。

https://documents.trocco.io/docs/workflow-data-check?highlight=%E3%83%87%E3%83%BC%E3%82%BF%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF

## 今回の想定
- APIを使用して下記の条件でデータを取得し、DWHへ転送します
1.　東京エリアの店舗のみ
2.　50件分のデータを取得する
3.　取得した日時がわかるようにする

https://webservice.recruit.co.jp/doc/hotpepper/reference.html

## データ転送（APIでデータを取得して、DWHへ送る）
TROCCOのデータ転送機能を使っていきます。
データを入れるDWHの整備やAPIの利用については過去の記事で紹介したので詳しい内容は今回は省きます！

https://qiita.com/khpkymgc/items/4af6b46a9dd0260ca0b8

https://qiita.com/khpkymgc/items/70a817ea2e8732e5a577

下記のように設定して **東京エリアの店舗** を **50件分**、**json形式** で取得するように指定します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/a4418feb-ea35-c563-0dfb-22d22cbe70d7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/7c8795e8-76de-2373-9aeb-4cd8dbeff126.png)

プレビューを見てみると、1カラムにすべての情報が入った状態でした

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/5afa5a02-e18f-1290-de62-751fac4fb899.png)

情報量がとにかく多いので、ほしい情報だけ抜き取ります
今回はカラム定義を使って指定してみました

![スクリーンショット 2024-12-18 204102.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/42dcdf51-b4ac-9980-4ea7-0c2e02ef13a6.png)

こんな感じで、指定した情報を1カラムにまとめて出力してくれました
この後加工を加えればいい感じになりそうなのでこのまま進めていきます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/79b5e124-161f-233d-49ea-c9c73c6a6aae.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/9693a165-d200-d027-f80d-d631e9893b9d.png)

APIで取得したデータには、データの取得日時が含まれなかったのでTROCCOの設定で転送日時のカラムを追加してくれるようにします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/56705167-c360-9ae6-7345-d5b8406a89af.png)


保存して、データ加工に進んでいきます

## データ加工
転送したままの状態だとすごく見辛いため、下記のような形にしたいです

現状

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/f0b9d711-9abc-e8ac-3183-dbb4604f9f72.png)

理想

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/c6c4fa7c-7605-4167-5245-4077a7bebaf0.png)

TROCCOのデータマート定義（DWHに対してクエリが発行できる機能）を設定します
TOP画面より、データマート定義の**新規追加**をクリックし、先ほどデータを転送したDWH（今回は**Snowflake**）を選択します

![スクリーンショット 2024-12-18 205625.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/11b8a69b-9395-d063-5991-5584fa102646.png)

![スクリーンショット 2024-12-18 205733.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/b5922258-69cc-9e39-8534-1b19241ff0a6.png)

設定の名前や、Snowflakeへの接続情報などを指定して下へ進むとこんな感じでクエリを書く項目があります
SELECT文だけでどうにかなる場合は**データ転送モード**、それ以外の場合は**自由記述モード**をつかいます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/79e62d1e-aee4-139c-684f-4e6ddac2a609.png)

:::note info
クエリは難しいのでChatGPTに頑張ってもらいました！
:::

これも保存して、ついにワークフローの設定に入っていきます

## ワークフローの設定
ワークフローの設定をしていきます
TOP画面より、ワークフローの**新規追加**をクリックします

![スクリーンショット 2024-12-18 211025.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/e5a122ff-6a2a-ea46-873a-22bff28ce4b2.png)

遷移先は細かい設定になるので、今回は飛ばしてさっそくここまで設定した**データ転送**の設定と**データマート定義**をワークフローに組み込んでいきます

こんな感じの画面が出てくるので、フローの一番初めに実行してほしいデータ転送を指定します

![スクリーンショット 2024-12-18 211617.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/f6866ab6-95ba-7be7-2c90-9a4dd1b287d7.png)

![スクリーンショット 2024-12-18 211743.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/2a2cdc82-ec5c-5ef6-449d-9cc2e4d711be.png)

タスクがフローに追加されました

![スクリーンショット 2024-12-18 211857.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/24b06ea8-1b01-48d3-614a-32663553c629.png)

データマート定義も同じく追加していきます

![スクリーンショット 2024-12-18 212013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/150ea8c2-2371-32ce-fb8a-df4c4e7c9924.png)

データ転送とデータマート定義をつなぎます
これでデータ転送後にデータを加工するところまで1クリックでできるようになりました！

![スクリーンショット 2024-12-18 212140.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/cd50099c-81cc-ee17-3043-521405adac3f.png)

:::note info
右上の**自動レイアウト**をクリックすると、自動でいい感じに並べ替えてくれます
:::

## データチェックを設定する
今回は、データ取得条件としている下記を満たすため3つのデータチェックを行います。

取得条件
1.　東京エリアの店舗のみ
2.　50件分のデータを取得する
3.　取得した日時がわかるようにする

データチェック
1．エリア情報のカラムに「東京」が50件ぴったり入っているか
2．店舗情報が50件ぴったりあるか
3．データ取得日時カラムにジョブ実行日時と等しいものが50件ぴったりあるか

では、データチェックの設定をしていきます
ワークフローに組み込めるタスクとしてデータチェックがあるのでクリックします

![スクリーンショット 2024-12-18 213759.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/32345c78-62d1-3a3e-35e1-deef93a88dcf.png)

クエリを書く場所とエラー条件が指定できるようになっています

![スクリーンショット 2024-12-18 213840.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/cc3dcfa5-4196-ce9a-40c5-ab597e8633ed.png)

まず、**1．エリア情報のカラムに「東京」が50件ぴったり入っているか**をチェックするため、クエリを書いてエリア情報カラムの「東京」をカウントします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/2ed01537-ab6e-d01f-c934-7a35adbd4ee3.png)

「東京」が50件に等しくない場合はエラーとなるように**エラー条件**を指定します

![スクリーンショット 2024-12-19 172054.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/03ec0dff-7fad-f485-8697-5d6d5eee972d.png)

保存すると、ワークフローにタスクとして追加されます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/68337a8f-1ee3-8a03-09fb-65db42406918.png)

同じように、**2．店舗情報が50件ぴったりあるか**チェックするクエリを書いて保存します

最後に、**3．データ取得日時カラムにジョブ実行日時と等しいものが50件ぴったりあるか**のチェックについて設定します
転送日時を毎回手動で指定するのは面倒なので**カスタム変数**を利用して設定します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/bf3b9cf3-9f3b-b317-3509-3cf911c9eca9.png)

クエリの`$day$`にタスクを実行した日付を毎回入れてくれるようにしました！

保存して全部繋げるとこんな感じになります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/63a99ab1-1804-bed1-3da4-cf1e059b044d.png)

## いざ実行
実行ボタンを押して、正常に完了するか試してみます

![スクリーンショット 2024-12-19 185453.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/4ba67d19-fcde-a59d-fd5a-6951a62f2216.png)

待っていると、すべてのタスクが正常に完了していることが確認できました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/e45a435a-9d45-6aad-5fd3-6822e402a6ba.png)

転送されたデータを見ても、すべて50件分・取得要件から外れることなく格納されていて問題ないことがわかりました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/670e1dd4-7ff2-fd56-aba1-67305cf19b75.png)

## おわりに
今回は結構設定内容が多くなりましたが、データマート定義のクエリの記述以外はGUIでの操作とかなり簡単なクエリのみで実行しているのでスムーズにできました！

スケジュール設定などを使って自動でデータを連携している場合、いざデータを使うぞ！というときになってデータの不備に気づくこともあるかもしれません
データの転送時に大事な部分はチェックするようひと手間加えておくことでこのような事態を防ぐことができます！ぜひお試しください！

この設定しようと思った当初は、何故かデータチェックのタスク1つでチェックしたい内容をすべて記述しきらないといけないと思い込んでいました...
SQL初心者すぎてどうやって書くんだろう～～～～いいやり方ないかな？？、と社内の事例など見ていたところ、 **データチェックのタスクって複数入れていいんだ！** と気づきかなりシンプルな設定にすることができました！
データチェックのタスクを複数に分けることで、どの部分でエラーが発生したかも簡単に見えるようになるのでこっちのほうが便利ですね

また、何か自分的気づきがあったら記事を書こうと思います！