SnowflakeでSnowparkを動かしてみた

今回は、Snowflake上でSparkに似た構文のコードを使ってストアドプロシージャなどの開発をすることができる、Snowparkを動かしてみました。

Snowflakeについては、以下の記事を参照してください。 blog.jbs.co.jp

Snowparkの概要

Snowflake上で、Sparkに似た構文のコードを実行できる機能のことです。

Pythonworksheet上から実行することができ、データのクレンジングや機械学習を行ったり、UDFやストアドプロシージャの開発をすることができます。

名前はSnowflake+SparkでSnowparkとのことです。

Snowparkの実行環境

Snowflakeウェアハウス上で実行されます。

通常のSnowflakeウェアハウスでも実行できますが、より効率よく実行するためにSnowparkに最適化されたウェアハウスタイプの「'SNOWPARK-OPTIMIZED'」が提供されています。

利用できる開発言語はPython、Java、Scalaの3つです。Sparkの開発言語と同じですね。

Snowparkの実行

試しにSnowparkを実行してみます。

前の章で紹介したように、コードを記述する言語としてはPython、Java、Scalaの3つが利用できるのですが、今回は最も簡単に実行できるPythonのものを通常のウェアハウス上で実行してみます。

利用するデータは、Snowflakeの試用版にサンプルとして入っているSNOWFLAKE_SAMPLE_DATAデータベース内から、TPCH_SF1スキーマのLINEITEMテーブルを読み出して加工してみます。

テーブルの表示

Createをクリックし、PythonWorksheetを作成します。

PythonWorksheetの作成
作成されるとデフォルトの状態である程度コードが記述されています。
PythonWorksheet作成時

この中で、main関数の引数部分に記載されているsessionがSparkSessionに相当するオブジェクトとなっていて、Aapche Sparkで一般的にsparkと定義されるものと同じです。

今回、Apache Sparkと同じように記述できるかも見たいので、デフォルトで記述されている「tableName=」と「dataframe =」で始まる行をコメントアウトします。

#tableName = 'information_schema.packages'  
#dataframe = session.table("SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.LINEITEM").filter(col("language") == 'python')

以下の様に記述を追加します。

df = session.read.table("SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.LINEITEM")
df.show()

return部分が出力結果を指定する部分になるため修正します。

return dataframe
↓
return df

コード修正部分
右上にあるRunボタンをクリックして実行します。
Runボタン
下の欄に読み込んだテーブルの内容が表示されます。
実行結果

列の選択と表示

続いて、dfの加工を行ってみます。

以下の様に記述し、列を選択して新しいDataframeを定義してみます。

    selected_df = df.select("L_ORDERKEY","L_EXTENDEDPRICE")
    selected_df.show()

テーブル加工コード変更部分
実行して結果を確認します。
select後実行結果
Sparkと同じように処理が記述できていることを確認できました。

まとめ

Snowparkについて確認を行い、Sparkと同じように記述してSnowflake上で実行できることを確認できました。

今後、Azureのサービスとの連携等について確認を進めて、記事にしていきたいと考えています。

執筆担当者プロフィール
里見 悠太

里見 悠太(日本ビジネスシステムズ株式会社)

Hadoop/NiFi周りを得意としています。 SparkやKafkaを使ったデータフローについて勉強中です。

担当記事一覧