クエリ テンプレートを使用する
BigQuery データ クリーンルームのクエリ テンプレートを使用すると、分析情報を得るまでの時間を短縮し、セキュリティと制御のレイヤを追加して、データ漏洩の懸念を最小限に抑えることができます。データ クリーンルームで実行できるクエリを事前に定義して制限することで、次のことができます。
機密データの漏洩を防ぐ。クリーンルームでクエリを実行するサブスクライバーに探索の柔軟性が高まると、データオーナーは機密情報の偶発的または意図的な漏洩のリスクが高まると感じます。
技術に詳しくないユーザーのオンボーディングと導入を簡素化します。多くのデータ プロバイダは、クリーンルームのサブスクライバーの技術的なスキルが低いことを想定しています。特に、プライバシー重視の SQL クエリの作成や、プライバシー バジェットの適切な割り当て方法の理解については、スキルが低いと想定しています。
データ サブスクライバーに一貫した分析結果を保証します。データ クリーンルームで実行されているクエリを制御する方法がない場合、特定のデータ分析ルールを適用し、プライバシー規制の遵守状況を確認することが難しくなります。
クエリ テンプレートを使用すると、データオーナーとデータ提供者は、データ クリーンルームのユースケースに合わせて特別に調整された事前定義済みの承認済みクエリを作成し、サブスクライバーが使用できるように公開できます。事前定義されたクエリは、BigQuery のテーブル値関数(TVF)を使用して、テーブル全体または特定のフィールドを入力パラメータとして渡し、テーブルを出力として返します。
制限事項
- クエリ テンプレートでサポートされるデータ参照は最大 2 つです。つまり、TVF のクエリの定義に使用されるデータと、TVF で受け入れられるデータ パラメータ入力です。
- TVF のクエリ定義内で複数のテーブルまたはビューを参照できますが、それらはすべて同じデータオーナーまたは当事者に属している必要があります。
- クエリ テンプレート TVF は、
TABLEとVIEWの固定型のみをサポートします。 - クエリ テンプレート定義には、TVF と同じ制限が適用されます。
始める前に
次の手順で、 Google Cloud プロジェクトの Analytics Hub API を有効にします。
コンソール
[Analytics Hub API] ページに移動します。
Google Cloud コンソールのツールバーで、プロジェクトを選択します。
API がまだ有効になっていない場合は、[有効にする] をクリックします。
bq
gcloud services enable コマンドを実行します。
gcloud services enable analyticshub.googleapis.com
必要なロール
このドキュメントのタスクの実行に必要な権限を取得するには、管理者に次の IAM のロールを付与するよう依頼してください。
-
データ クリーンルームで TVF を作成または削除する:
-
プロジェクトに対する Analytics Hub パブリッシャー(
roles/analyticshub.publisher) -
プロジェクトに対する Analytics Hub サブスクライバー(
roles/analyticshub.subscriber)
-
プロジェクトに対する Analytics Hub パブリッシャー(
-
TVF を承認する: プロジェクトに対する BigQuery データオーナー (
roles/bigquery.dataOwner) -
データ クリーンルームで TVF リスティングを追加、更新、削除する:
-
プロジェクトに対する Analytics Hub パブリッシャー(
roles/analyticshub.publisher) -
プロジェクトに対する Analytics Hub サブスクライバー(
roles/analyticshub.subscriber)
-
プロジェクトに対する Analytics Hub パブリッシャー(
-
クエリ テンプレートを作成する:
-
プロジェクトに対する Analytics Hub パブリッシャー(
roles/analyticshub.publisher) -
プロジェクトに対する Analytics Hub サブスクライバー(
roles/analyticshub.subscriber)
-
プロジェクトに対する Analytics Hub パブリッシャー(
-
クエリ テンプレートを承認する:
-
プロジェクトに対する Analytics Hub パブリッシャー(
roles/analyticshub.publisher) -
プロジェクトに対する BigQuery データオーナー(
roles/bigquery.dataOwner)
-
プロジェクトに対する Analytics Hub パブリッシャー(
-
クエリ テンプレートを使用してデータ クリーンルームをサブスクライブする:
-
プロジェクトに対する Analytics Hub サブスクライバー(
roles/analyticshub.subscriber) -
データ クリーンルームをサブスクライブするプロジェクトに対する Analytics Hub サブスクリプション オーナー(
roles/analyticshub.subscriptionOwner)
-
プロジェクトに対する Analytics Hub サブスクライバー(
-
クエリ テンプレートで定義されたクエリを実行する:
-
プロジェクトに対する BigQuery データ閲覧者(
roles/bigquery.dataViewer) -
プロジェクトに対する BigQuery ユーザー(
roles/bigquery.user)
-
プロジェクトに対する BigQuery データ閲覧者(
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
これらの事前定義ロールには、このドキュメントのタスクを実行するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
このドキュメントのタスクを実行するには、次の権限が必要です。
-
データ クリーンルームで TVF を作成または削除する:
- プロジェクトに対する
bigquery.routines.create - プロジェクトに対する
bigquery.routines.update - プロジェクトに対する
bigquery.routines.delete
- プロジェクトに対する
-
TVF を承認する: ルーティンがアクセスするデータセットに対する
bigquery.datasets.update -
クエリ テンプレートを作成する:
- プロジェクトに対する
analyticshub.listings.subscribe - プロジェクトに対する
analyticshub.queryTemplates.create
- プロジェクトに対する
-
クエリ テンプレートを承認する:
- プロジェクトに対する
bigquery.routines.create -
ルーティンがアクセスするデータセットに対する
bigquery.datasets.update - プロジェクトに対する
analyticshub.listings.create - プロジェクトに対する
analyticshub.queryTemplates.approve
- プロジェクトに対する
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
既存の TVF をデータ クリーンルームに追加する
Analytics Hub API を使用して、既存の TVF をデータ クリーンルームに追加できます。
projects.locations.dataExchanges.listings.create メソッドを使用します。
次の例は、curl コマンドを使用して projects.locations.dataExchanges.listings.create メソッドを呼び出す方法を示しています。
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -H 'x-goog-user-project:DCR_PROJECT_ID' -X POST https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID/listings?listingId=LISTING_ID -d '{"bigqueryDataset":{"dataset":"projects/PROJECT_ID/datasets/DATASET_ID","selectedResources":[{"routine":"projects/PROJECT_ID/datasets/DATASET_ID/tables/ROUTINE_ID"}],},"displayName":LISTING_NAME"}'
次のように置き換えます。
DCR_PROJECT_ID: データ クリーンルームが作成されたプロジェクトのプロジェクト ID。PROJECT_ID: ソース データセットが含まれていたプロジェクトのプロジェクト ID。DATASET_ID: ソース データセットの ID。LOCATION: データ クリーンルームの場所。CLEAN_ROOM_ID: データ クリーンルームの ID。LISTING_ID: リスティング ID。LISTING_NAME: リスティング名。ROUTINE_ID: ルーティン ID。
クエリ テンプレートのロール
データ クリーンルームのクエリ テンプレートを使用するには、主に 3 つのロールがあります。各ロールには特定のワークフローがあります。これについては、このドキュメントの後半で説明します。
テンプレート作成者: クリーンルーム内で実行されるクエリを定義するユーザー。このロールは、Analytics Hub 管理者、Analytics Hub パブリッシャー、Analytics Hub リスティング管理者のいずれかのロールに似ています。詳細については、テンプレート作成者のワークフローをご覧ください。
テンプレート承認者: テンプレートを使用可能にする前に、クエリ テンプレートの参照を承認する必要があるデータのオーナー。このロールは、Analytics Hub 管理者、Analytics Hub パブリッシャー、Analytics Hub リスティング管理者のいずれかのロールに似ています。詳細については、テンプレート承認ワークフローをご覧ください。
テンプレート サブスクライバー: クリーンルームをサブスクライブし、テンプレートで承認されたクエリのみを実行できるユーザー。このロールは、Analytics Hub サブスクライバーのロールに似ています。詳細については、テンプレート サブスクライバー ワークフローをご覧ください。
テンプレート作成者のワークフロー
クエリ テンプレートの作成者は、次の操作を行うことができます。
データ クリーンルームにリスティングを追加する
クエリ テンプレートを作成する前に、データ クリーンルームにデータを追加する必要があります。データ クリーンルームにリスティングを作成する手順は次のとおりです。
[共有(Analytics Hub)] ページに移動します。
クエリ テンプレートを作成するデータ クリーンルームの表示名をクリックします。
[データを追加] をクリックし、手順に沿って分析ルールが構成されたビューを作成します。詳細な手順については、リスティングを作成する(データを追加する)をご覧ください。
- 他のユーザーのデータを追加するには、別の信頼できる提供者とデータ クリーンルームを共有します。このデータ提供者は、クエリ テンプレートで使用できるように、クリーンルームにデータを追加する必要があります。
リスティングのデータ下り(外向き)制御を設定します。
リスティングのメタデータ制御を設定します。前の手順で追加したデータのスキーマと説明のみを共有する場合(共有データ自体は共有しない場合)は、[Exclude access to listing from linked dataset] を選択します。
リスティングの詳細を確認します。
[データを追加] をクリックします。データのビューのメタデータがクリーンルームに追加されました。
クエリ テンプレートを作成する
次のオプションのいずれかを選択します。
コンソール
[共有(Analytics Hub)] ページに移動します。
クエリ テンプレートを作成するデータ クリーンルームの表示名をクリックします。
データ クリーンルームで、[テンプレート] タブに移動します。
[テンプレートを作成] をクリックします。
テンプレートの名前と説明を入力します。
[次へ] をクリックします。
クリーンルームに追加されたビューのスキーマを確認し、クエリ定義を提案できます。
- サポートされている
CREATE TABLE FUNCTION構文を使用してクエリを定義してください。 定義が固定されたテーブルまたはビュー全体を渡します。データ クリーンルームに追加されたデータから、プロジェクト ID とデータセット ID を含むテーブルの完全なパス参照を定義する必要があります。例:
query_template1(t1 TABLE<year INT64>) AS (SELECT * FROM `project_id.dataset_id.table_id` WHERE year = table_id.year)データにプライバシー分析ルールを適用した場合は、この TVF にプライバシー固有の SQL 構文(
SELECT WITH AGGREGATION_THRESHOLDなど)が含まれていることを確認してください。
- サポートされている
テンプレートの詳細を確認します。
審査に提出せずにテンプレートを保存するには、[保存] をクリックします。クエリ テンプレートのステータスが DRAFT になりました。
クエリ テンプレートを更新するか、審査のためにクエリ テンプレートを送信できます。
API
次の例は、CURL コマンドを使用してクエリ テンプレートを作成する方法を示しています。
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -H 'x-goog-user-project:DCR_PROJECT_ID' -X POST https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID/queryTemplates?queryTemplateId=QUERY_TEMPLATE_ID -d 'query_template { name: "query_template1", display_name: "query_template1", routine { definition_body: "QUERY_TEMPLATE_ID(TVF arguments) AS (TVF_DEFINITION)" } }'
次のように置き換えます。
DCR_PROJECT_ID: データ クリーンルームが作成されたプロジェクトのプロジェクト ID。LOCATION: データ クリーンルームの場所。CLEAN_ROOM_ID: データ クリーンルームの ID。QUERY_TEMPLATE_ID: クエリ テンプレート ID。TVF_DEFINITION: TVF の定義。
次のコードサンプルは、API 呼び出しの definition_body の例を示しています。データ クリーンルームに追加されたデータから、プロジェクト ID とデータセット ID を含むテーブルの完全なパス参照を定義する必要があります。
query_template1(t1 TABLE<year INT64>) AS (SELECT * FROM `project_id.dataset_id.table_id` WHERE year = table_id.year)
definition_body は、ルーティンの定義に類似しています。上記の definition_body は、次のルーティンに変換されます。
CREATE OR REPLACE TABLE FUNCTION <approvers_dataset>.query_template1(t1 TABLE, y INT64)
AS (SELECT * FROM t1 WHERE year > y)
クエリ テンプレートを更新するか、審査のためにクエリ テンプレートを送信できます。
クエリ テンプレートを更新する
クエリ テンプレートを更新できるのは、ステータスが DRAFT の場合のみです。クエリ テンプレートがすでに審査に送信されている場合、変更することはできません。
クエリ テンプレートを更新するには、次のいずれかのオプションを選択します。
コンソール
[共有(Analytics Hub)] ページに移動します。
クエリ テンプレートを含むデータ クリーンルームの表示名をクリックします。
データ クリーンルームで、[テンプレート] タブに移動します。
更新するテンプレートの行で、[アクション] > [テンプレートを編集] をクリックします。
必要に応じて、テンプレートの詳細とクエリ定義を更新します。
[次へ] をクリックします。
クエリ テンプレートを確認し、[保存] をクリックして、テンプレートを審査に送信せずに変更を保存します。
API
次の例は、CURL コマンドを使用してクエリ テンプレートを更新する方法を示しています。
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -H 'x-goog-user-project:DCR_PROJECT_ID' -X PATCH https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID/queryTemplates/QUERY_TEMPLATE_ID?updateMask=display_name -d 'query_template { display_name: "query_template1" }'
次のように置き換えます。
DCR_PROJECT_ID: データ クリーンルームが作成されたプロジェクトのプロジェクト ID。LOCATION: データ クリーンルームの場所。CLEAN_ROOM_ID: データ クリーンルームの ID。QUERY_TEMPLATE_ID: クエリ テンプレート ID。
審査のためにクエリ テンプレートを送信する
次のオプションのいずれかを選択します。
コンソール
[共有(Analytics Hub)] ページに移動します。
クエリ テンプレートを含むデータ クリーンルームの表示名をクリックします。
データ クリーンルームで、[テンプレート] タブに移動します。
審査に送信するテンプレートの行で、[アクション] > [審査のために送信] をクリックします。テンプレートのステータスが「審査が必要」になりました。
API
次の例は、CURL コマンドを使用してクエリ テンプレートを審査用に送信する方法を示しています。
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -H 'x-goog-user-project:DCR_PROJECT_ID' -X POST https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID/queryTemplates/QUERY_TEMPLATE_ID:submit
次のように置き換えます。
DCR_PROJECT_ID: データ クリーンルームが作成されたプロジェクトのプロジェクト ID。LOCATION: データ クリーンルームの場所。CLEAN_ROOM_ID: データ クリーンルームの ID。QUERY_TEMPLATE_ID: クエリ テンプレート ID。
クエリ テンプレートを削除する
クエリ テンプレートは、DRAFT ステータスの場合にのみ削除できます。クエリ テンプレートがすでに審査に送信されている場合、削除することはできません。
次のオプションのいずれかを選択します。
コンソール
[共有(Analytics Hub)] ページに移動します。
クエリ テンプレートを含むデータ クリーンルームの表示名をクリックします。
データ クリーンルームで、[テンプレート] タブに移動します。
削除するテンプレートの行で、[アクション] > [テンプレートを削除] をクリックします。
API
次の例は、CURL コマンドを使用してクエリ テンプレートを削除する方法を示しています。
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -H 'x-goog-user-project:DCR_PROJECT_ID' -X DELETE https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID/queryTemplates?queryTemplateId=QUERY_TEMPLATE_ID
次のように置き換えます。
DCR_PROJECT_ID: データ クリーンルームが作成されたプロジェクトのプロジェクト ID。LOCATION: データ クリーンルームの場所。CLEAN_ROOM_ID: データ クリーンルームの ID。QUERY_TEMPLATE_ID: クエリ テンプレート ID。
テンプレート承認者のワークフロー
クエリ テンプレート承認者は、クエリ テンプレートを承認できます。
TVF が所有していないデータ(他の投稿者のデータなど)を参照している場合、クエリ テンプレートはデータのオーナーのみが承認できます。データのみを参照する TVF を作成する場合(一方向の共有)、クエリ テンプレートを自分で承認できます。
クエリ テンプレートを承認する
次のオプションのいずれかを選択します。
コンソール
[共有(Analytics Hub)] ページに移動します。
クエリ テンプレートを含むデータ クリーンルームの表示名をクリックします。
データ クリーンルームで、[テンプレート] タブに移動します。
審査が必要なテンプレートの行で、[承認ステータス] > [審査が必要] をクリックします。
[承認] をクリックします。
テンプレートの場所を選択します。この場所で、共有用の TVF が作成されます。
提案されたクエリ テンプレートを確認します。
クエリ テンプレートがクリーンルーム内での使用を承認されている場合は、[承認] をクリックします。
API
jobserver.query呼び出しを使用して、クエリ テンプレートからルーティンを作成します。curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -L -X POST https://bigquery.googleapis.com/bigquery/v2/projects/ROUTINE_PROJECT_ID/queries --data '{"query":"ROUTINE_CREATION_QUERY","useLegacySql":false}'
次のように置き換えます。
ROUTINE_PROJECT_ID: ルーティンが作成されたプロジェクトのプロジェクト ID。ROUTINE_CREATION_QUERY: ルーティンを作成するクエリ。
作成したルーティンをデータ クリーンルームに追加します。
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -H 'x-goog-user-project:DCR_PROJECT_ID' -X POST https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID/listings?listingId=LISTING_ID -d '{"bigqueryDataset":{"dataset":"projects/PROJECT_ID/datasets/DATASET_ID","selectedResources":[{"routine":"projects/PROJECT_ID/datasets/DATASET_ID/tables/ROUTINE_ID"}],},"displayName":"LISTING_NAME"}'
次のように置き換えます。
DCR_PROJECT_ID: データ クリーンルームが作成されたプロジェクトのプロジェクト ID。LOCATION: データ クリーンルームの場所。CLEAN_ROOM_ID: データ クリーンルームの ID。LISTING_ID: リスティング ID。PROJECT_ID: ソース データセットが含まれていたプロジェクトのプロジェクト ID。DATASET_ID: ソース データセットの ID。ROUTINE_ID: ルーティン ID。LISTING_NAME: リスティング名。
クエリ テンプレートのステータスを
APPROVEDに更新します。curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -L -X POST https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID/queryTemplates/QUERY_TEMPLATE_ID:approve --data '{}'
次のように置き換えます。
DCR_PROJECT_ID: データ クリーンルームが作成されたプロジェクトのプロジェクト ID。LOCATION: データ クリーンルームの場所。CLEAN_ROOM_ID: データ クリーンルームの ID。QUERY_TEMPLATE_ID: クエリ テンプレート ID。
クエリ テンプレートを拒否する
Google Cloud コンソールで、次の方法でクエリ テンプレートを拒否できます。
- 送信されたクエリ テンプレートの審査を承認しない。
- クエリ テンプレートを削除して、クリーンルームから削除する。
テンプレート サブスクライバーのワークフロー
クエリ テンプレートのサブスクライバーは、データ クリーンルームを表示してサブスクライブできます。クエリ テンプレートのみがクリーンルームに追加されている場合、クリーンルームをサブスクライブすると、基盤となる共有データではなく、対応する TVF へのアクセス権のみが付与されます。
クエリ テンプレートをサブスクライブする
次のオプションのいずれかを選択します。
コンソール
クエリ テンプレートをサブスクライブするには、データ クリーンルームをサブスクライブします。[Exclude access to listing from linked dataset] の設定が無効になっているすべてのリスティングにアクセス権が付与されます。
クエリ テンプレートのサブスクライブ手順は次のとおりです。
[BigQuery] ページに移動します。
クリーンルームをサブスクライブしたときに作成したリンク済みデータセットに移動します。
リンクされたデータセットで共有されているルーティンまたは TVF を開きます。
[テーブル関数を呼び出す] をクリックします。
パラメータを受け入れ可能な入力(テーブル名またはフィールド)に置き換えます。
[実行] をクリックします。
[エクスプローラ] パネルで、リンクされたデータセットの子要素としてネストされた TVF を表示できない場合は、リンクされたデータセットで TVF を直接クエリできます。
SELECT * FROM `myproject.dcr_linked_dataset.mytvf`(TABLE myTable);
API
projects.locations.dataExchanges.subscribe メソッドを使用します。
次の例は、curl コマンドを使用して projects.locations.dataExchanges.subscribe メソッドを呼び出す方法を示しています。
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -L -X POST https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID:subscribe --data '{"destination":"projects/SUBSCRIBER_PROJECT_ID/locations/LOCATION","subscription":"SUBSCRIPTION"}'
次のように置き換えます。
DCR_PROJECT_ID: データ クリーンルームが作成されたプロジェクトのプロジェクト ID。LOCATION: データ クリーンルームの場所。CLEAN_ROOM_ID: データ クリーンルームの ID。SUBSCRIBER_PROJECT_ID: サブスクライバー プロジェクトのプロジェクト ID。SUBSCRIPTION: サブスクリプションの名前。
クエリ テンプレートをサブスクライブしたら、リンクされたデータセットで TVF に直接クエリを実行できます。
SELECT * FROM `myproject.dcr_linked_dataset.mytvf`(TABLE myTable);
サンプル事例
クエリ テンプレートを使用すると、データ クリーンルーム内でさまざまな形式のデータ コラボレーションを促進できます。以降のセクションでは、シナリオの例について説明します。
一方向の共有シナリオ
データ パブリッシャーがクエリ テンプレートを作成し、サブスクライブしているパートナーがパブリッシャーによって定義されたクエリのみを実行できることを確認します。クエリ テンプレートの作成者は、クリーンルームに他の提供者が追加されないため、最終的にはクエリ テンプレートを自己承認することになります。
このシナリオでは、ユーザー A はデータ クリーンルームのオーナーであり、campaign_analysis というデータ クリーンルームを作成し、campaigns テーブルを含む my_campaign という名前のデータセットを追加します。ユーザー A は、メタデータ スキーマのみが表示され、サブスクライバーがソースデータにアクセスできないことを確認するために、集計しきい値ポリシーとメタデータ制御を構成します。ユーザー A は、campaigns テーブルからテーブル値関数を定義してクエリ テンプレートを作成し、リンクされたデータセットのすべてのサブスクライバーが TVF のみを実行するように制限します。
TVF の構文は次のとおりです。
campaigns_template(t1 TABLE campaign_ID <STRING> ) AS (
SELECT WITH AGGREGATION_THRESHOLD company_id, company, sum(impressions) FROM myproject.my_campaign.campaigns
group by company_id, company
);
ユーザー A は BigQuery データオーナーのロールでキャンペーン テーブルに対する適切な権限を持っているため、レビューのためにクエリ テンプレートを送信した後、すぐに自分で承認できます。
複数当事者間でのコラボレーション共有
クリーンルームのオーナーが信頼できる提供者を招待し、互いのデータに対して実行するクエリを提案してもらいます。両者は、基盤となる共有データにアクセスすることなく、メタデータ スキーマのみを表示して、安全にクエリを提案できます。クエリ定義がテンプレート提案者のものではないデータを参照している場合、テンプレートはデータのオーナーのみが承認できます。
このシナリオでは、ユーザー A がデータ クリーンルームの提供者であるユーザー B を campaign_analysis クリーンルームに招待します。ユーザー B は、テーブルのメタデータ スキーマを表示して、自分のデータを campaigns テーブルに結合するためのクエリ テンプレートを提案したいと考えています。
TVF の構文は次のとおりです。
campaigns_template(t1 TABLE campaign_ID <STRING> ) AS (
SELECT WITH AGGREGATION_THRESHOLD company_id, company, sum(impressions) FROM my_project.my_campaign.campaigns
group by company_id, company
);
ユーザー B は campaigns テーブルを追加しておらず、所有もしていないため、クエリ テンプレートが承認のために送信されると、ユーザー A だけが承認できます。クエリ テンプレートを使用するには、ユーザー B がクリーンルームをサブスクライブして TVF を呼び出す必要があります。ユーザー B は、campaign_ID というフィールドを含む独自のテーブルをテーブル パラメータとして渡すことで、クエリ テンプレートで定義された非公開 SQL を実行できます。ここで注意すべきは、ユーザー B はデータをクリーンルームに追加する必要がないということです。
ユーザー B は、transactions テーブルと products テーブルを含む my_transactions という名前のデータセットをクリーンルームに追加します。ユーザー B は、メタデータ スキーマのみが表示され、サブスクライバーがソースデータにアクセスできないことを確認するために、集計しきい値ポリシーとメタデータ制御を構成します。
ユーザー A は、テーブルのメタデータ スキーマを表示することで、自分のデータを transactions テーブルに結合するためのさまざまなクエリ テンプレートを提案できるようになりました。TVF の構文の例を次に示します。
transactions_template(t1 TABLE user_ID <STRING> ) AS (
SELECT WITH AGGREGATION_THRESHOLD company_id, company, campaign_id, sku, category, date, sum(amount) FROM my_project.my_transactions.transactions
group by company_id, company, campaign_id, sku, category, date
);
transactions_template_with_join(t1 TABLE user_ID <STRING> ) AS (
SELECT WITH AGGREGATION_THRESHOLD t.company_id, t.company, t.campaign_id, t.sku, t.date, p.product_name, p.product_category, sum(t.amount) FROM myproject.my_transactions.transactions t
left join my_project.my_transactions.products p
on t.product_id = p.product_id
group by t.company_id, t.company, t.campaign_id, t.sku, t.date, p.product_name, p.product_category
);
ユーザー A は transactions テーブルと products テーブルを追加しておらず、所有もしていないため、クエリ テンプレートが承認のために送信されると、ユーザー B だけが承認できます。クエリ テンプレートを使用するには、ユーザー A はクリーンルームをサブスクライブして TVF を呼び出す必要があります。ユーザー A は、user_ID というフィールドを含む独自のテーブルをテーブル パラメータとして渡すことで、クエリ テンプレートで定義されたプライバシー SQL を実行できます。ここで注意すべきは、ユーザー A はデータをクリーンルームに追加する必要がないということです。
料金
クエリ テンプレートを使用するデータ提供者は、データ ストレージに対してのみ課金されます。
クエリ テンプレートを使用するサブスクライバーは、クエリを実行した場合にのみ、コンピューティング(分析)に対して課金されます。
次のステップ
- データ クリーンルームの詳細については、データ クリーンルームを使用して機密データを共有するをご覧ください。
- サブスクリプションの詳細については、データ クリーンルームをサブスクライブするをご覧ください。
- TVF の詳細については、テーブル関数をご覧ください。
- データの下り(外向き)の詳細については、下り(外向き)データ オプション(BigQuery 共有データセットのみ)をご覧ください。