❄️

Streamlit in SnowflakeでCSVファイルを書き出す

2023/12/07に公開

この記事はSnowflake Advent Calendar 2023のPart2の7日目です。空いてたんで小ネタです。

CSVファイルダウンロードしたい!

みんな大好きCSVファイルでのダウンロード! ChatGPTに効くと↓を教えてくえるけど…

import streamlit as st
import pandas as pd
from io import StringIO

# DataFrameの作成(サンプルデータ)
df = pd.DataFrame({
    'column1': [1, 2, 3],
    'column2': ['A', 'B', 'C']
})

# DataFrameをCSV形式の文字列に変換
csv = df.to_csv(index=False)

# Streamlitのダウンロードボタンを設定
st.download_button(
    label="Download data as CSV",
    data=csv,
    file_name='dataframe.csv',
    mime='text/csv',
)

…がStreamlit in Snowflake(以下、SiS)には、2023年12月07日現在だと制限があってだめ。残念

Streamlit in Snowflakeの制限

https://docs.snowflake.com/ja/developer-guide/streamlit/limitations#unsupported-streamlit-features

2023年12月07日現在、st.download_buttonは未サポート。どこかのタイミングでアップデートで対応するかもしれないけど。

代替案あった

検索したら代替案あった。感謝!

https://github.com/Snowflake-Labs/sf-samples/tree/main/samples/streamlit-in-snowflake/download

ドキュメントによると…

  1. ステージにCSVファイルでアンロード(エクスポート)する
  2. CSVファイルダウンロード用の署名付きURLを生成する
  3. 署名付きURLを画面に表示する

の流れで対応してる模様。事前にアンロード用のステージは作っておく必要あり(ご利用は自己責任でお願いします)


サンプルはCSVだけど保存時のフォーマットやオプションは↓参照
https://docs.snowflake.com/ja/developer-guide/snowpark/reference/python/latest/api/snowflake.snowpark.DataFrameWriter.copy_into_location

署名付きURLは↓
https://docs.snowflake.com/ja/sql-reference/functions/get_presigned_url

出来た!

うれしい。


この記事はSnowflake Advent Calendar 2023の7日目でした。

Discussion