📊

ついにSnowflakeにNotebookが搭載された!

2024/05/31に公開

結論

Snowflake上のデータ分析には、Snowflake Notebooksを使おう。

SnowflakeにNotebook機能が突然登場した

2024年5月25日、Snowflakeに突如Notebookという新機能が追加され、データエンジニアリング界隈で話題となりました。

https://x.com/rakudeji/status/1794177740364726728

本記事ではそもそもNotebookとはなにか?なぜ便利なのか?Snowflake Notebookの優位性はなにか?を解説します。

そもそもNotebookとは?

まず、NotebookはSnowflakeの特別な機能の名前ではありません。Jupyter NotebookGoogle ColabHexなどを含む、インタラクティブなプログラミング環境の総称です。

Notebookに共通する特徴は以下の3点です。

多言語対応: Python、SQL、Rなど複数のプログラミング言語に対応しています。
部分実行: コードを部分的に選択して実行できます。
多様な入出力形式: 画像や表などを簡単に表示できます。また、他のセルで作成した変数を参照するなど、様々な入出力の補助機能があります。


図1:Jupyter Notebookで段階的にコードを実行する

図2: Google Colabで画像を表示する

データサイエンティストがNotebookを好む理由

Notebookはデータサイエンティストに特に人気があります。その理由は、Notebookを使うことで以下のようなメリットが得られるからです。

  1. 言語切り替えの手間が省ける: データサイエンティストはデータ取得、可視化、学習など各ステップごとに様々なプログラミング言語を使うことがありますが、Notebookを使う場合、言語ランタイムを切り替える手間がほとんどありません。

  2. PDCAサイクルが高速化する: 部分再実行機能によってデータサイエンティストのPDCAサイクルが高速化します。データ分析やAIモデルの作成では、特定の処理を試行錯誤する必要がありますが、AIモデルのメモリへのロードのような時間のかかる処理は繰り返したくありません。Notebookの部分再実行機能を使えば、このような時間のかかる処理をスキップできます。

  3. 視覚化が容易になる: Notebookの多様な入出力機能により、結果を素早く確認できます。データサイエンティストは表データだけでなく、画像、動画、音声なども扱います。Notebookを使えば、様々なフォーマットのデータを簡単に確認できます。

これまでのSnowflakeでのデータサイエンス

従来、Snowflakeで簡単なデータ分析を行う際はSnowsightのワークシートを使用していましたが、Notebookと比較すると多言語対応や入出力の確認で使いにくい部分がありました。
どうしてもNotebookを使いたい場合は、Jupyter Notebookのセルフホストや外部SaaSを利用する必要がありましたが、機密データを扱う際のセキュリティ上の懸念から、社内で禁止されているケースもありました。

Snowflake Notebookの登場でより手軽にデータ分析ができるようになった

しかし、そのような悩みを解決したのがSnowflake Notebooksです。Snowflake NotebooksはSnowflakeのウェアハウス上で稼働するNotebookです。
セルごとに、SQLまたはPythonを利用できます。もちろん、部分再実行も可能で、画像や表の出力も可能です。


図3. NotebookはPythonまたはSQLで記述できる


図4. Notebook上で画像を表示できる

Snowflake Notebookの登場によって、Notebookの基本的な機能をだれもがセキュアに利用できるようになりました。

Snowflake Notebookの便利な機能6選

セキュアにNotebookの基本的な機能が使えるというだけでも大きなメリットですが、それだけではありません。
他のNotebook製品と比較して優れている点も6つ解説します。

1. セル間でのデータの受け渡しができる

SQLセルからPythonセル,PythonセルからSQLセルにデータを渡す事ができます。


図5. SQLの実行結果をcell2に格納する様子
SQLとしてcell2という表記はSQLを使って取り出したデータをcell2というノートブック単位の変数に格納するという意味です。
この変数は他のセルから2種類の方法で参照出来ます。
SQL内でこの変数を参照するには{{cell2}}のようなjinja形式の参照方法を使います。

SELECT * FROM {{cell2}}

Python内でこの変数を参照するには普通のSnowparkのDataFrameのように使います。

my_df = cell2.to_pandas()

どちらの記法でもcell2という変数は内部でRESULT_SCANという過去のクエリ結果のキャッシュを参照する記法に置き換えられてから実行されています。

