🎉

StreamlitとSnowflakeを接続する

2023/03/07に公開

はじめに

Streamlit App-A-Thon Contestが開かれるということで、ますますStreamlitの熱が帯びてきた様子を感じます。

非常に時代遅れ気味ではありますが.... StreamlitとSnowflakeを接続する流れを書いていきたいと思います。また手順は基本的に『Connect Streamlit to Snowflake』に倣って進めていきます。

実施環境

Ubuntu: 22.04
Python: 3.10.6

想定するディレクトリ構成

.
├── .streamlit
│   ├── secrets.toml
├── streamlit_app.py

Snowflake側の作業

Snowflake側でまずはデータベース及びテーブルの作成を行います。

CREATE DATABASE PETS;

CREATE TABLE MYTABLE (
    NAME            varchar(80),
    PET             varchar(80)
);

INSERT INTO MYTABLE VALUES ('Mary', 'dog'), ('John', 'cat'), ('Robert', 'bird');

SELECT * FROM MYTABLE;

VSCode側の作業

  1. pipをインストールします
python -m ensurepip --upgrade
sudo apt-get install python3-pip
  1. Streamlitをインストールします
pip install streamlit
  1. Snowflakeコネクターをインストールします
pip install snowflake-connector-python
  1. 接続情報を載せるためのtomlファイルを書きます
# .streamlit/secrets.toml

[snowflake]
user = "xxx"
password = "xxx"
account = "xxx" # <account_identifier>.snowflakecomputing.com
warehouse = "xxx"
database = "xxx"
schema = "xxx"
  1. Streamlit用にサンプルコードをコピペします

# streamlit_app.py

import streamlit as st
import snowflake.connector

# Initialize connection.
# Uses st.cache_resource to only run once.
@st.cache_resource
def init_connection():
    return snowflake.connector.connect(
        **st.secrets["snowflake"], client_session_keep_alive=True
    )

conn = init_connection()

# Perform query.
# Uses st.cache_data to only rerun when the query changes or after 10 min.
@st.cache_data(ttl=600)
def run_query(query):
    with conn.cursor() as cur:
        cur.execute(query)
        return cur.fetchall()

rows = run_query("SELECT * from mytable;")

# Print results.
for row in rows:
    st.write(f"{row[0]} has a :{row[1]}:")
  1. Streamlitを実行します
streamlit run streamlit_app.py
  1. ブラウザーで確認します

最後に

最近Streamlit触りたい欲が出てきたので、下準備のためにも書きました。より良い方法などあれば教えて頂ければと思います!

参考サイト

Discussion