Snowflakeにおける安全な共有（Direct Share・Data Exchange）によるマルチクラウド・マルチリージョンでのデータ共有について

## 概要

Snowflakeにおけるデータシェア機能（Direct Share・Data Exchange）を用いたマルチクラウド・マルチリージョンでのデータ共有の実施に関する調査内容を共有します。内容としてまとまりがなく、情報の羅列になってしまっていますが、下書きに保存されたままになっていたので、共有しちゃいます。

前提として、下記の項目があります。

- 自社内の利用を想定していること
- 外部へのデータ販売を実施しないこと
- 分析システム（BIツール、解析ツール）を特定のクラウドサービスにて実施すること

## 背景

マルチクラウドを考慮したデータ連携を実施した際には、いわゆるP2P（ピア・ツー・ピア）型のデータ連携を実施することが多く、開発・運用が煩雑化するという問題があります。

![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/7de6493c-4d6f-9a22-bcfe-0b323875acc0.png)


上記の問題を解決するために、各クラウドベンダー・各リージョン間でData LakeとDWHのデータ連携を簡単に行うために、下記のような構成が実施できないかを検討しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/e801e157-2cd2-b99e-a234-e1e4dd89edf2.png)

## 現時点での結論
Snowflakeを直接連携するのではなく、各クラウドベンダーのおけるストレージに差分連携用データを配置して、そのストレージをSnowflakeに連携する方針がよさそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/80b1e49b-744d-ddf8-9582-9cb6bb95d0a0.png)

Snowflakeは、単一アカウントにて力を発揮するツールであるため、マルチクラウド・マルチリージョンで同期する目的で利用するのは最適ではないようです。当初の目的である管理煩雑さの回避は難しそうです。

## Snowflakeのおける安全な共有とは

Snowflakeにおける下記機能群であり、Snowflakeアカウント間でデータを同期する方法の総称です。

今回は、Direct Share、および、Data Exchangeを検討しました。

>   -   Direct Share
>   -   Snowflake Data Marketplace
>   -   Data Exchange

引用元：[Secure Data Sharingのための製品の概要](https://docs.snowflake.com/ja/user-guide/data-sharing-product-offerings.html)

### Direct Shareとは

下記のように説明されております。

>   Direct Shareは、SnowflakeのSecure Data Sharingを利用して、アカウント間のデータ共有を可能にする最も簡単な形式のデータ共有です。
>
>   データプロバイダーは他の会社と簡単にデータを共有できるため、データをコピーしたり移動したりせずに、Snowflakeアカウントに表示できます。

引用元：[Secure Data Sharingのための製品の概要](https://docs.snowflake.com/ja/user-guide/data-sharing-product-offerings.html)

### Data Exchangeとは

下記のように説明されております。

>   Data Exchangeは、招待したメンバーの選択したグループ間でデータを安全にコラボレーションするための独自のデータハブです。これにより、プロバイダーはデータを *公開* できるようになり、コンシューマーはデータを *探索* できるようになります。
>
>   サプライヤー、パートナー、ベンダー、顧客などのビジネスエコシステム全体や、自社の他のビジネスユニットと大規模にデータを共有できます。誰がデータに参加、公開、利用、アクセスできるかを制御できます。

引用元：[Secure Data Sharingのための製品の概要](https://docs.snowflake.com/ja/user-guide/data-sharing-product-offerings.html)

## Direct ShareとData Exchangeを、マルチクラウド・マルチリージョンで実施する際の注意事項

Direct Shareの説明分にて、”データをコピーしたり移動したりせずに”と記載がありますが、マルチクラウド・マルチリージョン間で同期する際にはデータベースの複製を実施する必要があるようです。

>   グローバルSnowflakeでは、データベースの複製を利用して、データプロバイダーが異なる 地域 およびクラウドプラットフォーム間でデータコンシューマーとデータを安全に共有できます。

引用元：[地域とクラウドプラットフォーム間で安全にデータを共有する](https://docs.snowflake.com/ja/user-guide/secure-data-sharing-across-regions-plaforms.html)

Data Exchangeにおいても下記の記載があり、データベースの複製を実施する必要があります。

>   地域間でのデータ共有には、Snowflakeデータ複製機能を利用します。。

引用元：[データリストの管理 - リモート地域でのリストの作成とデータの複製に関する考慮事項](https://docs.snowflake.com/ja/user-guide/data-exchange-managing-data-listings.html#considerations-for-creating-a-listing-in-a-remote-region-and-replicating-data)

### データベースの複製とは

下記のように説明されております。

>   （同じ組織内の）Snowflakeアカウント間でデータベースを複製し、データベースオブジェクトと保存データの同期を維持できます。

データベースの複製の考慮事項として、ドキュメントに記載があるので事前に確認が必要です。

>    このトピックの内容：
>
>   -   複製と自動クラスタリング
>   -   複製とマテリアライズドビュー
>   -   複製およびマスキングポリシー
>   -   Time Travel
>   -   複製と大規模でチャーン率の高いテーブル
>   -   複製とクローニング
>   -   別のデータベース内のオブジェクトへの参照
>   -   複製とアクセス制御
>   -   履歴使用データ

引用元：[データベースの複製の考慮事項](https://docs.snowflake.com/ja/user-guide/database-replication-considerations.html)

### データ連携時には更新・削除の処理を実施しないように

今回のシナリオとしては、"複製と大規模でチャーン率の高いテーブル"という観点で主な考慮が必要となり、簡単に言うと更新と削除の処理がなるべく実施されないようにする必要があります。

>   テーブルの1つ以上の行が更新または削除されると、このデータをプライマリデータベースに保存する、影響を受けるすべてのマイクロパーティションが再作成され、セカンダリデータベースと同期する必要があります。大規模でチャーン率の高いディメンションテーブルの場合、複製コストがかなり高くなる可能性があります。

引用元：[データベースの複製の考慮事項 - 複製と大規模でチャーン率の高いテーブル](https://docs.snowflake.com/ja/user-guide/database-replication-considerations.html#replication-and-large-high-churn-tables)


### データベースの複製のコストについて

下記のコストがかかるようです。大量データとなった場合には、データ転送量と複製先のストレージのコストがけっこう高くなる可能性があります。

-   データのメンテナンス（マテリアライズドビューの更新等）の仮想ウェアハウス
-   データ転送量
-   複製先のストレージ

## 結論

データベースの複製を実施する場合には、データ転送量のコスト、および、複製先のストレージのコストが高額となる可能性があることから、各クラウド・各リージョンで処理したファイルによる連携シナリオがよさそうという結論に至りました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/80b1e49b-744d-ddf8-9582-9cb6bb95d0a0.png)

Snowflakeというツールは、マルチクラウドなSaaS型データウェアハウスと言われておりますが、マルチクラウドに展開することは可能だが、マルチクラウドで連携するためには従来のサービス同様の制約があることに注意が必要です。