初心者がAPIで取得したデータをSnowflakeに転送してみた

## はじめに
データ分析やってみたいという思い付きの元、前回はデータ分析に使う環境をセッティングしました。

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

今回は、どんな情報があればやりたい分析ができるかな、と考えて必要な情報をDWHに転送してみようと思います！

最終的には気象データとECサイトの売り上げデータから、雨の日によく売れる商品を特定したい！

## この記事のゴール
必要な情報を特定してDWHに入れる

## 今回やること
- CRUD表を作ってほしい情報について考えてみる
- APIでデータを取得して、それをDWHに転送する

## CRUD表を作ってほしい情報について考えてみる
### CRUD表とは？？
どんなデータか、誰が扱うデータか、どのように扱うデータか、を表で整理していきます。
どのように扱うデータか、は以下のようにあらわしていきます

- C（Create：データを生成する）
- R（Read：データを参照する）
- U（Update：データを更新する）
- D（Delete：データを削除する）

### CRUD表を作ってみる
実際に今回の分析に必要そうなデータをCRUD表にしてみます。

今回はどんなデータかを縦軸、誰が扱うデータかを横軸にして作成しました。

|  |気象庁  |ECサイト  |データ分析  |
|---|---|---|---|
|雨の日が特定できる情報（降水量）  |C,U  |  |R  |
|販売履歴  |  |C,U  |R  |

すごい簡単な表になりましたがこんな感じです。
気象庁やECサイトがデータを生成したり、更新したりします。
それをDWHに持ってきてデータ分析をする人が参照する、という想定です。

## APIでデータを取得して、それをDWHに転送する
次は降水量のデータを取得してみようと思います。
気象データを取得するには、気象庁のAPIが利用できそうです。
APIの実行はTROCCOのデータ転送からできます。

TROCCOでのデータ転送の設定は3STEPです。さっそく始めていきましょう！

![スクリーンショット 2024-11-18 141656.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/3a212205-1587-cce0-fb9b-589a34d76d08.png)


### ・前準備
TOP画面の新規作成から、画面の案内に沿って転送先と転送元サービスを決めていきます。

![スクリーンショット 2024-11-14 173705.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/ca58e668-a6ec-8a07-52b6-6310b2a5861d.png)

![スクリーンショット 2024-11-15 162204.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/5b4f7e38-1e72-4be7-3470-f6ca6733e1bf.png)

![スクリーンショット 2024-11-15 162524.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/aa7069c4-c077-e2ff-88ef-25eaa4231ffb.png)

今回は、転送元が **HTTP・HTTPS（API）** 、転送先が **Snowflake** になります。
**この内容で作成** を押して詳細を設定します。

![スクリーンショット 2024-11-15 162724.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/6ce836a7-a6b6-80f9-5e3b-129341ec0634.png)

### STEP1 転送元･転送先の設定
データの転送元、転送先の情報を入力していきます。

こんな画面に遷移するので、このデータ転送設定の名前などを決めます。

![スクリーンショット 2024-11-18 170604.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/dc377d44-0199-443c-206d-7d48673281d8.png)


次は転送データの取得元の情報（API）を設定していきます。

![スクリーンショット 2024-11-15 163205.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/3483b2e8-1772-9461-5658-1077a6978ba6.png)


APIも初心者なので先人が作成された記事を参考に設定を進めていきました。

https://qiita.com/e_toyoda/items/7a293313a725c4d306c0

:::note info
気象庁のAPIは個人で作成されたものもあるようなので調べると色々出てきます
:::

気象庁のAPIはJSON形式でデータを取得できるみたいですが、
**入力ファイル形式** にJSONがつくものが2つあって迷いました...。
先輩に相談した結果、今回は **JSONPath** を選ぶとよさそうとのこと。

![スクリーンショット 2024-11-15 163434.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/acef7552-ad51-3f78-5bea-ffeaf2560770.png)

JSONPathとは？？？となったので下記を参考にふわっと理解しました。
JSON形式のファイルに対し、JSONPathで階層や条件を指定するとほしい情報だけ抽出できる、ということみたいです。

https://qiita.com/takkii1010/items/0ce1c834d3a73496ccef

ちなみに、JSONPathで降水量の情報のみ取得できるか試したんですがうまくいかなかったので断念。。。今回は **$** を指定してすべての情報を取得することで対応しました。

<br>

