【macOS】SnowflakeのCLIクライアント SnowSQLをインストールしてチュートリアルをやってみた

# はじめに

今回は、SnowflakeのCUIクライアント「SnowSQL」のインストールとチュートリアルを体験した内容を紹介します！

今回の作業環境は以下のとおりです。

【作業環境】
・ チップ Apple M1
・ macOS Ventura 13.3

※その他、Snowflake関連記事はコチラ↓

https://qiita.com/se_yataro/items/21a7fcac1adcbc6ddd6b

https://qiita.com/se_yataro/items/55601060d69208a87523

# SnowFlakeへのSnowSQLのインストール方法

https://docs.snowflake.com/ja/user-guide/snowsql-install-config#installing-snowsql-on-macos-using-homebrew-cask

macへのSnowSQLのインストールは上記のドキュメントを参考に進めていきます。
まずはSnowSQLをHomebrewを使ってインストールしましょう！
といっても、既にHomebrewを導入していれば下記のコマンドを実行すればOKです。

`brew install --cask snowflake-snowsql`

### エイリアスの追記

続いて、インストールが完了したらzshrcファイルを編集し、SnowSQL 実行可能ファイルのエイリアスを登録しましょう！
エイリアスを登録することで、ターミナルで SnowSQLが実行できるようになります。

※以下、公式ドキュメントから引用＋追記
1. `~/.zshrc` ファイルを開きます（ない場合は作成します）。
    → zshrcファイルはテキストエディットやVScodeなどのテキストエディタで開いてOKです。
    
2. 次の行を追加します。
    `alias snowsql=/Applications/SnowSQL.app/Contents/MacOS/snowsql`
    → snowsqlという名前で実行ファイルのエイリアスを登録
    
3. ファイルを保存します。
これで、SnowSQLのインストールは完了です！

# SnowSQLを使ったチュートリル

https://docs.snowflake.com/ja/user-guide/getting-started-tutorial-prerequisites

SnowSQLのインストールが完了したので、チュートリアルをやってみましょう！
チュートリアルに沿って進めていきたいと思います。

まずは、サンプルファイル`getting-started.zip`をダウンロードして、`/tmp`フォルダを作成し、その中にダウンロードしたファイルを解凍して準備しておきます。
![スクリーンショット_2023_06_26_14_38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2930990/f527b8dc-1f73-ae2e-2fdf-059529d95e1b.png)

## SnowSQLへのログイン

それではターミナルで以下のコマンドを実行して、SnowSQLにログインしましょう。

`$ snowsql -a <account_identifier> -u <user_name>`

SnowSQLへログインする際の account_identifierとuser_nameは以下のとおりです。
account_identifier →　組織名-アカウント名
user_name → 各自のユーザー名
![スクリーンショット_2023_06_26_14_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2930990/000b1045-ea16-ea85-3870-2a1f43a5b3e7.png)

次のプロンプトでパスワードが要求されるので、SnowSight（SnowflakeのWebUI）にログインする際のパスワードを入力します。
ログインが完了すると下記キャプチャのように表示されると思います。
![スクリーンショット_2023_06_26_14_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2930990/5f47eb4c-38e9-058e-3d43-0a285fac6fca.png)

## Snowflakeオブジェクトを作成する

このあとのチュートリアルの大まかな流れは以下のとおりです。

- チュートリアル用のデータベース、テーブル、ウェアハウスを作成する。
- ダウンロードしたサンプルファイルをSnowflakeにステージングする。（→テーブルにデータをロードするための場所＝ステージにデータをアップロードする。）
- ステージングしたデータをテーブルに取り込む。
- クエリを試してみる。
- チュートリアル用に作成したデータベース、テーブル、ウェアハウスなどをクリーンアップする。

### データベースの作成

それでは早速チュートリアル用のデータベース等を作成していきます。
まずはデータベースの作成です。下記のコマンドを実行します。

```sql
CREATE OR REPLACE DATABASE sf_tuts;
```

また、下記コマンドで現在のデータベースとスキーマを確認できます。

```sql
SELECT CURRENT_DATABASE(), CURRENT_SCHEMA();
```

![スクリーンショット_2023_06_26_14_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2930990/2504aea1-fc4c-29cc-ae94-7cb3f5c916f0.png)

