Snowflake Notebooksを使ってみた

2024.06.01

こんちには。

データアナリティクス事業本部 機械学習チームの中村(nokomoro3)です。

今回はSnowflake Notebooksがプレビューとなりましたので使ってみたいと思います。

特徴

主な特徴は以下の通りです。

  • Snowflake上でいわゆるJupyter Nootebookが使える
  • NotebookのセルはSQLとPythonが使用でき、相互に結果を受け渡しできる(一部)
  • Gitと連携してNotebookを管理できる

注意点としては以下が挙げられます。

  • NotebookをActive Session状態にしている場合、WHが稼働中となるため処理をしていなくともクレジットを消費
    • Worksheetは処理を実行した際に料金が発生するので少し違いがあります

使ってみる

準備

トライアルアカウントを使用します。以下の記事にある「Snowflake のサインイン」の部分を実施ください。

以降はサインイン済みとして進めます。

Notebookの起動方法

ログイン後「Create」を押下すると、Notebookというものがあるので、そちらから起動できます。

snowflake-notebook-public-preview_2024-05-31-17-49-27

すると以下のような画面となります。Notebookの保存先として、DatabaseとSchemaを作成する必要があります。

snowflake-notebook-public-preview_2024-05-31-17-59-47

データベースとして CM_NAKAMURA_EXAMPLE を作成し、スキーマとして NOTEBOOK を作成して設定します。

snowflake-notebook-public-preview_2024-05-31-18-00-38

作成すると、以下のようにサンプルのNotebookが作成されたような状態となります。

snowflake-notebook-public-preview_2024-05-31-18-02-38

作成されたものを少し細かく見てみる

よく見ると以下の2つが作成されています。

  • environment.yml
  • notebook_app.ipynb

notebook_app.ipynb がNotebookの実体で、 environment.yml はcondaのパッケージ管理をするあのファイルと推察されます。

中身は以下のようになっていました。(channelsはsnowflakeなのですね、知らなかった)

snowflake-notebook-public-preview_2024-05-31-18-05-25

environment.yml は編集することはできず、右上の「Packages」を操作するとこの environment.yml が変更される感じとなっているようです。

私の好きなpolarsも追加することができました。

snowflake-notebook-public-preview_2024-05-31-18-12-25

サンプルを動かしてみる

実際にサンプルのNotebookを上から動かしてみます。右上の「Start」を押下することで実行環境が立ち上がるようです。なにも操作が行われない状態が60分継続するとシャットダウンするようです。

snowflake-notebook-public-preview_2024-05-31-18-14-00

しばらく待つと「Active」表示に変わり、裏でWHが立ち上がっているのを感じられます。つまりクレジットが消費されます。

snowflake-notebook-public-preview_2024-05-31-18-16-32

ここで「Run all」を押下すると、Notebookのすべてのセルが実行されます。

最初のセル cell1 は以下のようになっており、Snowparkを使用するための処理が走っているようです。

snowflake-notebook-public-preview_2024-05-31-18-19-54

cell2 はSQLの処理となっています。

snowflake-notebook-public-preview_2024-05-31-18-20-52

cell3cell2 の結果をPython側で受け取り、それを元にStreamlitの機能でグラフを描画しています。

snowflake-notebook-public-preview_2024-05-31-18-22-08

cell2.to_pandas() とすることでPandasのDataFrameとして取得できるようですね。

(シンプルに to_df とすると、SnowparkのDataFrameとなるようです)

また cell2 というセルの名前は変更することも可能です。以下のようにセル名を変更して分かりやすい名前にして取得することもできます。

snowflake-notebook-public-preview_2024-05-31-18-26-00

セル間でデータを参照してみる

ドキュメントとしては以下に記載されています。

前述ののようにPythonセルからSQLセルの結果を参照することは to_dfto_pandas を用いることでできます。

polarsで処理をしたいという強い気持ちがあるので、polarsの from_pandas で読み込んでみたいと思います。

snowflake-notebook-public-preview_2024-05-31-18-28-35

無事に読み込むことができました。

SQLセルからSQLセルの結果を参照するには、Jinjaで呼び出すことができるようです。

snowflake-notebook-public-preview_2024-05-31-18-43-17

SQLセルからPythonセルの参照は、Python変数を参照することは可能なようです。

snowflake-notebook-public-preview_2024-05-31-18-47-06

SQLセルからPythonセルのDataFrameを参照する方法は残念ながらまだ方法が分からなかったです。

Notebookのエクスポート

notebook_app.ipynb は右上からエクスポートすることによりファイルとしてダウンロードすることが可能です。

snowflake-notebook-public-preview_2024-05-31-19-24-31

(左側のファイル一覧の各種ファイルは、三点リーダーからも一応ダウンロードできます)

ファイルのアップロード

ローカルファイルをアップロードして分析することも可能です。

左にある「+」を押下すれば、ドラッグ&ドロップするためのダイアログが表示されます。

snowflake-notebook-public-preview_2024-05-31-19-16-56

csvファイルなどをアップロードすれば、Notebookでそちらを分析することも可能なようです。

ipynbファイルをアップロードすることも試してみましたが、SnowflakeのNotebookとして使えるのは、 notebook_app.ipynb ファイルのみとなり、以下のように生のテキストとしてしか表示できませんでした。

snowflake-notebook-public-preview_2024-05-31-19-29-17

スケジュール実行

スケジュール実行も設定することができます。以下の右上から「Create schedule」を押下することで可能となります。

snowflake-notebook-public-preview_2024-05-31-18-52-36

スケジュール名と実行する頻度を設定することができます。

snowflake-notebook-public-preview_2024-05-31-18-53-21

スケジュール自体はNotebook作成時に指定したスキーマのTaskに格納されているようです。

snowflake-notebook-public-preview_2024-05-31-19-14-28

以下のようにタスク定義も確認することができます。

snowflake-notebook-public-preview_2024-05-31-19-15-15

セッションの終了

Notebookは「Active」となっているとWHのクレジットが消費されますので、以下のように終わったら「End session」で停止されてください。

snowflake-notebook-public-preview_2024-05-31-19-06-02

まとめ

いかがでしたでしょうか。Snowflake上でアドホックな処理を書きながら、可視化などまでできるのはとても便利だと思いました。

Git連携機能とかも気になるので、また試してみたいと思います。