
Snowpark開発環境の設定をVisual Studio Codeで試してみた
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは!DA(データアナリティクス)事業本部 インテグレーション部の大高です。
SnowflakeのPreview機能として、Snowparkという機能がPreview公開されています。
まだ私がSnowparkについて良く理解できていないので、まずは学習のために環境設定を試してみることにしました。
前提条件
SnowparkはPreview機能として公開されていますが、2021年06月 現在では下記の制約があります。
- 利用できる環境はAWSにホスティングされているSnowflakeアカウント
- 利用できる言語はScala
Snowpark is currently available for the Scala programming language for use with Snowflake accounts hosted on Amazon Web Services (AWS).
Snowparkとは?
Snowparkは先日開催された「Snowflake Summit 2021」で紹介された新しい機能です。
Snowparkを利用すると、新しい開発者エクスペリエンスとして好みの言語でワークロードをSnowflake内で直接実行できるようになります。
Visual Studio Codeで環境設定をしてみる
ということで、まずはどのような感じなのか触ってみたいので、普段利用している Visual Studio Codeで環境設定をしてみたいと思います。
設定については下記のドキュメントに記載されているので、こちらに沿ってやってみます。
拡張機能「Scala (Metals)」の導入
拡張機能は「Scala (Metals)」という拡張機能を導入します。scalameta.metalsで検索して表示される下記の拡張機能を「インストール」します。
インストール後は、下記のようにアイコンがサイドバーに表示されるようになります。
新規Scalaプロジェクトの作成
適当な新規ディレクトリを作成して、Visual Studio Codeで開きます。今回はsnowpark_projectsという名前のディレクトリを作成してみました。
作成したディレクトリをVisual Studio Codeで開いたら、Metalsのアイコンをクリックして、新規にScalaプロジェクトを作成します。
テンプレートの選択画面が表示されるので、scala/hello-world.g8を選択します。
ワークスペースディレクトリを聞かれるので、先程作成したhello_snowparkディレクトリを指定します。
プロジェクト名を聞かれるのでhello_snowparkと入力します。
しばらくすると、右下にプロジェクトを新しいウィンドウで開くかを聞かれるのでYesをクリックして開きます。
新しく開いたウィンドウで、今度はbuildをインポートするか聞かれるのでImport buildをクリックします。
これでScalaプロジェクトの準備ができました。
Snowpark用の設定
続いて、Snowpark用の設定を行います。
build.sbtファイルを開いて、scalaVersionを指定します。下記に記載があるとおり、2021年06月 現在は2.13.xはサポートされておらず、2.12.9および、それ以降の2.12.xがサポートされているそうです。
The Snowpark API is supported with Scala 2.12(specifically, version 2.12.9 and later 2.12.x versions).
2021/06/22 現在では2.12.14が最新のようなので、こちらを指定します。
// The simplest possible sbt build file is just one line: scalaVersion := "2.12.14" // That is, to create a valid sbt build, all you've got to do is define the // version of Scala you'd like your project to use.
次に、OSGeoのリポジトリ追加と、Snowparkライブラリの依存関係追加が必要とのことなので、これも追加します。
// Want to use a published library in your project? // You can define other libraries as dependencies in your build like this: libraryDependencies += "org.scala-lang.modules" %% "scala-parser-combinators" % "1.1.2" resolvers += "OSGeo Release Repository" at "https://repo.osgeo.org/repository/release/" libraryDependencies += "com.snowflake" % "snowpark" % "0.6.0"
変更後にファイルを保存すると、変更インポートするか聞かれるのでImport changesをクリックして再インポートします。
これで設定完了です!
設定の確認
最後にサンプルプログラムを実行して、設定の確認をします。
Main.scalaを以下のように書き換えます。また、プレースホルダーの箇所は、実際に利用しているSnowflake環境のものに変更します。
import com.snowflake.snowpark._
import com.snowflake.snowpark.functions._
object Main {
def main(args: Array[String]): Unit = {
// Replace the <placeholders> below.
val configs = Map (
"URL" -> "https://<account>.snowflakecomputing.com:443",
"USER" -> "<user name>",
"PASSWORD" -> "<password>",
"ROLE" -> "<role name>",
"WAREHOUSE" -> "<warehouse name>",
"DB" -> "<database name>",
"SCHEMA" -> "<schema name>"
)
val session = Session.builder.configs(configs).create
session.sql("show tables").show()
}
}
修正したら、エディタ上の「run」をクリックします。
無事に成功すると、show tablesコマンドの結果が返って、デバッグウィンドウに下記のように表示されると思います!
[main] INFO (Logging.scala:22) - Closing stderr and redirecting to stdout [main] INFO (Logging.scala:22) - Done closing stderr and redirecting to stdout [main] INFO (Logging.scala:22) - Actively querying parameter snowpark_lazy_analysis from server. [main] INFO (Logging.scala:22) - Execute query [queryID: 019d16ad-0000-22ca-0000-00b400f4c536] show tables -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |"created_on" |"name" |"database_name" |"schema_name" |"kind" |"comment" |"cluster_by" |"rows" |"bytes" |"owner" |"retention_time" |"automatic_clustering" |"change_tracking" |"search_optimization" |"search_optimization_progress" |"search_optimization_bytes" |"is_external" | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2019-12-13 21:14:02.619 |CUSTOMER |SNOWFLAKE_SAMPLE_DATA |TPCH_SF1 |TABLE | | |150000 |10777088 | |1 |OFF |OFF |OFF |NULL |NULL |N | |2019-12-13 21:14:02.93 |JCUSTOMER |SNOWFLAKE_SAMPLE_DATA |TPCH_SF1 |TABLE | | |150000 |10777088 | |1 |OFF |OFF |OFF |NULL |NULL |N | |2019-12-13 21:14:11.673 |JLINEITEM |SNOWFLAKE_SAMPLE_DATA |TPCH_SF1 |TABLE | | |6001215 |166893568 | |1 |OFF |OFF |OFF |NULL |NULL |N | |2019-12-13 21:14:01.215 |JNATION |SNOWFLAKE_SAMPLE_DATA |TPCH_SF1 |TABLE | | |25 |2560 | |1 |OFF |OFF |OFF |NULL |NULL |N | |2019-12-13 21:14:09.873 |JORDERS |SNOWFLAKE_SAMPLE_DATA |TPCH_SF1 |TABLE | | |1500000 |42665984 | |1 |OFF |OFF |OFF |NULL |NULL |N | |2019-12-13 21:14:06.355 |JPART |SNOWFLAKE_SAMPLE_DATA |TPCH_SF1 |TABLE | | |200000 |5214208 | |1 |OFF |OFF |OFF |NULL |NULL |N | |2019-12-13 21:14:08.08 |JPARTSUPP |SNOWFLAKE_SAMPLE_DATA |TPCH_SF1 |TABLE | | |800000 |36625920 | |1 |OFF |OFF |OFF |NULL |NULL |N | |2019-12-13 21:13:59.415 |JREGION |SNOWFLAKE_SAMPLE_DATA |TPCH_SF1 |TABLE | | |5 |1536 | |1 |OFF |OFF |OFF |NULL |NULL |N | |2019-12-13 21:14:04.667 |JSUPPLIER |SNOWFLAKE_SAMPLE_DATA |TPCH_SF1 |TABLE | | |10000 |684032 | |1 |OFF |OFF |OFF |NULL |NULL |N | |2019-12-13 21:14:11.333 |LINEITEM |SNOWFLAKE_SAMPLE_DATA |TPCH_SF1 |TABLE | | |6001215 |165127168 | |1 |OFF |OFF |OFF |NULL |NULL |N | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
これで、Visual Studio CodeでSnowparkを利用する準備ができましたね!
まとめ
以上、Snowpark開発環境の設定をVisual Studio Codeで試してみました。
公式ドキュメントにとても詳しく記載されているので、今回は特にハマることもなく設定ができました。設定ができたので、今後少しSnowparkを触って感覚を掴んでおきたいと思います。
どなたかのお役に立てば幸いです。それでは!

















