#09:Data Sharing 機能をまとめる| Snowflake Advent Calendar 2019 #SnowflakeDB

2019.12.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、大場です。

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

流れ的に本日は演習の「Module 9: Data Sharing」の紹介になるのですが、Data Sharing の概要動画がありましたので、今日はこちらを紹介して、明日の記事で演習の紹介をしたいとおもいます。

ということで、本記事では Snowflake が提供している「Easily Sharing Data with Snowflake」の動画に沿って Data Sharing の機能を紹介します。

従来型のデータ共有

組織外にデータを共有することは、データ駆動型の企業が直面している最も困難なタスクの1つです。データの共有においては以下のようなアプローチを取っていることが多いのではないでしょうか。

  • データの提供元は各データセットを分解してデータセットを FTP サイトにロードし、データの受け取り側がそのデータを独自のデータベースにコピーする
  • 他のツールでクラウドプラットフォームに共有(ETLが必要)
  • 電子メールで共有(処理が遅く、非常に小さなファイルセットに制限される)

さらには、複数のグループに対して部分的なデータセットを共有するケースでは、データの分類とそのアクセス許可のプロセスが非常に複雑になります。そして、これらの方法では、データが更新された際に最初からプロセスをやり直すことになります。

Snowflake におけるデータ共有

Snowflake では、共有データを配布および使用において新しいアプローチをとります。このアプローチでは実際にデータセットをコピーする必要がありません。Snowflake のアカウント間でデータを共有し、データのサブセットへのアクセスをサブスクライバー側に許可します。各サブスクライバーが個別にデータを必要とする場合、個別のビューを持つことができます。重複するデータであっても安全に共有でき、更新されたデータはすべてのサブスクライバー側のアカウントですぐに利用できます。

デモンストレーション

デモンストレーション概要

以下のユースケースを用いて説明します。

 

3行のデータABC, LMN, XYZ があり、以下のように共有します。

  • すべてのデータ:ConsumerA と共有
  • 最後の2行のデータ:ConsumerB と共有

行に対して、2つの異なるグループを割り当てることでこれを行います。

group_one は最初の行(ABC)、group_two は2番目以降の2行(LMN, XYZ)です。"demo4" の ConsumerA には、group_one, group_two のすべてのデータを共有します。"sfcsandbox" の consumerB には、group_two のデータのみを共有します。

テーブル:data

データの3行とそれらが属するグループで構成します。

テーブル:account_mapping

アカウントのマッピング用のテーブルを用意します。すべてのデータは "demo_4" でユーザーに共有されるようにします。また、"sfcsandbox" には一部のデータが共有されるようにします。重要なことは、このデータを共有するために、このデータを移動したり分解したりする必要はなく、あくまでも他のアカウントに指定のデータに対するアクセス権を付与するだけ、ということです。

デモンストレーション

動画ではこの後 Worksheet から以下の操作をおこなっています。

  • 共有のための設定
    • data テーブル、account_mapping テーブルを確認
      • data テーブルの3行を確認
      • account_mapping テーブルで DEMO4 アカウントが group_one、group_two の両方のグループにアクセスできることを確認
      • SFCSANDBOX は、group_one のグループのみであることを確認
    • データを共有するための「Share」を作成
    • アカウントのマッピングをするための「Secure View」を作成
      • アカウントと、account_mapping でマッピングしたデータを一致させる
    • データベース、スキーマ、ビューに権限を付与し、「Share」からアクセスできるようにする
    • アカウントを「Share」に追加
  • SFCサンドボックスアカウントでデータを確認
    • 作成した「Share」を確認
    • この「Share」を使用して新しいデータベースを作成(※ この操作では元のデータベースを参照しているだけでデータコピーはしていない)
    • アクセスできるデータを確認(※ 元のアカウントで共有したものと同じデータベースですが、最初の行にしかアクセスできない)
  • もう片方のアカウントで同じようにデータを確認
    • すべてのデータにアクセスできることを確認

さいごに PUBLISHER のアカウントで元のテーブルにデータを追加して Consumer 側のアカウントのデータが更新されることを確認しています。

新しいUIと追加機能

なんと、記事を書いている途中で以下の動画を見つけました。結論としては Web の UI が新しくなっており、上記のデモンストレーションで紹介されている共有設定のほとんどは、Web インタフェースから設定できるようです。また、「Readerアカウント」というのが作れるようになり、共有先が Snowflake のアカウントをもっていなくても共有機能が使えて便利になっています。設定の雰囲気はぜひ動画をご参照ください。

 

さいごに

Data Share の機能を紹介しました。集約されたデータを外部の組織、あるいは部署、チームに共有するのにとても便利そうです。また、共有においてデータをコピーするわけではないので(ポインタを渡すだけなので)安全に共有できますね。

ドキュメントとホワイトペーパーがありましたので詳細はこちらをご参照ください。

明日の 10 日目は「ハンズオンラボ:データ共有」を紹介します。お楽しみに。それではまた。