Streamlit in Snowflakeでとうとうファイルアップローダ st.file_uploader
が解禁されました!
通常のPython環境で実行するStreamlitではバージョン1.20.0のあたりから実装されていたものですが、Streamlit in Snowflakeでは長らく封印されていた待望の機能です。
リリースノート
シンプルですね。
2025年2月15日現在はまだPublic Previewなので、本番利用は避けるのが推奨とされています。
使ってみる
試してみました。
Snowsightで適当なStreamlitアプリを新規作成してコードを書いていきます。
file_uploder.py
import streamlit as st
import pandas as pd
from snowflake.snowpark.context import get_active_session
from snowflake.snowpark.functions import col
st.title("File Uploader")
uploaded_file = st.file_uploader("Choose a CSV file")
# ファイルがアップロードされていないときはここで終了
if not uploaded_file:
st.stop()
# CSVファイルを読み込む
pandas_df = pd.read_csv(uploaded_file)
st.write("filename:", uploaded_file.name)
st.dataframe(pandas_df)
# Pandas DataFrameをSnowpark DataFrameに変換してみる
session = get_active_session()
snowpark_df = session.create_dataframe(pandas_df)
# 適当な変換を実行。「~ス」で終わる名前だけを残す
result_df = snowpark_df.filter(col("NAME").like("%ス"))
st.dataframe(result_df)
# 書き込む!
table_name = "DEMO_DB.PUBLIC.UPLOADED_FILE"
result_df.write.mode("overwrite").save_as_table(table_name)
st.write(f"ファイルを{table_name}に書き込む!")
無事に動きました!
処理の最後でDataFrameをSnowflakeのテーブルとして書き込む処理をしているので、実際にテーブルが作成されているかを確認すると…実際に作成されています!
可能性は無限大
色々な使い方が考えられると思います。
- CSVファイルをアップロードして、インタラクティブにデータ加工・プレビューして、Snowflakeに保存
- Snowflakeに保存されているデータと、ローカルにあるデータをアプリ上でJOINして可視化
- 画像や動画などのメディアファイルをアップロード。追加情報を入力してもらってメディアファイルとセットでSnowflakeに保存
などなど…ぜひ活用のアイディアを考えてみてください!