ついにSnowflakeにNotebookが搭載された!
結論
Snowflake上のデータ分析には、Snowflake Notebooksを使おう。
SnowflakeにNotebook機能が突然登場した
2024年5月25日、Snowflakeに突如Notebookという新機能が追加され、データエンジニアリング界隈で話題となりました。
本記事ではそもそもNotebookとはなにか?なぜ便利なのか?Snowflake Notebookの優位性はなにか?を解説します。
そもそもNotebookとは?
まず、NotebookはSnowflakeの特別な機能の名前ではありません。Jupyter NotebookやGoogle Colab、Hexなどを含む、インタラクティブなプログラミング環境の総称です。
Notebookに共通する特徴は以下の3点です。
多言語対応: Python、SQL、Rなど複数のプログラミング言語に対応しています。
部分実行: コードを部分的に選択して実行できます。
多様な入出力形式: 画像や表などを簡単に表示できます。また、他のセルで作成した変数を参照するなど、様々な入出力の補助機能があります。
図1:Jupyter Notebookで段階的にコードを実行する
図2: Google Colabで画像を表示する
データサイエンティストがNotebookを好む理由
Notebookはデータサイエンティストに特に人気があります。その理由は、Notebookを使うことで以下のようなメリットが得られるからです。
-
言語切り替えの手間が省ける: データサイエンティストはデータ取得、可視化、学習など各ステップごとに様々なプログラミング言語を使うことがありますが、Notebookを使う場合、言語ランタイムを切り替える手間がほとんどありません。
-
PDCAサイクルが高速化する: 部分再実行機能によってデータサイエンティストのPDCAサイクルが高速化します。データ分析やAIモデルの作成では、特定の処理を試行錯誤する必要がありますが、AIモデルのメモリへのロードのような時間のかかる処理は繰り返したくありません。Notebookの部分再実行機能を使えば、このような時間のかかる処理をスキップできます。
-
視覚化が容易になる: 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のfor
やif
が使えるからです。
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株式会社の公式サイトからお気軽にお問い合わせください。爆速で貴社のデータ活用をお手伝いいたします。
Snowlfake データクラウドのユーザ会 SnowVillage のメンバーで運営しています。 Publication参加方法はこちらをご参照ください。 zenn.dev/dataheroes/articles/db5da0959b4bdd
Discussion