3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Streamlit in Snowflakeでファイルアップローダが解禁されました!

Last updated at Posted at 2025-02-15

Streamlit in Snowflakeでとうとうファイルアップローダ st.file_uploader が解禁されました!
通常のPython環境で実行するStreamlitではバージョン1.20.0のあたりから実装されていたものですが、Streamlit in Snowflakeでは長らく封印されていた待望の機能です。

リリースノート

シンプルですね。
2025年2月15日現在はまだPublic Previewなので、本番利用は避けるのが推奨とされています。

st.file_uploader PuPr

使ってみる

試してみました。
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}に書き込む!")

無事に動きました!

app result

処理の最後でDataFrameをSnowflakeのテーブルとして書き込む処理をしているので、実際にテーブルが作成されているかを確認すると…実際に作成されています!

new table

可能性は無限大

色々な使い方が考えられると思います。

  • CSVファイルをアップロードして、インタラクティブにデータ加工・プレビューして、Snowflakeに保存
  • Snowflakeに保存されているデータと、ローカルにあるデータをアプリ上でJOINして可視化
  • 画像や動画などのメディアファイルをアップロード。追加情報を入力してもらってメディアファイルとセットでSnowflakeに保存

などなど…ぜひ活用のアイディアを考えてみてください!

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?