承認済みビューを作成する


このチュートリアルでは、データ アナリストが使用する承認済みビューを BigQuery で作成します。承認済みビューを使用すると、元のソースデータへのアクセス権を付与することなく、特定のユーザーやグループとの間でクエリ結果を共有できます。ビューには、ユーザーまたはグループではなくソースデータへのアクセス権が付与されます。ビューの SQL クエリを使用して、クエリ結果から列とフィールドを除外することもできます。

承認済みビューを使用する別の方法として、ソースデータに列レベルのアクセス制御を設定し、アクセス制御されたデータをクエリするビューへのアクセス権をユーザーに付与することもできます。列レベルのアクセス制御の詳細については、列レベルのアクセス制御の概要をご覧ください。

同じソース データセットにアクセスする承認済みビューが複数ある場合は、個々のビューを承認する代わりに、ビューを含むデータセットを承認できます。

目標

  • ソースデータを格納するデータセットを作成します。
  • クエリを実行して、ソースデータセットの宛先テーブルにデータを読み込みます。
  • 承認済みビューを含むデータセットを作成します。
  • SQL クエリから承認済みビューを作成し、データ アナリストがクエリ結果で表示できる列を制限します。
  • データ アナリストにクエリジョブを実行する権限を付与します。
  • 承認済みビューを含むデータセットへのアクセス権をデータ アナリストに付与します。
  • 承認済みビューにソース データセットへのアクセス権を付与します。

料金

このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  4. Make sure that billing is enabled for your Google Cloud project.

  5. Enable the BigQuery API.

    Enable the API

  6. このドキュメントのタスクを実行するために必要な権限が付与されていることを確認します。

必要なロール

新しいプロジェクトを作成した場合、そのプロジェクトのオーナーには、このチュートリアルを完了するために必要なすべての IAM 権限が付与されます。

既存のプロジェクトを使用している場合は、次のロールが必要です。

Make sure that you have the following role or roles on the project:

Check for the roles

  1. In the Google Cloud console, go to the IAM page.

    Go to IAM
  2. Select the project.
  3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

  4. For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.

Grant the roles

  1. In the Google Cloud console, go to the IAM page.

    [IAM] に移動
  2. プロジェクトを選択します。
  3. [ アクセスを許可] をクリックします。
  4. [新しいプリンシパル] フィールドに、ユーザー ID を入力します。 これは通常、Google アカウントのメールアドレスです。

  5. [ロールを選択] リストでロールを選択します。
  6. 追加のロールを付与するには、 [別のロールを追加] をクリックして各ロールを追加します。
  7. [保存] をクリックします。
  8. BigQuery のロールの詳細については、事前定義された IAM ロールをご覧ください。

    必要な権限

    このチュートリアルで使用するリソースを作成するには、次の権限が必要です。BigQuery Studio 管理者事前定義ロールには、これらの権限がすべて付与されます。

    • bigquery.datasets.create: ソース データセットと、承認済みビューを含むデータセットを作成します。
    • bigquery.tables.create: ソースデータを格納するテーブルを作成し、承認済みビューを作成します。
    • bigquery.jobs.create: ソーステーブルにデータを読み込むクエリジョブを実行します。
    • bigquery.datasets.getIamPolicybigquery.datasets.get: ソース データセットと、承認済みビューを含むデータセットの IAM 権限を取得します。
    • bigquery.datasets.setIamPolicybigquery.datasets.update: ソース データセットと承認済みビューを含むデータセットの IAM 権限を更新します。

    BigQuery の IAM 権限の詳細については、BigQuery の権限をご覧ください。

ソースデータを保存するデータセットを作成する

まず、ソースデータを格納するデータセットを作成します。

ソース データセットを作成するには、次のいずれかのオプションを選択します。

コンソール

  1. [BigQuery] ページに移動します。

    BigQuery に移動

  2. [エクスプローラ] ペインで、データセットを作成するプロジェクトの横にある [アクションを表示] > [データセットを作成] をクリックします。

  3. [データセットを作成する] ページで、次の操作を行います。

    1. [データセット ID] に github_source_data を入力します。

    2. [ロケーション タイプ] で、[マルチリージョン] が選択されていることを確認します。

    3. [マルチリージョン] で、[US] または [EU] を選択します。このチュートリアルで作成するすべてのリソースは、同じマルチリージョン ロケーションに配置する必要があります。

    4. [データセットを作成] をクリックします。

SQL

