フォーム読み込み中
AWS Clean Rooms が公開されました。AWS Clean Roomsを使い、外部アカウントとデータを共有しながら分析を行う方法を紹介します。
AWS Clean Roomsは自社のデータセットと、外部パートナーのデータセットを簡単安全に任意のアカウント上で統合し、照会、分析作業を行えるようにするサービスです。
通常、外部パートナーとデータを連携する場合は、共有するデータから不要なデータを削除、マスキングしたうえでコピーし、データを共有する環境へ送付する等の作業が必要でした。
AWS Clean Roomsを使えばデータの受け渡しの煩雑さを避けられます。
共有を行うテーブルも列単位の粒度で選択することができます。SQLのクエリタイプも制限をかけられます。データの誤用や流出をNDA等の契約による縛りだけではなく、技術的に防止できます。
自社データを外部のビジネスパートナーのデータで補完しながらビジネスを展開する最近の流れを意識したサービスでしょう。
簡易的にどのようなことができるか試してみます。実現したい要件を決めましょう。
クエリを実行するアカウント(今回はA)側でも、自身のデータセットへ制限をかけられます。B側でクエリを実行するという構成にもできるため、参照可否のデータ列の指定はどのアカウントのテーブルに対しても可能です。
参照可にしている列と、joinのみ可にしている列も設けています。joinして連携するのであえばデータの参照と同義に見えますが、join操作はAWS Clean Rooms内部で秘匿化されて実行されるため、実データは公開されることはありません。join列をselectで指定することもできません。
Aのデータセット(table-a)
| column-a-1 (参照可) | column-a-2 (joinのみ可) | column-a-3 (参照不可) |
data-A | data-b | data-c |
data-D | data-e | data-f |
data-g | data-h | data-i |
Bのデータセット(table-b)
| column-b-1 (参照可) | column-b-2 (joinのみ可) | column-b-3 (参照不可) |
data-A’ | data-b | data-c |
data-D’ | data-e | data-f |
data-x | data-y | data-z |
column-*-2でjoinし、column-*-1をselectするので、data-大文字のデータが結果として取得できるはずです。
AWS Clean Roomsの操作を行う前に、事前にアカウントA、B側で上記のテーブルを作成しておきます。今回は、CSV形式でデータをS3に保存し、そこをデータソースとしてAWS Glue上でデータカタログ化しています。CSVの区切り単位が、テーブルの各列となります。S3に配置するデータでテーブル化できるフォーマットは、CSV以外にも、Parquet、JSONなどが対応しています。
各種制限はAWS Clean Rooms側で行うため考慮する必要はありません。
ポイントとなる点を中心に見ていきましょう。
1 コラボーレーションの作成(Aのみ)
コラボレーションという論理的な境界を作成します(下段キャプチャ画面内ではmy-collaboration)。コラボレーションの作成者であるコラボレーションクリエータがAアカウントとなります。
2−1アカウントの招待(Aのみ)
コラボレーション内で、データの共有をしてもらうアカウントBを招待します。
招待後、クエリを実行しその結果を得られるアカウントを指定します。本構成では要件に合わせクエリを実行できるアカウントはAのみとします。
2−2 アカウントの受領(Bのみ)
B側ではコラボレーションへの参加通知が出てくるので受理します。
この時点で、A、Bアカウント共に下記のような画面になります。
コラボレーションメンバのアビリティ欄で、要件通りに、Bはデータの提供はするが、クエリは行えないことを最終確認しておきましょう。
3-1 利用するテーブルの指定(A、B両方)
データセットの対象はAWS Glueでカタログ化したデータベースとテーブルのみです。
アカウントA、B側のそれぞれのAWS Clean Roomsの画面では、自身のアカウント内のGlue化したデータベースとテーブルが候補としてリスト表示されます。コラボレーションで共有するテーブルを選択します。テーブルの指定時に許可するカラムもここで指定します。
3-2 分析ルールタイプの設定(A、B両方)
利用するテーブルを選択後、分析タイプを決めることになります。AggregationとListがあります。今回はListを選びます。
AggregationはSUMやAVG等の集計用に使います。
以上の操作を終えると、コラボレータ内のTablesタブに、互いの共有を許したテーブル情報が見えてきます。
下記はAアカウントの画面です。Tables associated by youにA側で共有したtable-aが、Tables associated by other membersとしてB側が共有したtable-bが現れています。
4. クエリの実施
クエリを許可したAアカウント側からクエリを打ちます。画面のコラボレーション内の下段のクエリタブ内に、クエリ用のエリアがあります。
A側
B側
クエリの実施を許可していないB側にはクエリを実施するタブ自体が出てきていません。
共有しているテーブルの各列で何を許可しているかを確認しながら、クエリ構文を作成します。
出力先としてS3のバケットを指定し、そこへ結果を出力します。
selectを許可していない列を指定すると、期待通りエラーになります。
Column(s) [xxx] is not allowed in select
AWSアカウント間でデータを安全に授受して分析する環境が、ネイティブなサービスとして提供されたのは非常に便利だと思います。
保持しているデータはそのままに、AWS Clean Roomsサービス内の設定画面から、見せる・見せない列をカラム単位で指定し、目的にあわせたSQLレベルでの要件を定義できる操作性もよいですね。
条件に該当するページがございません