AWS Glue DataBrewでSnowflakeのテーブルデータをプロファイリングしてみる

2021.04.02

こんにちは!DA(データアナリティクス)事業本部 インテグレーション部の大高です。

先日、AWS BlogにてAWS Glue DataBrewを利用してSnowflakeのデータを加工して、再度Snowflakeへ戻すソリューションが紹介されていました。

とても興味深く、そもそも私がGlue DataBrewでSnowflakeに接続したことがなかったので、まずは今回はコネクションの作成からテーブルデータのプロファイリングまでを試してみました。

前提条件

Snowflakeのアカウントに利用可能な、ユーザ、データベース、ウェアハウスが用意されていることを前提としています。また、今回利用する環境は、Private Linkは無効の環境です。

「接続」の作成

まずはGlue DataBrewの「データセット」メニューから「接続」を作成していきます。今回は「データセット」の作成画面から作業をすすめます。

「データセット名」に任意の名前を入力し、「External data connections」の「Snowflake」から「Snowflake 接続を追加」をクリックして、接続を作成していきます。

「接続名」は任意のものを指定し、「JDBC URL」は記載されているとおりjdbc:snowflake://<account_name>.snowflakecomputing.com/?db=<database_name>&warehouse=<warehouse_name>のフォーマットで入力します。

例)

jdbc:snowflake://foobar.ap-northeast-1.aws.snowflakecomputing.com/?db=SNOWFLAKE_SAMPLE_DATA&warehouse=X_SMALL_WH

「データベースユーザー」は、今回は簡略化してそのまま「認証情報を入力」としました。

「必要なコネクタとドライバー」では、Snowflakeの「Sparkコネクター」と「JDBCドライバー」のjarファイルが必要となります。それぞれ以下のSnowflakeドキュメントに記載されているリンク先からダウンロードできます。

今回はそれぞれspark-snowflake_2.12-2.8.4-spark_3.0.jarsnowflake-jdbc-3.13.2.jarをダウンロードして利用してみました。が、先に書いておきますが2021/04/02時点ではspark-snowflake_2.11-2.8.4-spark_2.4.jarを利用しないとエラーが発生します。

「Specify class name」にはnet.snowflake.spark.snowflakeを指定して、設定完了です。

「データセット」の作成

「接続」が作成できたら、あとはデータセットの画面で作成した「接続」をクリックします。

対象の「テーブル名」に今回はtpch_sf1.nationを指定して「データセットを作成」をクリックし、完了です。

データプロファイリングをしてみる

これで設定が完了したので、早速データプロファイリングをしてみます。データセットの画面から作成したデータセットを選択して「データプロファイルを実行」をクリックします。

と、エラーが発生しました…!

Exception: Error connecting to the database. java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Product;)V

なんとなくSparkコネクターのバージョン問題っぽいエラーに見えるので、Sparkコネクターをspark-snowflake_2.11-2.8.4-spark_2.4.jarに変更してリトライしたところ、うまくいきました!

以下のようにテーブルデータのプロファイルが見れます。今回は文字列なので文字数の最小・最大ぐらいですが、数値の場合には更に色々と見れそうですね。

まとめ

以上、AWS Glue DataBrewでSnowflakeのテーブルデータをプロファイリングしてみました。

Glue DataBrewのデータプリパレーションという観点でいうと、Snowflake上で完結させるだけであればSQLベースで処理してしまうのが早そうではありますが、GUIを利用して加工したいというケースや、加工後のデータを別システムへ連携させたいという場合などに役立ちそうかなと思いました。

どなたかのお役に立てば幸いです。それでは!