承認済みデータセット
このドキュメントでは、BigQuery で承認済みデータセットを使用する方法について説明します。承認済みデータセットを使用すると、指定したデータセット内のすべてのビューが、2 番目のデータセット内のデータにアクセスすることを承認できます。承認済みデータセットを使用すれば、個々の承認済みビューを構成する必要はありません。
概要
BigQuery のビューは、SQL クエリによって定義される仮想テーブルです。たとえば、ビューのクエリでは、テーブルの列のサブセットのみを取得できます。ただし、個人を特定できる情報(PII)を含む列は除外されます。ビューのクエリを実行するには、ビューのクエリによってアクセスされるリソースへのアクセス権が付与されている必要があります。
承認済みビュー
ビューによって参照されるリソースに直接アクセスすることなく、ビューをクエリできるようにするには、承認済みビューを使用します。承認済みビューの作成時に、論理ビューまたはマテリアライズド ビューを共有できます。マテリアライズド ビューを承認すると、そのビューは承認済みマテリアライズド ビューと呼ばれます。
承認済みビューを使用すると、プリンシパルに基のデータに対するアクセス権がなくても、ビュー内の制限付きのデータを、指定したグループやユーザー(プリンシパル)と共有できます。プリンシパルは、共有されたデータを表示してクエリできますが、ソース データセットに直接アクセスすることはできません。代わりに、承認済みビューにソースデータへのアクセス権が付与されます。
承認済みデータセット
個々のビューを承認せず、ビューのコレクションにデータセットへのアクセス権を付与する場合は、ビューをデータセットにグループ化します。その後、ビューを含むデータセットに対して、アクセス対象のデータが格納されているデータセットへのアクセス権を付与します。プリンシパルには、ビューのグループを含むデータセットへのアクセス権を付与することも、データセット内の個々のビューへのアクセス権を付与することもできます。
別のデータセットにアクセスできるデータセットは、承認済みデータセットといいます。別のデータセットにデータへのアクセスを承認するデータセットは、共有データセットといいます。
必要な権限とロール
データセットの承認またはデータセットの承認取り消しには、次の Identity and Access Management(IAM)権限が必要です。これにより、共有するデータセットのアクセス制御リストを更新できます。
データセットを承認した後、承認済みデータセット内のビューを作成または更新できます。詳細と必要な権限については、承認済みデータセット内のビューを作成または更新するをご覧ください。
| 権限 | リソース | 
|---|---|
| 
bigquery.datasets.get
 | 共有するデータセット。 | 
| 
bigquery.datasets.update
 | 共有するデータセット。 | 
事前定義の以下の IAM ロールには、必要な権限が含まれています。
| ロール | 説明 | 
|---|---|
| 
bigquery.dataOwner
 | BigQuery データオーナー | 
| 
bigquery.admin
 | BigQuery 管理者 | 
