初心者がデータ分析できるように環境を作ってみた

## はじめに
データ分析できるようになりたいな～ということで実際にデータ分析ができる環境を作ってみようと思いました。
DWHって何？というところから勉強し始めたばかりなのでとっても初心者です。

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

## この記事のゴール
情報を収集したときにデータが分析できる環境をつくる


## 今回やること
- DWH（Snowflake）の環境を整える
- ETLツール（TROCCO）の環境を整える


## DWH（Snowflake）の環境を整える
Snowflakeで必要な設定は大体2つです。
- ウェアハウス、データベース、スキーマの準備
- 使用するユーザに権限を付与する

### 1.ウェアハウス、データベース、スキーマの準備
TROCCOを利用してSnowflakeにデータを転送する際、ウェアハウス、データベース、スキーマはSnowflake側であらかじめ用意する必要があります。
- ウェアハウスやスキーマはデフォルトで作成されるもので良さそうなのでデータベースのみ作成していきます
- Snowflakeでデータベースを作るには権限が必要になります。
  - `SYSADMIN` のロールであれば作成できます。

権限を持っているユーザでログインすると、
左下のメニューの **Switch Role** から権限を切り替えられます！

![スクリーンショット 2024-11-13 151145.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/e2cb19bb-09dd-032a-3b79-358cc468b1e2.png)

データベースの作成は下記から行えます

![スクリーンショット 2024-11-13 143621.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/6954e23a-8ad0-16f6-9e78-3d844b1c397c.png)


![スクリーンショット 2024-11-13 141801.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/506ac8f5-ad15-486f-d325-e7715cac13cf.png)


### 2.使用するユーザに権限を付与する
Snowflakeでは、ロールを作成してそこに権限を与える形になります。
TROCCOを利用するときに必要な権限の付与などは下記ドキュメントに
クエリを添付してありますのでご参考ください。

https://documents.trocco.io/docs/connection-configuration-snowflake#%E6%A8%A9%E9%99%90%E3%81%A8%E3%83%AD%E3%83%BC%E3%83%AB

:::note info
クエリは基本的にコピペで行けますが、ユーザ名やロール名などについては適宜編集ください！
:::

:::note warn
GUI上でも操作できますが、該当メニューにたどり着くのが面倒なのでクエリのほうが早いとおもいます
:::


クエリの実行はここからできます

![スクリーンショット 2024-11-13 191040.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/b39d412f-1ce1-73df-c9af-9a4961abb394.png)


## ETLツール（TROCCO）の環境を整える
TROCCOで必要な設定はSnowflakeとの接続情報の作成です。

TROCCOのトップ画面です。ここから接続情報の作成ができます！

![スクリーンショット 2024-11-13 183139.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/d299b972-4a16-c1af-11d4-9f7812a45386.png)
<br>
新規作成を押すと、こんな画面になります。
接続可能なサービスが選べるので、 **DWH** の中から **Snowflake** を選びます

![スクリーンショット 2024-11-13 183404.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/551db3d8-0d4e-8904-89c5-c255eafae6f6.png)
<br>

接続情報の設定に必要なのはこれだけです！項目少なくてうれしい

![スクリーンショット 2024-11-13 184519.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/53b56702-3133-e8ee-12dd-113a2cc84c27.png)

Snowflake側でホスト名といユーザーを確認します
 **Copy account URL** からホスト名、 **My profile** からユーザーを確認します
![スクリーンショット 2024-11-13 192721.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/3a95d1d6-7bdc-9a14-717d-ffaad1b17129.png)

:::note info
認証方法は「キーペア認証」がおすすめのようです。
:::

:::note warn
秘密鍵と公開鍵は自分で発行が必要です。やったことなかったですが、TROCCOのドキュメントと外部サイトを参考にどうにか鍵を発行しました。
:::

openSSLを実行できるようになるまで結構かかりました。。
秘密鍵の入力が終わったら、Snowflakeで公開鍵の設定します。
権限関連でクエリを発行したワークシートのところでまたクエリを発行します。

- クエリ例などは下記をご参考ください

https://documents.trocco.io/docs/connection-configuration-snowflake

- openSSLの参考用(外部サイト)

https://rms.ne.jp/sslserver/basis/openssl_on_windows/

<br>

 全部の設定が終わったら **接続を確認** します。
設定内容に問題がなければ、緑のチェックマークが表示されます

![スクリーンショット 2024-11-13 184905.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3929084/102d5b02-581b-47e6-b3c1-2510ec64128c.png)
<br>
これで環境の設定は完了です！！

## おわりに
Snowflakeの権限回りはややこしくて、直感だけではどうにかならないので
 **ボタンないぞ？？エラー出たぞ？？** みたいなときは **権限足りてるかな、権限設定したロールに切り替わってるかな？** と確認するのがよさそうです。
 
Snowflakeのドキュメントにもデフォルトで用意されているロールの説明があるので参照するとよいと思います。
Snowflakeのドキュメントは読みやすくて好きです。

https://docs.snowflake.com/ja/user-guide/security-access-control-overview

<br>
TROCCOは直感的にポチポチしていくだけいいので接続情報の作成は簡単でした！
<br>
秘密鍵の作成が初めてだったのでターミナルでopenSSL実行できなくてわから～ん、となりましたが解説サイトがネット上にいっぱいあるのでどうにかなりました。
<br>

次はどんな情報が必要なのか考えて、実際にデータを取得するところまで
やっていきたいと思います！