### テーブルの作成・ウェアハウスの作成

テーブルとウェアハウスについても、チュートリアルページのコマンドを実行して作成しましょう。

■テーブル作成

```sql
CREATE OR REPLACE TABLE emp_basic (
  first_name STRING ,
  last_name STRING ,
  email STRING ,
  streetaddress STRING ,
  city STRING ,
  start_date DATE
  );
```

■ウェアハウス作成

```sql
CREATE OR REPLACE WAREHOUSE sf_tuts_wh WITH
  WAREHOUSE_SIZE='X-SMALL'
  AUTO_SUSPEND = 180
  AUTO_RESUME = TRUE
  INITIALLY_SUSPENDED=TRUE;
```

![スクリーンショット_2023_06_26_14_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2930990/b4beedfa-8755-7b01-7787-53241c4d7121.png)

## サンプルデータをステージングする

ダウンロードしたデータをSnowflakeにステージングします。
Snowflakeに記載のとおり、ステージとはテーブルにデータをロード・アンロードするための場所で、今回はそこにサンプルデータをアップロードしていきます。

mac環境なので以下のコマンドを実行してアップロードします。

`PUT file:///tmp/employees0*.csv @sf_tuts.public.%emp_basic;`
※`/tmp/employees0*.csv` 部分は、サンプルデータを解凍したフォルダ名に置き換えてください。今回はユーザーディレクトリ直下に配置したので`/Users/ユーザー名/tmp/employees0*.csv`に置き換えています。

ステージングの状況は下記コマンドで確認できます。
`LIST @sf_tuts.public.%emp_basic;`

![スクリーンショット_2023_06_26_14_36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2930990/27291454-bb23-e4e6-fcdc-019fd435f2b0.png)

## ステージングしたデータをテーブルにコピーする

ステージにあげたサンプルデータを先に作成したテーブルにコピーしましょう。
下記のコマンドを実行します。

```sql
COPY INTO emp_basic
FROM @%emp_basic
FILE_FORMAT = (type = csv field_optionally_enclosed_by='"')
PATTERN = '.*employees0[1-5].csv.gz'
ON_ERROR = 'skip_file';
```

以下のように結果にコピー結果が表示されればOKです！

![スクリーンショット_2023_06_26_14_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2930990/20bfc02f-5025-fcdc-0093-09728922733f.png)

## テーブルに対してクエリを試してみる

チュートリアルに紹介されているクエリをそれぞれ試していきます！

### データ取得

```sql
SELECT * FROM emp_basic;
```

![スクリーンショット_2023_06_26_14_55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2930990/ddd4830b-ee76-1e96-9c3d-3dba3dea2bbb.png)


### データの追加（INSERT）

```sql
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');
```

![スクリーンショット_2023_06_26_14_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2930990/e685afe5-6cf1-2c89-3757-1cf24e91b381.png)

### LIKE関数を用いた抽出

```sql
SELECT email FROM emp_basic WHERE email LIKE '%.uk';
```

![スクリーンショット_2023_06_26_14_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2930990/9bcab835-604a-5551-731c-32eac90caf4d.png)

### 日付に基づいた抽出

```sql
SELECT first_name, last_name, DATEADD('day',90,start_date) FROM emp_basic WHERE start_date <= '2017-01-01';
```

![スクリーンショット_2023_06_26_15_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2930990/3f34758b-b60f-bf31-8d9e-7a07708503fb.png)

## データベースとウェアハウスをクリーンアップする

最後にチュートリアル用に作成したデータベース等をクリーンアップします。
下記コマンドを実行してデータベースとウェアハウスを削除します。

```sql
DROP DATABASE IF EXISTS sf_tuts;

DROP WAREHOUSE IF EXISTS sf_tuts_wh;
```

クリーンアップが完了したら、`!exit`コマンドを実行してSnowSQLを抜けて、チュートリアルは終了です。

![スクリーンショット_2023_06_26_15_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2930990/92c0a224-4684-907c-71fa-f0168c9a40d5.png)

チュートリアルを通じて、一連の流れが体験できるので非常におすすめです！
また、SnowSQLはサジェストも効きますし、キャプチャのとおりシンタックスハイライトもしてくれるので、使いやすい雰囲気です。