#10:ハンズオンラボガイド「データ共有」| Snowflake Advent Calendar 2019 #SnowflakeDB

2019.12.10

こんにちは、大場です。

当エントリは『Snowflake Advent Calendar 2019』の10日目のエントリです。

「HANDS-ON LAB GUIDE FOR SNOWFLAKE FREE TRIAL」は、以下の9つのコンテンツで構成されます。本日はこの最後となる「Module9:Data Sharing」を紹介します。

  • Module 1: Prepare Your Lab Environment
  • Module 2: The Snowflake User Interface & Lab “Story”
  • Module 3: Preparing to Load Data
  • Module 4: Loading Data
  • Module 5: Analytical Queries, Results Cache, Cloning
  • Module 6: Working With Semi-Structured Data, Views, JOIN
  • Module 7: Using Time Travel
  • Module 8: Roles Based Access Controls and Account Admin
  • Module 9: Data Sharing

その前に

昨日の記事で Data Sharing の概要動画をご紹介していますので適宜ご参照ください。

なお、本演習では「Module 3: Preparing to Load Data」で用意したデータベースを利用して進めていきます。まだの方は先に「Module 3」をお試しください。

はじめに

Snowflake では、データプロバイダによって作成される(同時にデータコンシューマにインポートされる)「Secure Share」を介してアカウント間でのデータ共有をおこないます。コンシューマはデータ共有を受ける側で、外部の組織やパートナー企業というケースもあれば、独自の Snowflake アカウントを持つ社内の組織というケースなど、様々なケースが考えられます。

データ共有に際しては、独自の Snowflake アカウント、またはプロビジョニングされた Snowflake Reader アカウントのいずれかを使用します。

なお、現在 Data Sharing では、同じプロバイダ、リージョンのアカウント間でのみサポートがされています。

9.1 既存の Share を参照する

Snowflake では、すべての Snowflake アカウントに対して以下の2つを共有しています。Snowflake 側がデータプロバイダとして機能し、他のすべてのアカウントはコンシューマとして機能しています。

  • Account Usage Data
  • Sample Data Sets

こちらを確認してみましょう。

WebUI の左上にある青い Snowflake ロゴをクリックします。データベースオブジェクトブラウザの UI の左側で、データベース「SNOWFLAKE_SAMPLE_DATA」を確認します。データベースアイコンに小さな矢印があり、これが共有状態であることを示しています。

UI の右上で、ACCOUNTADMIN のロールになっていることを確認し、上部にある[Share]タブをクリックします。

このページでは、Inbound Secure Shares を確認しています。Snowflake がアカウントと共有している2つの Secure Share があることがわかります。

1つにはアカウントの使用状況が含まれ、もう1つには使用可能なサンプルデータが含まれています。これは、実際の Data Sharing を用いたもので、手元の Snowflake アカウントが、Snowflake 側が共有するデータのコンシューマとして動作していることが確認できます。

9.2 Outbound Share を作成する

9.2.1

Module3 のシティバイクの話に戻り、以下のケースを仮定します。

  • 私達はシティバイクの Snowflake アカウントの管理者である
  • TRIPS データベースのデータに対してリアルタイムにデータ分析をしたいパートナーがある
  • このパートナーは、同じリージョンで独自の Snowflake アカウントも持っている
  • そこでこのパートナーに、Data Sharing を使用してこのデータを共有し、分析できるようにする

UI の上部にある[Share]タブをクリックします。次に、ページのさらに下にある「Outbound」ボタンをクリックします。

9.2.2

「Create」ボタンをクリックし、表示されるフィールドで以下を入力します。

  • 「Secure Share Name」に「TRIPS_SHARE」と入力
  • 「Database」で、ドロップダウンを使用して「CITIBIKE」を選択
  • 「Tables & View」では、データベースオブジェクトブラウザを使用して、CITIBIKE> PUBLIC> TRIPS を選択
  • 「Apply」ボタンをクリック

