❄️

Snowflakeのデータ共有方法がいつの間にか増えていたので整理する

2022/11/30に公開約8,300字

この記事はSnowflake Advent Calendar 2022のPart2の1日目です。Part1の1日目はyoheiさんの「Snowflake でサポート対象外のバージョンでアクセスしているクライアントを見つける」です。

はじめに

Snowflakeはデータ共有が超強力で超イケてるんだけど色々あります(2022年12月現在)

あとから共有方法が増えたりして、少々わかりにくいところもあるので、今回は世界一わかりやすく説明してみたいと思います。

データ共有も色々ある

微妙にレイヤ揃ってないんですが、今回は4つをご紹介します。
ちなみに今回の4つは…

  1. ダイレクト共有
  2. マーケットプレイス
  3. プライベートリスト(New!)
  4. データエクスチェンジ

で、Snowsight(WebUI)の左メニューから「データ>プライベート共有」で遷移した画面の「共有」ボタンで出てくるやつです。

順番前後してるかつ、ちょいちょい用語がブレてて申し訳ないんですが…


ここでの「SF_JAPAN_SE」は私が所属している「データエクスチェンジ」の名前

に対応してます。ちなみにネタバレですが、今回は新機能の3を推します。

前提として…データ共有の制限事項

プロバイダ(データ提供側)とコンシューマ(データ利用側)が、同一クラウドの同一リージョン(例:両方ともAWS Tokyo)のSnowflakeを利用している必要があります。


サポートされているクラウドリージョン(公式ドキュメントから引用)

同一でない場合(例えばAWS TokyoとAzure JapanEast)は、プロバイダが、「コンシューマが利用しているリージョン」に、共有したいデータをレプリケーションしてあげる必要があります …が超簡単に自動で出来るようになりました(後述)

それぞれのデータ共有方法を紹介

共有方法がいくつかある経緯としては… 元々「ダイレクト共有」があって、「マーケットプレイス」が非常に盛んになる中、マーケットプレイス用に色々便利機能や画面が拡充されて、その便利機能を逆輸入したのが「プライベートリスト」みたいな雰囲気です。

…なので冒頭に紹介したメニューから以外にも、Snowsight(WebUI)の左メニュー「データ>プロバイダーStudio」からも「マーケットプレイス」「プライベートリスト」の設定が出来たりします(ややこしい原因)


以下、それぞれの超概要と違いについて説明します。あくまでも概要なので詳細な利用方法は、公式ドキュメントで確認してください(特に色々と権限まわりの設定は必要になります)

1.ダイレクト共有

一番スタンダード(だった)方法。でも今なら(要件次第だけど)プライベートリストの方がいいかも?理由は後述。


ダイレクト共有

こんな感じで共有したいテーブルやビューを指定して、共有したい先のSnowflakeアカウントを指定します(複数アカウント設定可能)


別リージョンのアカウント選択した場合

ただし同一リージョンじゃないSnowflakeアカウントを指定すると「XX99999は存在しません」ってなります。

  • ちなみにここは地味にアカウントロケーターじゃないとダメですね… アカウントロケーターについては、Snowflakeアカウント識別子のドキュメントにて

普通に使うならこれで全然OKでもある

ただし、プロバイダはコンシューマから「どれくらい利用されているか?」が確認出来ないのと、プロバイダとコンシューマが別リージョンのときは、「別途とコンシューマと同じリージョンにSnowflakeアカウントを作成」して、「共有したいデータのレプリケーションを設定する」という必要があり少々面倒でした(が、この2つの課題は解決してるという話をこれからします)

2.マーケットプレイス

プロバイダーStudioのリスト作成に遷移します。

ここで「Marketplaceの誰でも」を選択すると、マーケットプレイスへの出品になります。さらに「無料」とか「カスタマイズ」とかあるんですが、詳しくはドキュメントで。マーケットプレイス、インフラコストも運用コストもそんなにかけずに、データ共有したり、販売したり出来るんで是非チャレンジしてみてください!


こんな感じでどのリージョンに載せるか選択できます


マーケットプレイスへの出品方法自体は本エントリでは扱わないのですが、マーケットプレイスには便利な機能が2つあるの紹介していきます。

リストの自動複製

前述の通りで、プロバイダーは、コンシューマが利用しているリージョンにデータをレプリケーションして準備しておく必要があるのですが、ここで「無料」リストの場合は、リストの自動複製が使えます。

Snowflakeがいい感じで、リストしたリージョンにデータをレプリケーションしてくれるので便利です(リストしたリージョンに「Snowflakeアカウント作って→レプリケーションを設定する」をいう作業が不要になる)

ちなみに自動複製を設定したタイミングでは、別リージョンへのレプリケーションは実施されず、リストしたリージョンで初めてコンシューマから利用されるタイミングでレプリケーションされます…なので初めてリクエストしたコンシューマはレプリケーション完了まで待つ必要があります(もちろん同一リージョンならレプリケーションは不要!)


初回にアクセスしたコンシューマに表示される

詳しくは、公式ドキュメント:リストの自動複製の設定参照でお願いします。

必要な権限
リストの自動複製タスクは、組織の管理者アカウント(ORGADMIN のロールが有効になっているアカウント)のアカウント管理者(ACCOUNTADMIN のロールを持つユーザー)によって実行できます。さらに、使用するロールには、リストに対する MODIFY または OWNERSHIP 権限が付与されている必要があります。

