ダミーデータを生成できるStreamlitアプリ「FrostyGen」をStreamlit in Snowflakeで動かしてみた

2023.09.26

さがらです。

先日、ダミーデータを生成できるStreamlitアプリ「FrostyGen」がSnowflake社のCorporate Sales EngineerであるMatteo氏により公開されました。

こちらのStreamlitアプリはStreamlit in Snowflakeにも対応しており、適切な手順を踏めば自身のSnowflakeアカウントでも使用することができます!

そこで、実際に私のSnowflake検証アカウントでこのFrostyGenアプリを動かしてみたので、その内容を本記事でまとめてみます。

事前準備

Snowflakeアカウント上で、Streamlitアプリを動かすために以下の準備を行います。

  • アプリのファイルを置くデータベースとスキーマの作成
  • Streamlitで使用するウェアハウスの作成

この事前準備については、以下のブログの内容も参考になると思いますのでぜひ併せてご覧ください。

自身のSnowflakeアカウントへのデプロイ方法

GitHubリポジトリで関連ファイルの確認・ダウンロード

まず、下記のGitHubリポジトリを開きます。

このリポジトリから、logo.pngをダウンロードしておきます。(アプリ上で表示されるロゴです。)

また、frosty_gen_sis.pyを開いていつでもコピーできるようにしておきます。

Snowflake上で新しいアプリケーションの作成

続いて、Snowflake上で新しくStreamlitアプリを作成します。

Streamlitメニューの右上Streamlit Appを押します。

作成するアプリの名前、使用するウェアハウス、アプリが保存されるデータベース&スキーマを選択し、右下のCreateを押します。

先程GitHubリポジトリ上で確認したfrosty_gen_sis.pyのコードをコピーし、エディターに貼り付けます。

しかし、このままではアプリ上に必要な画像が足りずエラーになってしまいます…

そこで、GitHubリポジトリからダウンロードしたlogo.pngを、作成したアプリに紐づく名前付きステージにアップロードしていきます。

作成したアプリに紐づく名前付きステージにpngファイルをアップロード

アプリを作成すると、自動で指定したデータべースのスキーマに名前付きステージが作られます。

※2023/9/26時点、自動で作成される名前付きステージの名前は決められず、勝手に名称が付けられてしまいます。1つのスキーマで複数アプリを管理しようとすると、どの名前付きステージがどのアプリと紐づくかがわからないのが辛いところです…

このステージを開いた状態で、右上の+ Filesを押します。

すると、対象の名前付きステージにファイルをアップロードすることができるので、GitHubリポジトリからダウンロードしたlogo.pngをアップロードします。

アプリを立ち上げて見る

ここまでの工程を追えたら、あとはアプリを立ち上げれば使うことが出来ます!

試してみた

ということで、早速FrostyGenアプリを試してみます。

画面UIの確認

画面左のExport Optionsでは、Export to Snowflake StageExport to Snowflake TableがStreamlit in Snowflake版では使用することが出来ます。

例えばExport to Snowflake Tableを選択すると、出力したいデータベース・スキーマ・テーブルを指定することでその場所にテーブルを生成することが可能です。

また、画面右では実際にどのようなデータを生成するか選択することが出来ます。

一番上の設定では、作成するデータのサイズやField Separatorを決めることが出来ます。各数値パラメータは直接キーボードで入力してEnterキーを押すことでも設定可能です。

画面右の下部ではof Fields to Createで設定した数値に応じて、各フィールド(カラム)に対してどのような設定でダミーデータの生成を行うか決めることが出来ます。

実際に出力してみた

実際に、下図の設定でデータをSnowflakeのテーブルに出力してみます!

出力したいときは画面左のExport Dataを押せばOKです。

成功すると、画面左にメッセージが表示され、画面右に実際のデータのサンプルが表示されます。XSのシングルクラスタのウェアハウスで行いましたが、1000行6列であれば数秒で処理が完了しました。

実際に対象のテーブルを見てみると、ちゃんと指定した条件に沿って1000行のダミーデータが作られていました!

気になった点

以下、検証時に気になった点を書いておきます。※commitb4fb917のコードでの検証です。この気になった点についてはMediumの記事上で私からコメントをしております。

Field Nameを小文字にしていると、エラーになります

Field Nameを小文字にしていると下図のようにエラーとなりますのでご注意ください。

テーブル名を小文字にするとテーブルが2つ生成されます

例えば、下図の条件でテーブル名を小文字にして実行すると、test111TEST111という2つのテーブルが作られます。(加えて、設定したTypeのデータ型が反映されているのはtest111のテーブルだけでした…)

テーブル名を大文字にした場合には、テーブルは1つだけ作られるのですが、データ型が全てVARCHAR(100)になってしまいます。

最後に

ダミーデータを生成できるStreamlitアプリ「FrostyGen」をStreamlit in Snowflakeで動かしてみました。

上述の「気になった点」で述べたようにいくつか気になる点はあるものの、簡易的にダミーデータをSnowflakeに生成したい要件では使える場面もあると感じました!

また、このアプリのようにSnowflake上のデータに直接作用するアプリケーションを作れるのはいい例だなと感じました!ビジネスユーザーが使用する簡易的なデータ入力アプリケーションなども作れそうですよね。