割り当てと上限
承認済みデータセットには、データセットの上限が適用されます。詳細については、データセットの上限をご覧ください。
データセットの承認
次のように、共有するデータセットのアクセスリストに承認するデータセットを追加することで、データセットの現在と将来のビューが別のデータセットにアクセスすることを承認できます。
コンソール
- Google Cloud コンソールで、[BigQuery] ページに移動します。 
- 左側のペインで、 [エクスプローラ] をクリックします。 - 左側のペインが表示されていない場合は、 左側のペインを開くをクリックしてペインを開きます。 
- [エクスプローラ] ペインでプロジェクトを開き、[データセット] をクリックして、データセットをクリックします。 
- 表示された詳細ペインで、[共有] をクリックし、[データセットを承認] オプションを選択します。 
- 表示された [承認済みデータセット] ペインで、承認するデータセットのデータセット ID を次の形式で入力します。 - PROJECT.AUTHORIZED_DATASET- 次に例を示します。 - myProject.myDataset
- [承認を追加] をクリックし、[閉じる] をクリックします。 
bq
- Cloud Shell を開きます。 
- bq showコマンドを使用して、共有するデータセットの既存のメタデータ(アクセス制御リストを含む)を JSON ファイルに書き込みます。- bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH 
- テキスト エディタを使用して、FILE_PATH に作成した JSON ファイルの既存の - accessセクションに承認するデータセットを追加します。- 次に例を示します。 - "access": [ ... { "dataset": { "dataset": { "project_id": "PROJECT", "dataset_id": "AUTHORIZED_DATASET" }, "target_types": "VIEWS" } } ] 
- bq updateコマンドを使用して共有データセットを更新します。例:- bq update --source FILE_PATH PROJECT:SHARED_DATASET 
- 承認済みデータセットが追加されたことを確認するには、 - bq showコマンドを再度入力します。次に例を示します。- bq show --format=prettyjson PROJECT:SHARED_DATASET 
API
- 次のように、 - datasets.getメソッドを呼び出して、共有するデータセットの現在のメタデータを取得します。- GET https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET - レスポンスの本文で、データセットの JSON メタデータを含む - Datasetリソースが返されます。
- 次のように、 - Datasetリソースで返された JSON メタデータの- accessセクションに、承認するデータセットを追加します。- "access": [ ... { "dataset": { "dataset": { "project_id": "PROJECT", "dataset_id": "AUTHORIZED_DATASET" }, "target_types": "VIEWS" } } ] 
- datasets.updateメソッドを使用して、追加した承認のデータセットを更新します。- PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET - 更新された - Datasetリソースをリクエスト本文に含めます。
- 承認済みデータセットが追加されたことを確認するには、 - datasets.getメソッドを再度呼び出します。
データセットの承認を取り消す
別のソース データセットへのアクセスを許可されたデータセットを削除した場合、変更がソース データセットのアクセス制御リスト(ACL)に完全に反映されるまでに最大 24 時間かかることがあります。この期間中、以下の影響があります。
- 削除されたデータセットを介してソースデータにアクセスすることはできません。
- 削除されたデータセットは、移行元データセットの ACL に引き続き表示され、カウントされて承認済みデータセットの上限に達する場合があります。そのため、ACL が更新されるまで新しい承認済みデータセットを作成できないことがあります。
承認済みデータセット内のビューに付与されているアクセス権を取り消すには、次の手順で共有データセットのアクセスリストから承認済みデータセットを削除します。
コンソール
- Google Cloud コンソールで、[BigQuery] ページに移動します。 
- 左側のペインで、 [エクスプローラ] をクリックします。 
- [エクスプローラ] ペインでプロジェクトを開き、[データセット] をクリックして、データセットをクリックします。 
- 表示された詳細ペインで、[共有] をクリックし、[データセットを承認] オプションを選択します。 
- 表示された [承認済みデータセット] ペインで、[現在承認されているデータセット] セクションで承認済みデータセットのエントリを見つけます。 
- 削除する承認済みデータセットの横にある削除アイコンをクリックして、[閉じる] をクリックします。 
bq
- Cloud Shell を開きます。 
- bq showコマンドを使用して、共有データセットの既存のメタデータ(アクセス制御リストを含む)を JSON ファイルに書き込みます。- bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH 
- テキスト エディタを使用して、次のように、FILE_PATH に作成した JSON ファイルの - accessセクションから承認済みデータセットを削除します。- { "dataset": { "dataset": { "project_id": "PROJECT", "dataset_id": "AUTHORIZED_DATASET" }, "target_types": "VIEWS" } } 
- bq updateコマンドを使用して共有データセットを更新します。次に例を示します。- bq update --source FILE_PATH PROJECT:SHARED_DATASET 
- 承認済みデータセットが削除されたことを確認するには、 - bq showコマンドを再度入力します。次に例を示します。- bq show --format=prettyjson PROJECT:SHARED_DATASET 
API
- 次のように - datasets.getメソッドを呼び出して、共有データセットの現在のメタデータを取得します。- GET https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET - レスポンスの本文で、データセットの JSON メタデータを含む - Datasetリソースが返されます。
- Datasetリソースで返された JSON の- accessセクションから、承認済みのデータセットを削除します。次に例を示します。- { "dataset": { "dataset": { "project_id": "PROJECT", "dataset_id": "AUTHORIZED_DATASET" }, "target_types": "VIEWS" } } 
- datasets.updateメソッドを使用して、削除後の承認でデータセットを更新します。- PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET - 更新された - Datasetリソースをリクエスト本文に含めます。
- 承認済みデータセットが削除されたことを確認するには、 - datasets.getメソッドを再度呼び出します。
承認済みデータセット内のビューを作成または更新する
承認済みデータセット内のビューを作成または更新するには、必要な権限とロールに記載されている共有データセットに対する権限に加え、標準データセット内のビューを作成または更新するための権限が必要です。
次の表に、承認済みデータセット内にあるビューを作成または更新するために必要な Identity and Access Management(IAM)権限をまとめます。
| 権限 | リソース | 
|---|---|
| 
bigquery.datasets.get
 | 共有するデータセット。 | 