CREATE SCHEMA DDL ステートメントを使用します。

  1. Google Cloud コンソールで [BigQuery Studio] ページに移動します。

    BigQuery Studio に移動

  2. クエリエディタで次のステートメントを入力します。

    CREATE SCHEMA github_source_data;

  3. [実行] をクリックします。

クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。

Java

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

// Create a source dataset to store your table.
Dataset sourceDataset = bigquery.create(DatasetInfo.of(sourceDatasetId));

Python

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

from google.cloud import bigquery

client = bigquery.Client()
source_dataset_id = "github_source_data"
source_dataset_id_full = "{}.{}".format(client.project, source_dataset_id)


source_dataset = bigquery.Dataset(source_dataset_id_full)
# Specify the geographic location where the dataset should reside.
source_dataset.location = "US"
source_dataset = client.create_dataset(source_dataset)  # API request

テーブルを作成してソースデータを読み込む

ソース データセットを作成したら、SQL クエリの結果を宛先テーブルに保存して、そのテーブルにデータを入力します。このクエリは、GitHub 一般公開データセットからデータを取得します。

コンソール

  1. [BigQuery] ページに移動します。

    BigQuery に移動

  2. クエリエディタで、次のクエリを入力します。

    SELECT
      commit,
      author,
      committer,
      repo_name
    FROM
      `bigquery-public-data.github_repos.commits`
    LIMIT
      1000;
    
  3. [展開] をクリックして、[クエリの設定] を選択します。

  4. [送信先] で [クエリ結果の宛先テーブルを設定する] をオンにします。

  5. [データセット] に「PROJECT_ID.github_source_data」と入力します。

    PROJECT_ID は、実際のプロジェクト ID に置き換えます。

  6. [テーブル ID] に「github_contributors」と入力します。

  7. [保存] をクリックします。

  8. [実行] をクリックします。

  9. クエリが完了したら、[エクスプローラ] ペインで github_source_data を開き、[github_contributors] をクリックします。

  10. データがテーブルに書き込まれたことを確認するには、[プレビュー] タブをクリックします。

Java

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

// Populate a source table
String tableQuery =
    "SELECT commit, author, committer, repo_name"
        + " FROM `bigquery-public-data.github_repos.commits`"
        + " LIMIT 1000";
QueryJobConfiguration queryConfig =
    QueryJobConfiguration.newBuilder(tableQuery)
        .setDestinationTable(TableId.of(sourceDatasetId, sourceTableId))
        .build();
bigquery.query(queryConfig);

Python

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

source_table_id = "github_contributors"
job_config = bigquery.QueryJobConfig()
job_config.destination = source_dataset.table(source_table_id)
sql = """
    SELECT commit, author, committer, repo_name
    FROM `bigquery-public-data.github_repos.commits`
    LIMIT 1000
"""
query_job = client.query(
    sql,
    # Location must match that of the dataset(s) referenced in the query
    # and of the destination table.
    location="US",
    job_config=job_config,
)  # API request - starts the query

query_job.result()  # Waits for the query to finish

承認済みビューを保存するデータセットを作成する

ソース データセットを作成したら、データ アナリストと共有する承認済みビューを格納する新しい別のデータセットを作成します。後のステップで、ソース データセット内のデータへのアクセス権を承認済みビューに付与します。データ アナリストには承認済みビューへのアクセス権が付与されますが、ソースデータへの直接アクセス権は付与されません。

承認済みビューは、ソースデータとは別のデータセットで作成する必要があります。これにより、データのオーナーは元のデータへのアクセス権を同時に付与することなく、承認済みビューへのアクセス権を付与できます。ソース データセットと承認済みビューのデータセットは、同じリージョンのロケーションに存在する必要があります。

ビューを保存するデータセットを作成するには、次のいずれかのオプションを選択します。

コンソール

  1. [BigQuery] ページに移動します。

    BigQuery に移動

  2. [エクスプローラ] パネルで、データセットを作成するプロジェクトを選択します。

  3. [アクションを表示] オプションを開き、[データセットを作成] をクリックします。

  4. [データセットを作成する] ページで、次の操作を行います。

    1. [データセット ID] に shared_views を入力します。

    2. [ロケーション タイプ] で、[マルチリージョン] が選択されていることを確認します。

    3. [マルチリージョン] で、[US] または [EU] を選択します。このチュートリアルで作成するすべてのリソースは、同じマルチリージョン ロケーションに配置する必要があります。

    4. [データセットを作成] をクリックします。

SQL

CREATE SCHEMA DDL ステートメントを使用します。

  1. Google Cloud コンソールで [BigQuery Studio] ページに移動します。

    BigQuery Studio に移動

  2. クエリエディタで次のステートメントを入力します。

    CREATE SCHEMA shared_views;

  3. [実行] をクリックします。

クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。

Java

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

// Create a separate dataset to store your view
Dataset sharedDataset = bigquery.create(DatasetInfo.of(sharedDatasetId));

Python

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

shared_dataset_id = "shared_views"
shared_dataset_id_full = "{}.{}".format(client.project, shared_dataset_id)


shared_dataset = bigquery.Dataset(shared_dataset_id_full)
shared_dataset.location = "US"
shared_dataset = client.create_dataset(shared_dataset)  # API request

新しいデータセットに承認済みビューを作成する

新しいデータセットに、承認用に使用するビューを作成します。このビューをデータ アナリストと共有します。このビューは SQL クエリで作成します。このクエリで、データ アナリストに見せない列を除外します。

github_contributors ソーステーブルには、RECORD 型の 2 つのフィールド(authorcommitter)があります。このチュートリアルでは、承認済みビューから作成者の名前を除き、作成者のデータはすべて除外します。また、実行者の名前を除き、実行者のデータもすべて除外します。

新しいデータセットにビューを作成するには、次のいずれかのオプションを選択します。

コンソール

  1. [BigQuery] ページに移動します。

    BigQuery に移動

  2. クエリエディタで、次のクエリを入力します。

    SELECT
    commit,
    author.name AS author,
    committer.name AS committer,
    repo_name
    FROM
    `PROJECT_ID.github_source_data.github_contributors`;

    PROJECT_ID は、実際のプロジェクト ID に置き換えます。

  3. [保存] > [ビューを保存] の順にクリックします。

  4. [ビューの保存] ダイアログで、次の操作を行います。

    1. [Project] で、必要なプロジェクトが選択されていることを確認します。

    2. [データセット] に「shared_views」と入力します。

    3. [テーブル] に「github_analyst_view」と入力します。

    4. [保存] をクリックします。

SQL

CREATE VIEW DDL ステートメントを使用します。

  1. Google Cloud コンソールで [BigQuery Studio] ページに移動します。

    BigQuery Studio に移動

  2. クエリエディタで次のステートメントを入力します。

    CREATE VIEW shared_views.github_analyst_view
    AS (
      SELECT
        commit,
        author.name AS author,
        committer.name AS committer,
        repo_name
      FROM
        `PROJECT_ID.github_source_data.github_contributors`
    );

    PROJECT_ID は、実際のプロジェクト ID に置き換えます。

  3. [実行] をクリックします。

クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。

Java

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

// Create the view in the new dataset
String viewQuery =
    String.format(
        "SELECT commit, author.name as author, committer.name as committer, repo_name FROM %s.%s.%s",
        projectId, sourceDatasetId, sourceTableId);

ViewDefinition viewDefinition = ViewDefinition.of(viewQuery);

Table view =
    bigquery.create(TableInfo.of(TableId.of(sharedDatasetId, sharedViewId), viewDefinition));

Python

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

shared_view_id = "github_analyst_view"
view = bigquery.Table(shared_dataset.table(shared_view_id))
sql_template = """
    SELECT
        commit, author.name as author,
        committer.name as committer, repo_name
    FROM
        `{}.{}.{}`
"""
view.view_query = sql_template.format(
    client.project, source_dataset_id, source_table_id
)
view = client.create_table(view)  # API request

データ アナリストにクエリジョブを実行する権限を付与する

データ アナリストがビューにクエリを実行するには、クエリジョブを実行するための bigquery.jobs.create 権限が必要です。bigquery.studioUser ロールには bigquery.jobs.create 権限が含まれています。bigquery.studioUser ロールでは、承認済みビューを表示またはクエリする権限はユーザーに付与されません。後のステップで、データ アナリストにビューへのアクセス権を付与します。

プロジェクト レベルでデータ アナリストのグループを bigquery.studioUser ロールに割り当てるには、次の操作を行います。

  1. Google Cloud コンソールの [IAM] ページに移動します。

    IAM に移動

  2. プロジェクト セレクタでプロジェクトが選択されていることを確認します。

  3. [ アクセス権を付与] をクリックします。

  4. [アクセス権を付与します] ダイアログで、次の操作を行います。

    1. [新しいプリンシパル] フィールドに、データ アナリストを含むグループを入力します。例: data_analysts@example.com

    2. [ロールを選択] フィールドで、[BigQuery Studio ユーザー] ロールを検索して選択します。

    3. [保存] をクリックします。

