Snowpark とは? ~Snowflake上でPythonを実行しよう~(vol.14)

  • 公開日:2023年10月02日(月)

昨今、データ活用ソリューションとして注目を集める、データクラウド「Snowflake」。その特徴のひとつとして、「Snowpark」と呼ばれる開発フレームワークが提供されている点が挙げられます。
「Snowpark」を活用することで、データの加工処理や分析・機械学習などのデータエンジニアリングの開発を、“Snowflake上で”高速かつ安全におこなうことができます。

本ブログ記事では、「Snowpark」の概要や活用のメリットを解説するとともに、「Snowpark for Python」のチュートリアルのご紹介、および基本的な開発手法を解説します。

Snowparkとは? ~活用するメリット~

Snowparkとは、Snowflakeが提供する開発フレームワークです。Snowparkのライブラリとランタイムを使用すると、Snowflakeの処理エンジン内でSQL以外の開発言語によるコードを実行することができます。対応する開発言語は、Python、Java、Scalaです。
なかでもPythonは、文法が比較的シンプルであり、AI・機械学習向けのライブラリの充実と実績から、データエンジニアリングの分野で利用される主要な開発言語になっております。そのため、本ブログ記事では、「Snowpark for Python」を対象として記載します。

Snowparkを活用するメリットは大きく3つ挙げられます。

  1. 効率的なデータパイプライン構築
    データの処理をおこなうためにデータを別の場所に移動したりコピーしたりすると、データパイプラインの複雑化や、データの鮮度低下が発生します。また、処理の開発や実行にも、時間やコストがかかってしまいます。Snowparkを利用して処理を構築することで、データの移動やコピーが不要となり、このような問題を解決できます。
  2. ガバナンスの担保
    Snowflakeの外部にデータを置く必要がなく、Snowflake内部で処理することができます。また、データのセキュリティを含めたガバナンスをSnowflakeで統一しておこなうことができ、安全かつ統制のとれた形でデータを利用することができます。
  3. 統一されたマネージド環境での開発
    Snowparkを利用するユーザ同士が、統一された同一の環境を利用することができるため、バージョン差異などが発生することがなく、コラボレーションをしながら開発をおこなうことができます。
    また、独自に環境を用意する場合と比較し、スムーズに開発をスタートできるという利点もあります。

上記のメリットを活かし、Snowparkを用いることで、Snowflake上で高速かつ安全なデータパイプラインを構築したり、機械学習や画像処理といったような分析したりすることができるようになり、データ活用の可能性はより広がっていくといえるでしょう。

Snowparkとは? ~仕組みと今後の期待~

Snowparkの仕組みをみていきましょう。Snowparkは、大きく分けて、クライアントサイドのライブラリとサーバーサイドのランタイムで構成されます。

まず、クライアントサイドのライブラリについて説明します。クライアント側のアプリケーション内でSnowpark APIを使用すると、Snowflakeでデータを処理するアプリケーションを開発することができます。また、Snowpark ML API(パブリック・プレビュー機能)と呼ばれる、機械学習(ML)のツールセットの提供も開始されています。

次に、サーバーサイドのランタイムについて説明します。これは、ユーザーがカスタムロジックを取り込んでSnowflake上で実行できるようにするための仕組みです。開発者はユーザー定義関数(UDF)とストアドプロシージャを作成し、これらを実行することでSnowflakeを処理することができます。現在、Snowparkの実行はウェアハウスでおこなわれていますが、コンテナサービスがプライベート・プレビュー機能として発表されています。コンテナサービスではGPUも利用でき、機械学習のモデル学習などへの利用が期待できます。

Snowflake=「クラウド上のデータウェアハウス」というイメージがまだ根強く残っているかもしれません。しかし、Snowparkのさらなる発展により、Snowflakeはデータを保持・公開するというデータウェアハウスとしての役割をこえて、データエンジニアリング全体をつかさどるプラットフォームになりつつあります。

ここまで、Snowparkの概要について記載しました。次章からは、Snowparkを利用する方法について解説していきます。

Snowparkを使ってみよう ~SnowflakeのUIでSnowpark for Pythonを利用する~

ここからは、Snowparkの(今回は「Snowpark for Python」の)利用方法について解説します。

利用手順の前に、「Snowsight」についてご説明します。Snowsightは、Snowflakeで提供されるWebインターフェースです。Snowsight上でPythonワークシートを作成することにより、Pythonの開発環境を調達したり、初期設定をおこなったり、といった準備作業に時間やコストをかける必要がなくなるため、「Snowpark for Python」を早く・簡単に使いはじめることができます。
ユーザーは、Pythonワークシートを使って、Snowflake内でデータパイプライン、MLモデル、アプリケーションを直接開発できます。また、Pythonワークシートで作成したアプリケーションをプロシージャに変換することもできます。

