こんにちは。t.ozawaです。
今回は、ローカル上からモジュールをSnowflakeにアップし、Streamlitでモジュールを使ってみようと思います。
Snowflake上には、NumpyやMatplotlibといった、よく使うライブラリやモジュールが沢山存在しており、Snowflakeユーザはインストールいらずで、こういったライブラリやモジュールを使うことができます。(Openaiライブラリといった最近のものも搭載されており、非常に種類が豊富です!)
一方で、Snowflake上に存在しないライブラリやモジュールを利用したい場合は、ローカルからSnowflakeにアップする必要があります。
今回は、ローカル上で簡易な自作モジュールを作成し、Snowflakeにアップし、ワークシートやStreamlit in Snowflakeでモジュールを使ってみようと思います。
自作モジュールをStreamlitで用いる手順
自作モジュールをStreamlitで使う手順は以下の通りです。
- Streamlit用のDBを作成
- モジュールをSnowflakeにアップ
- Streamlitで実行
※ 2についてのソースはこちら
今回、「hello world」とあいさつしてくれる自作モジュールを使います。
事前にローカルPC上で、try_library.pyを作成します。
#try_library.py
#hello_world()を実行すると、「hello world」とあいさつ
def hello_world():
return "hello world"
1. Streamlit用の環境を作成
まず、Streamlit用のDBを作成します。
CREATE DATABASE OZAWADB;
続いて、Streamlitアプリを作成します。
Streamlit → +Streamlit App を選択し、
App NameとWearhouseは任意で、App Locationを先ほど作ったDBにします。ここでは、OZAWA_DBを指定し、SCHEMAはPUBLICを指定します。
こうすると、OZAWADB.PUBLICに自動的にStageが作成され、Streamlit画面のソースコードstreamlit_app.pyが自動作成されます。
これで、Streamlit環境の準備は完了です。
2. モジュールをSnowflakeにアップ
モジュールtry_library.pyを、streamlit_app.pyが格納されたStageにアップしていきます。
+ Files → try_library.pyをアップします。
Stage上に、モジュールtry_library.pyがアップされました。
3. Streamlitで実行
Streamlitで実行する前に、ワークシート上でテストしてみましょう。
モジュールを動かすためには、モジュールを呼び出すためのFunctionを作成したうえで、SELECT文でFunctionを呼び出す必要があります。
//Functionを作成
create or replace function ozawadb.public.hello_world()
returns variant
language python
runtime_version = '3.8'
handler = 'try_library.hello_world' //try_libraryモジュールのhello_world関数を呼び出すよ~!
imports = ('@"OZAWADB"."PUBLIC"."XXXXXXXXXXX (Stage)"/try_library.py'); //モジュールStageの場所
//select Functionで実行
select ozawadb.public.hello_world();
「hello world」とあいさつされたら無事動いています!
いよいよStreamlit上で動かしてみます。
Streamlit画面を開いて…
コードを貼り付けます。
import streamlit as st
from snowflake.snowpark.context import get_active_session //ワークシートと同じようにSQLを実行するためのライブラリ
session = get_active_session() //SQLを実行するためのセッションを立ち上げて、、、
ret = session.sql(f" select ozawadb.public.hello_world() ").collect() //先ほどワークシートでテストした Select Function を実行
//画面タイトル
st.title("外部モジュールを取り込んでみる")
//Select Functionの結果を表示
st.write(ret)
Runで実行して…
このように、タイトルと「hello world」のあいさつが出たらクリアです!
おわりに
truestarではSnowflakeの検討、導入支援や環境構築からアプリ開発まで幅広くサポート可能です。
Snowflakeに゙興味がある、導入済みだけどもっとうまく活用したい等々ありましたら、ぜひこちらから相談ください!
MarketPlaceにてリリースした「逆ジオコーディングアプリ」、その開発裏話や、
Streamlit + chatgptを使った対話型アプリの試行錯誤も行っています!
これまでのSnowflakeに関する記事はこちら