クラウドプラットフォーム・クロスファンクショナルチーム(Snowflakeチーム)の活動紹介(データレイク⇒Snowflake連携編)

本記事は、当社オウンドメディア「Doors」に移転しました。

約5秒後に自動的にリダイレクトします。


データ活用・DXに欠かせないのがデータ基盤です。ブレインパッドには、クラウドプラットフォームの知識・スキルを深化させるべく、Google Cloud 、AWS、Microsoft Azure、Snowflakeの4つのクラウドプラットフォームチームから成る「クロスファンクショナルチーム(CFT)」があります。今回は、便利な機能を多数備え、単なるDWHサービスではない機能の広がり・独自性を持つクラウド型DWHサービス「Snowflake」について、データレイクとの接続方法(認証方法)をご紹介します!

<目次>


こんにちは、ソリューション開発部の藤田です。

顧客企業のデータ活用を、システム開発や基盤構築の面から支えている当社のデータエンジニアリング本部(DE本部)。そのDE本部には、 Google Cloud 、AWS、Azure、Snowflakeの4つのクラウドプラットフォームチームから成る「クロスファンクショナルチーム(CFT)」があり、今回はSnowflakeチームの活動紹介となります。
(CFTの詳細は、こちらの記事を参照ください)

前回のブログでSnowflakeの概要についてご紹介した際に、今後のテーマとして「Snowflakeと各種サービスとの連携の調査」を掲げていましたが、今回は下図の赤枠のデータレイクにあるデータをSnowflakeに取り込んだり参照したりするために必要な「データレイクとSnowflake間の接続方法(認証方法)」についてご紹介します。(前回の記事の詳細は、こちらを参照ください)


このデータレイクとSnowflakeの活用事例として、分析官目線で考えると「機械学習案件で、データを受領してからすぐに解析できるよう、まずはデータレイクに受領データを格納し、外部テーブルを定義して最低限の工数で分析作業を開始する」といったことや、「データ移行時などで大量データをやり取りする際に、一先ずデータレイクに格納し、外部テーブルから参照することで、大量データでも作業がしやすい、抜け漏れが発生しにくい」などといった恩恵を受けられると考えています。

1.データレイクとDWH(データウェアハウス)について

データレイクとSnowflakeの話をするにあたり、まずデータレイクとDWH(データウェアハウス)の関係性について話をします。

1.1 データレイクとDWHについて

AWS、Microsoft Azure、Google Cloud といった3大クラウドサービスの普及に伴い、安価で手軽なデータレイク(Amazon S3やAzure Blob Storage、Google Cloud Storage等)に、大量のデータを溜めていき、それらのデータをDWHに連携して、分析・活用する事例が増えていきました。Amazon RedshiftやAzure Synapse Analytics、Google BigQueryなどといったDWHは、各種データレイクのデータを直接参照するような仕組みができるなど、データレイクとDWHの相性が良くなっており、データレイクとDWHの連携は、分析サービスを行う上での王道パターンとして定着してきていると感じています。
 

1.2 データレイクからDWHへの連携方法について

一般的に、データレイクからDWHへデータ連携する方法は、DWHに直接データを取り込んで連携する方法と、外部テーブルを作成してデータを参照して連携する方法の2種類があります。各種DWHサービス(Amazon Redshift、Azure Synapse Analytics、Google BigQuery)と同様に、Snowflakeもそのどちらにも対応しています。


連携方法①:データレイクのデータをDWH上のテーブルに取り込む方法

連携方法②:データレイクのデータを参照し、DWH上のテーブルには取り込まない方法(外部テーブル)


DWH上にデータを取り込んだ方が、その後のクエリスピードにおいてはメリットがあります。一方で、データを取り込まずに外部テーブルで参照する方法は、データレイク内で更新された最新のデータを参照しやすく、DWH側でデータを管理していないため、運用面で管理が楽になるメリットがあります。どちらの方法も一長一短でケースバーケースです。直近の案件では、ガバナンスの観点からデータはデータレイクで管理したい、という要望により、外部テーブルを採用する事例もありました。世の中のトレンドとして、ETLよりもELTという流れもあり、Snowflakeの加工機能を活かして、Snowflake側で加工すれば良いという考えもあったのかと思います。

※クエリスピードを向上させる方法として、マテリアルビューを活用し、外部テーブルのデータをマテリアルビューに反映させる方法もありますが、データ量やテーブル数、反映の頻度を考慮し、費用を見積った上でご活用ください。
 

2.データレイクとSnowflakeの接続設定について

一般的なデータレイクとDWHの連携に少し触れたところで、ここからはデータレイクとSnowflakeの接続の話になります。

2.1 データレイクとSnowflakeの接続設定について

Snowflakeは各種3大クラウドのデータレイクと接続が可能です。例えば、各種データレイクとSnowflake間で接続の認証設定をすることで、AWS上に存在するSnowflakeが、Amazon S3へのアクセスだけでなく、Azure Blob Storage、Google Cloud Storageに対してもデータの取得、参照が可能です。接続の認証方法は、下表のとおり各種データレイクにおいて複数の方法がありますが、STORAGE INTEGRATION(ストレージ統合)を使用した接続方法がセキュリティレベルも高く、Snowflake社としても推奨している方法となります。STORAGE INTEGRATIONとは、データレイクとの接続に必要な情報をまとめたもの、と考えれば良いと思います。

2.1.1 Amazon S3とSnowflakeの接続方法