では、SnowsightでPythonワークシートを利用する手順についてご紹介します。

  1. Anaconda Pythonパッケージの有効化
    SnowsightにACCOUNTADMIN権限でログインし、「管理者」メニューから「請求と利用規約」を選択します。
    「Anaconda Pythoパッケージ」欄の「有効化」ボタンを押します。
  2. Snowflakeサードパーティの規約の確認
    ダイアログが表示されます。Snowflakeサードパーティの規約ページを確認し、問題なければ「確認して続行する」を選択します。
  3. Anaconda Pythonパッケージの確認
    1. と同じ画面を開くと、Anaconda Pythonパッケージが利用可能となっていることが
    確認できます。
  4. Pythonワークシートを開く
    「ワークシート」メニューから「+」ボタンで「Pythonワークシート」を選択します。
  5. サンプルで準備されたPythonコードを実行する
    サンプルコードが開きます。このサンプルコードはそのまま「実行」することができます。
    指定したSnowflake上のデータベース・スキーマ・テーブルから、カラム条件を指定してデータを出力するサンプルになっています。
  6. Pythonワークシート上で開発をおこなう
    サンプルコードにならって、開発を進めていきます。以降は、次章を参考にしてください。

別途でPythonの実行環境を整え、Snowflakeのデータを操作する処理を開発する場合、実行環境の準備が必要となり、環境変数やバージョン、Snowflakeとの接続の問題など、高度な技術課題に直面し、なかなか開発をはじめられないことが多いです。筆者も以前は、そのような苦い経験をしたことがあります。
Snowsight上のPythonワークシートを使って開発をおこなうことで、このような課題を回避し、スムーズに開発を始めることができます。

Snowparkを使ってみよう ~Snowflakeが提供するチュートリアルを実施する~

Pythonワークシートが利用可能になったら、ワークシートでSnowparkを使ってみましょう。
Snowparkを初めて使う方・学習をしたい方向けに、Snowflakeからチュートリアルが提供されています。
たとえば、下記のチュートリアルでは、Snowparkでのデータ取得・加工・保存・ストアドプロシージャとしての展開までの一連の流れを、ラボ環境を使って学習することができます。
https://quickstarts.snowflake.com/guide/getting_started_with_snowpark_in_snowflake_python_worksheets_ja/index.html?index=..%2F..ja#0

チュートリアルを実施する場合には、Snowflakeのアカウントが必要になります。
無料トライアルアカウントの作成方法はこちらのブログ記事をご参照ください。

チュートリアルが実施できたら、チュートリアルで提供されたプログラムを参考に、Snowparkを使ってSnowflake内で任意のデータを加工するストアドプロシージャを開発してみましょう。
開発にあたっては、Snowflakeの提供する「Snowpark開発者ガイド」やAPIが参考になります。
https://docs.snowflake.com/ja/developer-guide/snowpark/python/index

ここでは、Pythonワークシート上で、サンプルDB内のORDERテーブルを関連マスタと結合し、集計をおこなう処理をサンプルで作成しました。

Pythonワークシートの「展開」ボタンを押すと、この処理をストアドプロシージャにすることができます。

このように、処理の開発からストアドプロシージャの作成までを、Snowsight上で実施することが可能です。皆さまも、是非、お試しください。

Snowpark for Python ~まとめ~

さてここまで、Snowparkと呼ばれる、Snowflakeが提供する開発フレームワークについて、その概要やメリット、開発の手順を解説して参りました。一連の流れから、次のような印象を受けたのではないでしょうか?

・ Snowparkを活用することで、Pythonのような、SQL以外の開発言語を使って、高速かつ安全なデータエンジニアリングを実現できる
・ 機械学習やAIの活用など、今後のSnowparkはさらなる発展が期待できる
・ Snowflakeが提供するチュートリアルやドキュメントを利用して、Snowparkを実際に体験してみることができる
・ Snowflakeのユーザーインターフェース(SnowSight)上で、Snowparkを使って、処理の開発やストアドプロシージャの作成を簡単おこなうことができる

「Snowpark」は、現在Snowflakeが注力しているサービスとなりますが、その実態やメリットはなかなかイメージがつかない側面が多いかと思います。本ブログ記事が、皆様のお役に立ちましたら幸いです。

弊社は、データマネジメントの専門家として、お客様のデータ一元管理やデータ活用における戦略策定、データドリブン経営の実現に向けた真の“使える”データマネジメント基盤構築のご支援をしております。
データ分析基盤の豊富な構築実績に基づくノウハウを体系化したサービスをご提供しておりますので、データ活用でお悩みの際は、是非、弊社までお声掛けください。

◆ お問い合わせページ:https://itsol.dentsusoken.com/snowflake/inquiry/

*本記事は、2023年9月15日時点の情報を基に作成しています。
 製品・サービスに関する詳しいお問い合わせは、電通総研のWebサイトからお問い合わせください。