Snowpark開発環境の設定をVisual Studio Codeで試してみた
こんにちは!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を触って感覚を掴んでおきたいと思います。
どなたかのお役に立てば幸いです。それでは!