"Streamlit in Snowflake（SiS）" でsemantic-model-generator とcortex-analyst と動作させる方法

# 概要
Snowflake 内にあるテーブルに対して，テーブルのメタ情報を作成する処理（semantic-model-generator）と，その情報を用いてテーブルを自然言語で問い合わせを行う処理（cortex-analyst）を構築する．構築方法は，Streamlit in Snowflake（SiS）を用いるやり方とローカルのPythoを用いてStreamlitを用いるやり方があるが，今回は前者のやり方について解説する．

# 前提条件
- Streamlit in Snowflake（SiS）で処理が完結
- ACCOUNTADMINの権限があること
- SnowflakeからGitリポジトリにアクセスできること，できなければ別の手段でGitリポジトリにあるファイルをSnowflakeの内部ステージにアップロードできること

# 大まかな流れ
1. テーブルのメタ情報を作成する処理（[semantic-model-generator](https://github.com/Snowflake-Labs/semantic-model-generator)）の実装
2. テーブルを自然言語で問い合わせを行う処理（[cortex-analyst](https://github.com/Snowflake-Labs/sfguide-getting-started-with-cortex-analyst)）の実装
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880471/3fdcbb54-ded3-9281-bb67-9ac5a7b85fb2.png)

# 1. テーブルのメタ情報を作成する処理の実装
- [semantic-model-generator](https://github.com/Snowflake-Labs/semantic-model-generator) にアクセス
- [sissetup_snowsightgit.sql](https://github.com/Snowflake-Labs/semantic-model-generator/blob/main/sis_setup/sissetup_snowsightgit.sql) を実行
  Gitリポジトリにアクセスするための外部APIの作成，Gitリポジトリへの接続，内部ステージの作成，Gitリポジトリから内部ステージへのファイルコピー，Streamlitアプリの作成を実施
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880471/484d1108-70d3-3ba7-a298-0513f591d732.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880471/55bd9941-fe27-308e-dc7c-5c794f4a1cad.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880471/9b33c6c9-cc96-3f28-0875-aa8469c0f77f.png)
- Streamlitアプリを実行し，テーブルのメタ情報となるyamlファイルを作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880471/d483708d-8515-6173-5733-0795c56bf110.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880471/701807da-e063-9a2d-7dbe-cc1235b161f4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880471/38d3e9a9-07b1-f572-3b36-ec31a99956cd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880471/80f8acbe-a17e-1bd9-6b9b-6d42c3e64f89.png)

# 2. テーブルを自然言語で問い合わせを行う処理の実装
- [cortex-analyst](https://github.com/Snowflake-Labs/sfguide-getting-started-with-cortex-analyst) にアクセス
- [create_snowflake_objects.sql](https://github.com/Snowflake-Labs/sfguide-getting-started-with-cortex-analyst/blob/main/create_snowflake_objects.sql) を実行
  cortex-analyst のアプリを動作させるためのデータベースやスキーマ，ステージ，テストテーブルを作成
    - ROLE の切り替えが発生するため，すべて選択して実行はできない．そのため，基本的には1行ごとに実行する．
    - SECURITYADMIN やSYSADMIN 等必要な権限に切り替えながら実行する．必要に応じてロールは変更して実行すること．cortex_user_role についても，別のロールに置き換えても良い．
    - <user> 部分は権限を付与したいアカウント名を指定して書き換えること．
    - テストテーブル（daily_revenue，product_dim，region_dim）は本番環境では不要．不要の場合，次および次々の手順はスキップしても良い．
- [daily_revenue.csv](https://github.com/Snowflake-Labs/sfguide-getting-started-with-cortex-analyst/blob/main/data/daily_revenue.csv)，[product.csv](https://github.com/Snowflake-Labs/sfguide-getting-started-with-cortex-analyst/blob/main/data/product.csv)，[region.csv](https://github.com/Snowflake-Labs/sfguide-getting-started-with-cortex-analyst/blob/main/data/region.csv)，[revenue_timeseries.yaml](https://github.com/Snowflake-Labs/sfguide-getting-started-with-cortex-analyst/blob/main/revenue_timeseries.yaml)（3つのテーブルのメタデータ） のファイルを内部ステージにアップロード（スキップ可）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880471/c12e4599-f7c9-d9b3-2d4b-75f1598e6be7.png)

- [cortex_search_create.sql](https://github.com/Snowflake-Labs/sfguide-getting-started-with-cortex-analyst/blob/main/load_data.sql) を実行（スキップ可）
  テストテーブルにdaily_revenue.csv，product.csv，region.csv をロード
- Streamlit in Snowflake（SiS） で[cortex_analyst_sis_demo_app.py](https://github.com/Snowflake-Labs/sfguide-getting-started-with-cortex-analyst/blob/main/cortex_analyst_sis_demo_app.py) を実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880471/76349f40-0e4c-27cf-2ba0-d48235908174.png)