データ アナリストに、承認済みビューをクエリする権限を付与する

データ アナリストがビューにクエリを実行するには、データセット レベルまたはビュー レベルで bigquery.dataViewer ロールが必要です。データセット レベルでこのロールを付与すると、アナリストはデータセット内のすべてのテーブルとビューにアクセスできるようになります。このチュートリアルで作成したデータセットには 1 つの承認済みビューが含まれているため、データセット レベルでアクセス権を付与します。アクセス権を付与する必要がある承認済みビューのコレクションがある場合は、代わりに承認済みデータセットの使用を検討してください。

データ アナリストに付与した bigquery.studioUser ロールにより、クエリジョブの作成に必要な権限が付与されます。ただし、承認済みビューまたはビューを含むデータセットへの bigquery.dataViewer アクセス権がないと、ビューを正常にクエリすることはできません。

承認済みビューを含むデータセットに対する bigquery.dataViewer アクセス権をデータ アナリストに付与するには、次の操作を行います。

コンソール

  1. [BigQuery] ページに移動します。

    BigQuery に移動

  2. [エクスプローラ] ペインで、shared_views データセットを選択します。

  3. [共有] > [権限] の順にクリックします。

  4. [共有権限] ペインで、[プリンシパルを追加] をクリックします。

  5. [新しいプリンシパル] に、データ アナリストを含むグループを入力します(例: data_analysts@example.com)。

  6. [ロールを選択] をクリックし、[BigQuery] > [BigQuery データ閲覧者] を選択します。

  7. [保存] をクリックします。

  8. [閉じる] をクリックします。

Java

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

// Assign access controls to the dataset containing the view
List<Acl> viewAcl = new ArrayList<>(sharedDataset.getAcl());
viewAcl.add(Acl.of(new Acl.Group("example-analyst-group@google.com"), Acl.Role.READER));
sharedDataset.toBuilder().setAcl(viewAcl).build().update();

Python

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

# analyst_group_email = 'data_analysts@example.com'
access_entries = shared_dataset.access_entries
access_entries.append(
    bigquery.AccessEntry("READER", "groupByEmail", analyst_group_email)
)
shared_dataset.access_entries = access_entries
shared_dataset = client.update_dataset(
    shared_dataset, ["access_entries"]
)  # API request

ソース データセットの表示アクセスを承認する

承認済みビューを含むデータセットのアクセス制御を作成したら、承認済みビューにソース データセットへのアクセス権を付与します。この承認により、ビューはソースデータにアクセスできますが、データ アナリスト グループはアクセスできません。

承認済みビューにソースデータへのアクセス権を付与するには、次のいずれかのオプションを選択します。

コンソール

  1. [BigQuery] ページに移動します。

    BigQuery に移動

  2. [エクスプローラ] ペインで、github_source_data データセットを選択します。

  3. [共有] > [ビューを承認] をクリックします。

  4. [承認済みビュー] ペインの [承認済みビュー] に PROJECT_ID.shared_views.github_analyst_view と入力します。

    PROJECT_ID は、実際のプロジェクト ID に置き換えます。

  5. [承認を追加] をクリックします。

Java

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

// Authorize the view to access the source dataset
List<Acl> srcAcl = new ArrayList<>(sourceDataset.getAcl());
srcAcl.add(Acl.of(new Acl.View(view.getTableId())));
sourceDataset.toBuilder().setAcl(srcAcl).build().update();

Python

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

access_entries = source_dataset.access_entries
access_entries.append(
    bigquery.AccessEntry(None, "view", view.reference.to_api_repr())
)
source_dataset.access_entries = access_entries
source_dataset = client.update_dataset(
    source_dataset, ["access_entries"]
)  # API request

構成を確認する

構成が完了すると、データ アナリスト グループ(たとえば、data_analysts)のメンバーがビューにクエリを実行して、構成を確認できます。

構成を確認するには、データ アナリストは次のクエリを実行する必要があります。

  1. [BigQuery] ページに移動します。

    BigQuery に移動

  2. クエリエディタで次のステートメントを入力します。

    SELECT
      *
    FROM
      `PROJECT_ID.shared_views.github_analyst_view`;

    PROJECT_ID は、実際のプロジェクト ID に置き換えます。

  3. [ 実行] をクリックします。

クエリの結果は次のようになります。結果には、作成者名とコミッター名のみが表示されます。

承認済みビューにクエリを実行した後のクエリ結果

クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。

完全なソースコード

次に、このチュートリアル用のソースコード全体を示します。

Java

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