9.2.3

ボックスの下部にある青い「Create」ボタンをクリックします。ウィンドウでは、Secure Share が正常に作成されたことを示しています。

実際には、シティバイクのアカウント管理者が「Next:Add Consumers」の青いボタンをクリックして、パートナーの Snowflake アカウント名やタイプに関する情報を追加しますが、本演習においては自身のアカウントを使用しているだけなのでここで終了とします。

※ アカウントを追加するところは、後述の番外編で紹介します。

9.2.4

ボックスの下部にある「Done」ボタンをクリックします。このページでは「TRIPS_SHARE」が表示されます。

データのコピーを作成せずに、安全な方法で共有しています。他アカウントに対してデータのアクセスを許可するのに数秒しかかからないことが確認できます。

番外編:Reader アカウントを作成してみる

演習には載っていませんが、せっかく一通りを操作に触れたので Reader アカウントへの共有もやってみます。

Secure Shares の Outbound の画面から、Share 済みの項目に対して「Add Consumers」が選択できます。

こちらを選択すると以下のウィンドウが立ち上がり、Account Type に Reader を選択した場合には Reader アカウントを選択、Full を選択した場合には Snowflake アカウントを選択する流れとなります。

■ Reader を選択

■ Full を選択

Reader アカウントの作成

「Create a Reader account」を選択して、Reader アカウントを作成してみます。必要項目を入力して「Create Account」ボタンをクリックします。

Reader アカウント用の URL が生成されます。

作成した Reader アカウントを共有先として加えます。

設定が完了し、Share With の項目が、先程までは「Add Consumers」となっていましたが、共有先の Locator が表示されています。

Reader アカウントでログイン

Reader アカウント用に生成された URL にアクセスしてログインすると以下のウィンドウがでてきます。「I'm a Data Consumer」を選択して進めてみました。

左上のロゴの右下に小さく「Reader」と出ていますね。メニューバーの[Share]の Inbound の画面では、共有された情報が確認できました。

演習は以上となります!お疲れ様でした!

Snowflake では、機密性を損なうことなくデータを安全に共有するためのいくつかの方法が用意されており、Table や View だけでなく、Secure View、セキュア UDF(User Defined Functions)、および Secure Joins も共有できます。

Data Sharing に関する詳細はドキュメントをご参照ください。

演習のまとめと次のステップ

このチュートリアルは、Snowflake の実践的な入門として設計されており、Snowflake の使用方法の説明と合わせて、その主要な機能と差別化要素の一部を紹介しました。

  • Web UI の説明
  • 構造化データおよび半構造化データのロード
  • テーブル間の結合をクエリ
  • オブジェクトのクローン(ゼロコピークローンの実行)
  • ユーザーエラーの取り消し
  • ロールとユーザーの作成と特権の付与
  • 他のアカウントとの安全かつ簡単なデータ共有

演習は終了となりますが、ぜひトライアルを継続して独自のサンプルまたは実データのロードしたり、演習では取り上げていない Snowflake の機能をお試しいただけますと幸いです。

参考情報

環境の削除

本演習で作成されたすべてのオブジェクトを削除して環境をリセットする場合は、ワークシートで以下の SQL を実行します。

ワークシートのコンテキストを設定

use role accountadmin;
use warehouse compute_wh;
use database weather;
use schema public;

演習で作成したすべてのオブジェクトを削除

drop share if exists trips_share;
drop database if exists citibike;
drop database if exists weather;
drop warehouse if exists analytics_wh;
drop role if exists junior_dba;

さいごに

以上で HANDS-ON LAB GUIDE FOR SNOWFLAKE FREETRIAL の紹介は終了となります。演習の紹介は終了となりますが、アドベントカレンダーはまだまだ続きます!明日の 11 日目は たまちゃん による「リソースモニターを設定してみた」の予定です。お楽しみに!