転送元の設定が終わったら画面下部に進んで、転送先の設定に移ります。
前回（ https://qiita.com/khpkymgc/items/4af6b46a9dd0260ca0b8 ）作った接続情報やSnowflakeのウェアハウス、データベース、スキーマをプルダウンから選んでいきます。

![スクリーンショット 2024-11-15 164651.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/ff395d1d-83d9-5f0e-b23c-043520f414ae.png)

テーブルは前回作成していないので、自動的に生成してもらいます。
東京の降水量のデータを入れるので、わかりやすく **tokyo_precipitation_2024111003** と名付けました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/ecb5fc78-b108-d153-44c0-7c924aa87158.png)

全部の設定が終わったら画面下部から **次のSTEPへ** を選択します。

![スクリーンショット 2024-11-18 141419.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/8d4b1979-24ca-4a32-6ecc-d24a6d61992a.png)

<br>

### STEP2 データプレビュー･詳細設定
転送されるデータのプレビューを確認できます。

詳細設定から転送するデータの絞り込みやマスキングなども行えますが、今回は不要なので **確認画面へ** からSTEP3へ進みます。

![スクリーンショット 2024-11-18 142847.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/fb37c820-e035-9776-981e-56d80e348fce.png)

<br>

### STEP3 確認･適用
設定内容を確認して、問題なければ設定を保存していきます。

遷移先の画面では、YAMLという形式で設定内容を確認できます。
YAML形式も初めて見たので、 ？？ という感じでしたが、ここまでで設定した値を思い出しながら眺めていると、「あの設定がこの辺に書かれているんだな～」とぼんやりわかるようになりました。
設定内容に問題がなさそうであれば、 **保存して適用** を押して完了です！

![スクリーンショット 2024-11-18 143831.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/6d430487-a991-df2e-2d23-eb79239d98b0.png)

<br>

### 実行してみる
設定を実行して、実際にデータの取得と転送を行います。

画面右上に出てるボタンをポチっとして、ジョブの完了を待ちます。

![スクリーンショット 2024-11-18 144827.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/9d461abd-6b30-2278-e8c5-7ae4b78c3dd2.png)

状況はほぼリアルタイムで確認することができます。

![スクリーンショット 2024-11-18 145142.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/b7a157e3-ee30-c9e5-0f5f-58d7ffc7bae0.png)

ステータスが **SUCCESS** になったら完了です！

![スクリーンショット 2024-11-18 145213.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/5a045e2b-08eb-67ac-89da-9aab588c21ff.png)

<br>

### Snowflake側で転送されたデータを見てみる
転送先のSnowflakeで、データがちゃんと転送されているか確認してみます。

ワークシートから「SELECT文」を発行します。

![スクリーンショット 2024-11-13 191040.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/bc96f75b-fbf9-ad47-11c8-af0888b60d82.png)

SELECT文を書いて、実行を押します。
![スクリーンショット 2024-11-18 155121.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/4a63cb04-60ef-a8fd-f98e-c5692a407267.png)


結果はこんな感じで見れました！
カラムを選択すると、右側にJSONをきれいにして見せてくれて嬉しいですね

![スクリーンショット 2024-11-18 150111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/9f0fe9ec-9742-14ce-3f78-f36698c8c3ee.png)

<br>

これでAPIでの情報の取得と、DWHへのデータ転送は完了です！

## おわりに
今回の想定だと扱うデータの種類が少ないのでCRUD表はすごく簡単なものになりましたが、種類が増えると何のデータだっけ、どこからとってきてるんだっけ、誰が使ってるんだっけ、と管理が大変になっていくと思います。
可視化しておくことで、ちょっと迷ったときにすぐ確認できる安心感が手に入るので作成してみました。

また、APIは「サーバー上でコマンドコピペ入力からの実行」しかやったことがなかったので、挑戦してみました。
ちゃんとできるか不安でしたが意外とどうにかなりました！GUIでの設定だと、必須項目以外は一旦触らなくてよいので利用のハードルがかなり下がると個人的に思っています。

ただ、今回の「入力ファイル形式（JSONPathを選んだところ）」のように知らないものが必須項目にあると詰みがちなので都度勉強が必要だな～、と感じました。

転送先のSnowflakeの設定に至ってはほとんどプルダウンで選択するだけなので本当に簡単でした。

次は、今回転送したデータをきれいにしたり必要な情報だけのテーブルを作ったりできないか試したり、実際に分析をしてみようと思います！