【Snowflake】外部からモジュールを取り込んでStreamlitで使ってみる

【Snowflake】外部からモジュールを取り込んでStreamlitで使ってみる | Tableau-id Press -タブロイド-
snowflake_logo

こんにちは。t.ozawaです。

今回は、ローカル上からモジュールをSnowflakeにアップし、Streamlitでモジュールを使ってみようと思います。

Snowflake上には、NumpyやMatplotlibといった、よく使うライブラリやモジュールが沢山存在しており、Snowflakeユーザはインストールいらずで、こういったライブラリやモジュールを使うことができます。(Openaiライブラリといった最近のものも搭載されており、非常に種類が豊富です!)

一方で、Snowflake上に存在しないライブラリやモジュールを利用したい場合は、ローカルからSnowflakeにアップする必要があります。

今回は、ローカル上で簡易な自作モジュールを作成し、Snowflakeにアップし、ワークシートやStreamlit in Snowflakeでモジュールを使ってみようと思います。

自作モジュールをStreamlitで用いる手順

自作モジュールをStreamlitで使う手順は以下の通りです。

  1. Streamlit用のDBを作成
  2. モジュールをSnowflakeにアップ
  3. 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に関する記事はこちら