// Create a source dataset to store your table.
Dataset sourceDataset = bigquery.create(DatasetInfo.of(sourceDatasetId));

// Populate a source table
String tableQuery =
    "SELECT commit, author, committer, repo_name"
        + " FROM `bigquery-public-data.github_repos.commits`"
        + " LIMIT 1000";
QueryJobConfiguration queryConfig =
    QueryJobConfiguration.newBuilder(tableQuery)
        .setDestinationTable(TableId.of(sourceDatasetId, sourceTableId))
        .build();
bigquery.query(queryConfig);

// Create a separate dataset to store your view
Dataset sharedDataset = bigquery.create(DatasetInfo.of(sharedDatasetId));

// Create the view in the new dataset
String viewQuery =
    String.format(
        "SELECT commit, author.name as author, committer.name as committer, repo_name FROM %s.%s.%s",
        projectId, sourceDatasetId, sourceTableId);

ViewDefinition viewDefinition = ViewDefinition.of(viewQuery);

Table view =
    bigquery.create(TableInfo.of(TableId.of(sharedDatasetId, sharedViewId), viewDefinition));

// Assign access controls to the dataset containing the view
List<Acl> viewAcl = new ArrayList<>(sharedDataset.getAcl());
viewAcl.add(Acl.of(new Acl.Group("example-analyst-group@google.com"), Acl.Role.READER));
sharedDataset.toBuilder().setAcl(viewAcl).build().update();

// Authorize the view to access the source dataset
List<Acl> srcAcl = new ArrayList<>(sourceDataset.getAcl());
srcAcl.add(Acl.of(new Acl.View(view.getTableId())));
sourceDataset.toBuilder().setAcl(srcAcl).build().update();

Python

このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

# Create a source dataset
from google.cloud import bigquery

client = bigquery.Client()
source_dataset_id = "github_source_data"
source_dataset_id_full = "{}.{}".format(client.project, source_dataset_id)


source_dataset = bigquery.Dataset(source_dataset_id_full)
# Specify the geographic location where the dataset should reside.
source_dataset.location = "US"
source_dataset = client.create_dataset(source_dataset)  # API request

# Populate a source table
source_table_id = "github_contributors"
job_config = bigquery.QueryJobConfig()
job_config.destination = source_dataset.table(source_table_id)
sql = """
    SELECT commit, author, committer, repo_name
    FROM `bigquery-public-data.github_repos.commits`
    LIMIT 1000
"""
query_job = client.query(
    sql,
    # Location must match that of the dataset(s) referenced in the query
    # and of the destination table.
    location="US",
    job_config=job_config,
)  # API request - starts the query

query_job.result()  # Waits for the query to finish

# Create a separate dataset to store your view
shared_dataset_id = "shared_views"
shared_dataset_id_full = "{}.{}".format(client.project, shared_dataset_id)


shared_dataset = bigquery.Dataset(shared_dataset_id_full)
shared_dataset.location = "US"
shared_dataset = client.create_dataset(shared_dataset)  # API request

# Create the view in the new dataset
shared_view_id = "github_analyst_view"
view = bigquery.Table(shared_dataset.table(shared_view_id))
sql_template = """
    SELECT
        commit, author.name as author,
        committer.name as committer, repo_name
    FROM
        `{}.{}.{}`
"""
view.view_query = sql_template.format(
    client.project, source_dataset_id, source_table_id
)
view = client.create_table(view)  # API request

# Assign access controls to the dataset containing the view
# analyst_group_email = 'data_analysts@example.com'
access_entries = shared_dataset.access_entries
access_entries.append(
    bigquery.AccessEntry("READER", "groupByEmail", analyst_group_email)
)
shared_dataset.access_entries = access_entries
shared_dataset = client.update_dataset(
    shared_dataset, ["access_entries"]
)  # API request

# Authorize the view to access the source dataset
access_entries = source_dataset.access_entries
access_entries.append(
    bigquery.AccessEntry(None, "view", view.reference.to_api_repr())
)
source_dataset.access_entries = access_entries
source_dataset = client.update_dataset(
    source_dataset, ["access_entries"]
)  # API request

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトの削除

Console

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

gcloud

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

リソースを個別に削除する

または、このチュートリアルで使用した個々のリソースを削除するには、次の操作を行います。

  1. 承認済みビューを削除します

  2. 承認済みビューを含むデータセットを削除します。

  3. ソース データセットのテーブルを削除します。

  4. ソース データセットを削除します

このチュートリアルで使用したリソースは作成したため、削除するために追加の権限は必要ありません。

次のステップ