今回は、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を作成します。


この中で、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



列の選択と表示
続いて、dfの加工を行ってみます。
以下の様に記述し、列を選択して新しいDataframeを定義してみます。
selected_df = df.select("L_ORDERKEY","L_EXTENDEDPRICE") selected_df.show()


まとめ
Snowparkについて確認を行い、Sparkと同じように記述してSnowflake上で実行できることを確認できました。
今後、Azureのサービスとの連携等について確認を進めて、記事にしていきたいと考えています。