Snowflakeの20分チュートリアルをコンソールのみで実行

# 目的
Snowflakeを触り始めて最初にお世話になる以下のチュートリアル．

https://docs.snowflake.com/ja/user-guide/tutorials/snowflake-in-20minutes

非常に短時間で学べる良い教材だが，コマンドライン操作を前提としているためハードルが高い．
そこでチュートリアルの内容をコンソールのみ実行するためのメモを残す．

アカウント作成までは済ませた状態とする．

# Snowflakeオブジェクトを作成する
SQLを実行するためのワークシートを作成する．
- サイドバーのメニューから`Create` ->  `SQL Worksheet`の順でクリック

![スクリーンショット 2024-05-11 230227.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/931058/6030ed29-e23e-a98a-dea4-41b1743d425e.png)

あとはチュートリアルと同じクエリをワークシートで実行すればよい．
```sql
-- データベースを作成する
CREATE OR REPLACE DATABASE sf_tuts;

SELECT CURRENT_DATABASE(), CURRENT_SCHEMA();

-- テーブルを作成する
CREATE OR REPLACE TABLE emp_basic (
   first_name STRING ,
   last_name STRING ,
   email STRING ,
   streetaddress STRING ,
   city STRING ,
   start_date DATE
   );

-- 仮想ウェアハウスを作成する
CREATE OR REPLACE WAREHOUSE sf_tuts_wh WITH
   WAREHOUSE_SIZE='X-SMALL'
   AUTO_SUSPEND = 180
   AUTO_RESUME = TRUE
   INITIALLY_SUSPENDED=TRUE;CREATE OR REPLACE WAREHOUSE sf_tuts_wh WITH
   WAREHOUSE_SIZE='X-SMALL'
   AUTO_SUSPEND = 180
   AUTO_RESUME = TRUE
   INITIALLY_SUSPENDED=TRUE;

SELECT CURRENT_WAREHOUSE();
```

# データファイルをステージする
Snowflakeの内部ステージを作成する
- サイドバーのメニューから`Create` -> `stage` -> `Snowflake Managed`の順でクリック

![スクリーンショット 2024-05-11 231412.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/931058/4c2cead4-8a77-640d-af0c-0875b79df731.png)

- ステージ名を入力
- スキーマを選択
- `Create`クリックでステージ作成完了

![スクリーンショット 2024-05-11 231800.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/931058/cf45ccb9-ad6b-25de-9e07-110bf93f66f5.png)

サンプルデータファイルのステージング
- サイドバーのメニューから`Create` ->  `Add Data`の順でクリック

![スクリーンショット 2024-05-11 233002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/931058/ff9c90a3-6ad1-8469-0150-d70d3c78c00c.png)

- `Load files into a Stage`をクリック

![スクリーンショット 2024-05-11 233137.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/931058/ebf6b423-a62e-a8fe-e8b1-885530e30555.png)

- アップロードしたいcsvを選択
- アップロード先のステージを選択
- `Upload`クリックでアップロード完了

![スクリーンショット 2024-05-11 233410.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/931058/cbef8747-4d30-3b43-07c7-8e5e720c387d.png)

以下のクエリをワークスペースで実行し，ステージングされたファイルを確認できる．
```
LIST @sf_tuts.public.emp_basic;
```

![スクリーンショット 2024-05-11 233839.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/931058/17d49d1d-eb28-3fb1-2b6e-3f7ad59db026.png)

# データをターゲットテーブルにコピーする
以下のクエリをワークスペースで実行し，テーブルにデータをロードする．
```sql
-- ステージングされたcsvをターゲットテーブルにロード
COPY INTO emp_basic
  FROM @emp_basic
  FILE_FORMAT = (type = csv field_optionally_enclosed_by='"')
  PATTERN = '.*employees0[1-5].csv'
  ON_ERROR = 'skip_file';
```
![スクリーンショット 2024-05-11 235328.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/931058/e7abfdf1-8361-bc02-8f0a-ee2af495d1c5.png)

## ロードされたデータをクエリする
チュートリアルと同様のクエリをワークシート内で実行可能．
```sql
-- すべてのデータを取得する
SELECT * FROM emp_basic;

-- 追加のデータ行を挿入する
INSERT INTO emp_basic VALUES
   ('Clementine','Adamou','cadamou@sf_tuts.com','10510 Sachs Road','Klenak','2017-9-22') ,
   ('Marlowe','De Anesy','madamouc@sf_tuts.co.uk','36768 Northfield Plaza','Fangshan','2017-1-26');

-- メールアドレスに基づいた行をクエリする
SELECT email FROM emp_basic WHERE email LIKE '%.uk';

-- 開始日に基づき行をクエリする
SELECT first_name, last_name, DATEADD('day',90,start_date) FROM emp_basic WHERE start_date <= '2017-01-01';
```

# クリーンアップ
チュートリアルと同様のクエリをワークシート内で実行可能．
```sql
-- データベースを削除
DROP DATABASE IF EXISTS sf_tuts;

-- 仮想データウェアハウスを削除
DROP WAREHOUSE IF EXISTS sf_tuts_wh;
```

# まとめ
今回のチュートリアルの内容であればコンソール上で完結できる．