データの利用状況が確認できる

プロバイダーStudioの「分析」で、いろいろ確認できます(Snowsightのダッシュボードに表示するのもよい)


Snowflakeブログより引用

引用元 : Leveraging Provider Analytics to Drive Business Growth in Snowflake Marketplace


またDATA_SHARING_USAGEスキーマにある各ビューでリスト関連の情報を取得することも出来ます。

SNOWFLAKE データベースの DATA_SHARING_USAGE スキーマには、Snowflake Marketplaceまたはデータ交換で公開されたリストに関する情報を表示するビューが含まれています。これには、テレメトリデータ(クリック数)と消費データ(コンシューマーが実行するクエリ)が含まれます。

ビュー 内容
LISTING_TELEMETRY_DAILY データ交換およびリージョンごとに毎日のテレメトリデータ
LISTING_EVENTS_DAILY 完了したリクエストの履歴、データ交換のイベント
LISTING_CONSUMPTION_DAILY リストに関連付けられた共有データの消費
LISTING_ACCESS_HISTORY アカウントが所有するすべてのリストのアクセス履歴

3.プライベートリスト

これは比較的新しい共有方法で…「1.ダイレクト共有」に「2.マーケットプレイス」 用に拡充した便利な機能を追加したイメージです(なのでマーケットプレイスへの出品に興味ない人も、念の為「2.マーケットプレイス」 の項目も読んでください)


↑のメニューで「指定したコンシューマに共有」を選ぶと、プロバイダーStudioに遷移します。そこで一見するとマーケットプレイス出品っぽい画面から、「指定したコンシューマのみ」を選択して…

共有するデータ(テーブルやビュー。複数選択可)を選択して、共有したい相手(コンシューマ)を指定(これも複数選択可)って、ここまでは「1.ダイレクト共有」と同じですよね…

  • ここは「組織名.アカウント名」の形式でいけるのか… Snowflakeアカウント識別子が、2種類あるのは2021年夏に後から組織の機能が追加されたからですね…


説明がやさしい

ここで同一リージョンにいないコンシューマを指定すると…

自動複製が使える!

マーケットプレイスに出品したデータ同様に自動複製が使えます。詳しくは「2.マーケットプレイス」のところの説明参照


みんな大好き自動複製の設定画面

共有先(コンシューマ)では…

このように見えます。「プライベート共有リスト」のところに、プライベートリストとデータエクスチェンジ(後述)で共有されたデータが出てきますね。「直接共有」のところにダイレクト共有されたデータが出てくる。

データの利用状況も確認できる

プロバイダは、マーケットプレイスに出品したデータ同様に、プロバイダーStudioの「分析」でコンシューマのデータ利用状況を確認したり…


テスト利用なのでスカスカ…

DATA_SHARING_USAGEスキーマにある各ビューでアクセス関連の情報を取得することも出来ます。

ビュー 内容
LISTING_TELEMETRY_DAILY データ交換およびリージョンごとに毎日のテレメトリデータ
LISTING_EVENTS_DAILY 完了したリクエストの履歴、データ交換のイベント
LISTING_CONSUMPTION_DAILY リストに関連付けられた共有データの消費
LISTING_ACCESS_HISTORY アカウントが所有するすべてのリストのアクセス履歴

ダイレクト共有とどっちを使うべき?

繰り返しになりますが、プライベートリストは「1.ダイレクト共有」に「2.マーケットプレイス」 の便利な機能を追加したイメージなので、今後はプライベートリストを使ってもいいのかなとは思います(いわゆる個人の感想です)

なお、制限事項として…2022年12月1日現在プライベートリストは、プロバイダーStudioのみで操作可能です(コマンドはまだ未対応)

その他考慮事項はリストの操作に関する一般的な考慮事項もご利用の際には必ずご確認ください。

4.データエクスチェンジ

超ざっくり表現すると、プライベートリストとは順番が違うだけで「先に共有先のグループ(複数のコンシューマを登録可)を設定して、そこにデータを共有する」イメージです。


比較的レアなデータエクスチェンジの画面「共有の管理」

(もちろんユースケース次第ではありますが)グループ内の全コンシューマにデータが共有されてしまうので、プライベートリストの方が使いやすかもしれません。またプライベートリストとは違ってデータ共有の際に、マーケットプレイスと同じ用にプロバイダの詳細な情報やサンプルクエリを登録する必要があったりもします。


この後の遷移はデータマーケットプレイスとだいたい同じ

なおデータエクスチェンジ機能は標準では有効になっていないので、サポートに有効化を依頼する必要があります。

まとめ

この記事では、いつの間にか増えていたSnowflakeのデータ共有方法についてまとめてみました。そんな感じでSnowflakeでのデータ共有は超簡単なので、みなさんもどんどんデータコラボレーションして、データの価値を最大化してください!


この記事はSnowflake Advent Calendar 2022 Part2の1日目でした。Part1の2日目は@__allllllllez__さんの「」、Part2の2日目は@az-akさんの「Snowflakeのバージョン管理とバージョンアップ通知を受け取る方法」です!

Discussion

ログインするとコメントできます