| 
bigquery.tables.getData
 | 作成または更新する新しいビューで参照されている共有データセットのテーブルまたはビュー。 | 
| 
bigquery.tables.create
 | ビューを作成する承認済みデータセット。 | 
| 
bigquery.tables.update
 | ビューを更新する承認済みデータセット。 | 
承認済みデータセットからビューを削除するための追加の権限は必要ありません。
承認済みデータセット内のビューに対するクエリ
承認済みデータセット内のビューをクエリするには、ユーザーにビューへのアクセス権が必要ですが、共有データセットへのアクセス権は必要ありません。
詳細については、承認済みビューをご覧ください。
承認済みデータセットの例
次の例は、承認済みデータセットを作成して使用する方法を示しています。
たとえば、private_dataset と public_dataset という名前の 2 つのデータセットがあるとします。private_dataset データセットには private_table という名前のテーブルが含まれています。public_dataset データセットには、private_table_filtered という名前のビューが含まれています。private_table_filtered ビューは、private_table テーブルのフィールドの一部(すべてではない)を返すクエリに基づいています。
次のように、private_table テーブル内のすべてのデータではなく、private_table_filtered ビューによって返されたデータに対するアクセス権をユーザーに付与できます。
- public_datasetデータセットの- bigquery.dataViewerロールをユーザーに付与します。このロールには- bigquery.tables.getData権限が含まれており、ユーザーは- public_datasetデータセットのビューにクエリを実行できます。データセットのユーザーにロールを付与する方法については、データセットへのアクセスの制御をご覧ください。- これで、ユーザーは - public_dataset内のビューにクエリを実行する権限を取得しましたが、- private_dataset内の- private_tableテーブルには引き続きアクセスできません。ユーザーが- private_tableテーブルに直接クエリを実行しようとするか、- private_table_filteredビューにクエリを実行することで- private_tableテーブルに間接的にアクセスしようとすると、次のようなエラー メッセージが表示されます。- Access Denied: Table PROJECT:private_dataset.private_table: User does not have permission to query table PROJECT:private_dataset.private_table.
- Google Cloud コンソールの [BigQuery] ページで、 - private_datasetデータセットを開き、[共有] をクリックして、[データセットを承認] を選択します。
- 表示された [承認済みデータセット] ペインで、[データセット ID] フィールドに「 - PROJECT.public_dataset」と入力し、[承認を追加] をクリックします。- private_datasetデータセットのアクセス制御リストに- public_datasetデータセットが追加されます。これにより、- public_datasetデータセット内のビューが承認され、- private_datasetデータセット内のデータにクエリを実行できるようになります。- これで、ユーザーは - private_datasetデータセット内のデータに直接アクセスする権限がなくても、- private_datasetデータセットに間接的にアクセスできる- public_datasetデータセット内の- private_table_filteredビューにクエリを実行できるようになりました。
制限事項
- 承認済みデータセットは異なるリージョンに作成できますが、BigQuery はクロスリージョンのクエリをサポートしていません。そのため、同じリージョンにデータセットを作成することをおすすめします。
次のステップ
- データセット内のデータにアクセスする個々のビューを承認する方法については、承認済みビューをご覧ください。 
- データセット内のテーブル関数またはユーザー定義関数による承認については、承認済み関数をご覧ください。