SELECT * FROM TABLE(RESULT_SCAN('11111111-1111-1111-1111-111111111111'))

2. Jinja2の記法に対応

SQLセルはJinja2の記法に対応しています。

以下のようなSQLを簡単に書くことを考えましょう。

SELECT '1月' AS month, SUM(amount) AS total_sales FROM sales_jan;
UNION ALL
SELECT '2月' AS month, SUM(amount) AS total_sales FROM sales_feb;
UNION ALL
SELECT '3月' AS month, SUM(amount) AS total_sales FROM sales_mar;
UNION ALL
SELECT '4月' AS month, SUM(amount) AS total_sales FROM sales_apr;
UNION ALL
SELECT '5月' AS month, SUM(amount) AS total_sales FROM sales_may;
...

これは以下のようにPythonセルとSQLセルを組み合わせて書くことが出来ます。Jinjaのforifが使えるからです。

months = [
  ('1月', 'jan'), ('2月', 'feb'), ('3月', 'mar'), 
  ('4月', 'apr'), ('5月', 'may'), ('6月', 'jun'), 
  ('7月', 'jul'), ('8月', 'aug'), ('9月', 'sep'), 
  ('10月', 'oct'), ('11月', 'nov'), ('12月', 'dec')
]
{% for month, abbrev in months %}
SELECT '{{ month }}' AS month, SUM(amount) AS total_sales FROM sales_{{ abbrev }}
{% if not loop.last %}UNION ALL{% endif %}
{% endfor %};

3. Streamlitコンポーネントの出力に対応

Snowflake NotebookはStreamlitと統合されており、Pythonセル内でStreamlitコンポーネントを記述することで、任意のStreamlitコンポーネントを表示できます

例として、以下のウェブサイトの訪問者数を可視化したダッシュボードをご覧ください。
これがNotebookの1つのセルの出力なんです。

図6. Notebookで作成した、ウェブサイトの訪問者数を可視化したダッシュボード

4. Streamlitコンポーネントによるユーザー入力

Streamlitコンポーネントを用いて入力値の変更を行うこともできます。
例えば、st.multiselectを用いて顧客セグメントを選択し、このセグメントの値を変更すると、下流のセルが自動的に再実行されてグラフが更新されます。


図7. 入力を変化させると下流のセルが再実行される様子

5. ノートブックをタスクに変換できる

ノートブック全体をタスクとしてデプロイできます。データ変換や、機械学習モデルの更新タスクに非常に便利です。

図7. Notebookをタスク化するダイアログ

一応、内部でこのタスクがどのようにデプロイされるのかを確認しましょう。
このダイアログを入力して送信することによって、以下のようなクエリが実行されます

create or replace task "TestTask"
	warehouse=COMPUTE_WH
	schedule='USING CRON 0 * * * * Asia/Tokyo'
	as EXECUTE NOTEBOOK "DB"."PUBLIC"."TEST_NOTEBOOK" ( );

EXECUTE NOTEBOOKというコマンドによってNotebookが毎時0分に実行されるようですね。
引数を取れるように見えるので将来的には外部からパラメータを注入することが可能になると思われます。
公式ドキュメントで、Airflowなどの外部スケジューラからEXECUTE NOTEBOOKを呼ぶ例も紹介されていました。

6. ノートブックをGit管理できる

NotebookはGit連携機能を使うことでバージョン管理出来ます。

図8. NotebookのGit連携機能

まとめ

Snowflakeはデータサイエンティストにとっても使いやすいデータプラットフォームへと進化してきています。Snowflake上でデータを分析する方なら業務が必ず楽になるでしょう。

PR

RAKUDEJI株式会社は、世界で一番Snowflakeに詳しい会社を目指し、Snowflakeに特化したサービスを提供しています。
弊社の豊富な経験と知見を活かし、貴社のデータ活用を安全かつ効果的に加速させるお手伝いをいたします。Snowflakeに関するお困りごとやご相談がございましたら、ぜひRAKUDEJI株式会社の公式サイトからお気軽にお問い合わせください。爆速で貴社のデータ活用をお手伝いいたします。
https://rakudeji.co.jp/corp/

Snowflake Data Heroes

Discussion