Amazon S3とSnowflakeの接続方法として、以下の2つの方法があります。

No 方法 ユースケース メリット/デメリット
1 STORAGE INTEGRATION(ストレージ統合)を使用した接続 基本的にこの方法を使用する。 クエリ実行時にキー情報を記載しなくて済むため、No.2の方法と比べてセキュリティレベルが高い。
一度設定をすれば、その後は簡易にクエリ実行が可能。

Snowflake、AWSのそれぞれで管理者アカウントにて設定作業が必要。
2 AWSのIAMユーザーのAWS キーと秘密キーを使用した接続 一時的なテストなどで、すぐに利用したい場合に使用する。 設定が簡易。
文字列のキー情報のみの認証のため、セキュリティレベルが方式1に比べて低い。


上記の表のNo.1の接続方法を図に表すと以下のようなイメージになります。(AWS側にRole、Snowflake側にSTORAGE INTEGRATIONを作成し、Snowflake側でクエリ実行時にSTORAGE INTEGRATIONを指定して取得します)

※データ抽出時のコマンドイメージですが、外部ステージというものを作成して、データをロードする処理が入ります。外部ステージについては、後述の補足にて説明をします。


上記の表のNo.2の接続方法を図に表すと以下のようなイメージになります。(AWS側でアクセスキーを発行し、Snowflake側でSQL実行時にアクセスキーを指定して取得します)


<補足: 外部ステージについて>
外部ステージとは、下図のように3大クラウド上のデータレイクとSnowflakeを接続する際に、ファイルを格納するための領域で、STORAGE INTEGRATIONが正しく作成されていない(接続の認証がされていない)とこの領域にアクセスできません。

 

2.1.2 Azure Blob StorageとSnowflakeの接続方法

Azure Blob StorageとSnowflakeの接続方法として、以下の2つの方法があります。

No 方法 ユースケース メリット/デメリット
1 STORAGE INTEGRATION(ストレージ統合)を使用した接続 基本的にこの方法を使用する。 クエリ実行時にキー情報を記載しなくて済むため、No.2の方法に比べてセキュリティレベルが高い。
一度設定をすれば、その後は簡易にクエリ実行が可能。

Snowflakeで管理者アカウントにて設定作業が必要。
Azureではストレージアカウントを管理するAzureの権限(ストレージ BLOB データ共同作成者)が必要。
2 共有アクセス署名(SAS)トークンを使用した接続 一時的なテストなどで、すぐに利用したい場合に使用する。 設定が簡易。
有効期限付きのSASトークン(文字列のキー情報)のみの認証のため、セキュリティレベルが方式1に比べて低い。


上記の表のNo.1の接続方法を図に表すと以下のようなイメージになります。(Azure側にBlob Storageに対するアクセス制御(IAM)、Snowflake側にSTORAGE INTEGRATIONを作成し、Snowflake側でSQL実行時にSTORAGE INTEGRATIONを指定して取得します)

上記の表のNo.2の接続方法を図に表すと以下のようなイメージになります。(Azure側でSASトークンを発行し、Snowflake側でSQL実行時にアクセスキーを指定して取得します)

2.1.3 Google Cloud StorageとSnowflakeの接続方法

Google Cloud StorageとSnowflakeの接続方法は以下になります。

No 方法 ユースケース メリット/デメリット
1 STORAGE INTEGRATION(ストレージ統合)を使用した接続     ー        一度設定をすれば、その後は簡易にクエリ実行が可能。
Snowflakeで管理者アカウントにて設定作業が必要。
Google Cloud ではProject Editor権限が必要。


上記の表のNo.1の接続方法を図に表すと以下のようなイメージになります。(GCP側にCloud Storageに対するアクセス制御(プリンシパルとロール)、Snowflake側にSTORAGE INTEGRATIONを作成し、Snowflake側でSQL実行時にSTORAGE INTEGRATIONを指定して取得します)


(参考)上記の接続方法の詳細は、以下のSnowflake社のドキュメントに記載されています。
Amazon S3(https://docs.snowflake.com/ja/user-guide/data-load-s3-config.html
Azure Blob Storage(https://docs.snowflake.com/ja/user-guide/data-load-azure-config.html
Google Cloud Storage(https://docs.snowflake.com/ja/user-guide/data-load-gcs.html

3.まとめ

今回は、データレイクとSnowflakeの接続方法をテーマに整理をしてみました。Snowflakeは3大クラウドのように自身でデータレイクを持っているわけではありませんが、3大クラウドの全てのデータレイクと接続が可能です。3大クラウド上にデータレイクの環境があれば、Snowflakeは今後の利用検討の対象になりうるサービスだと思いますので、興味のある方は是非データレイクにテストデータを配置し、Snowflakeの使用感を試してみてください。その際、AWSやAzureの場合は、STORAGE INTEGRATIONを使用した本格的な設定で無くてもAWSキーやSASトークン等の設定のみで簡易に始めることも可能です。

実際に設定画面や手順の詳細を見てみないとイメージが沸きにくいというところもあるかもしれないので、次回は、具体的なデータレイクとSnowflakeの設定手順をまとめた記事を公開予定です。画面を見たい方はそれまでお待ちください。


データエンジニアリング本部では、中途採用を積極的に行っています。
ご興味がある方はお気軽にご連絡ください!
■データエンジニアリング部の紹介資料
https://speakerdeck.com/brainpadpr/brainpad-de-202107ver

■ ブレインパッドの求人一覧
www.brainpad.co.jp