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


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

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

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

目標

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

費用

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

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。

新規の Trusted Cloud ユーザーは無料トライアルをご利用いただける場合があります。

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

始める前に

  1. In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.

    Go to project selector

  2. Verify that billing is enabled for your Trusted Cloud project.

  3. Enable the BigQuery API.

    Enable the API

  4. このドキュメントのタスクを実行するために必要な権限が付与されていることを確認します。
  5. ソースデータを保存するデータセットを作成する

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

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

    コンソール

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

      [BigQuery] に移動

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

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

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

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

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

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

    SQL

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

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

      [BigQuery] に移動

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

      CREATE SCHEMA github_source_data;

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

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

    Java

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

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

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

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

    Python

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

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

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

    from google.cloud import bigquery
    from google.cloud.bigquery.enums import EntityTypes
    
    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 に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

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

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

    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
    """
    client.query_and_wait(
        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 and waits for query to finish

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

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

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

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

    コンソール

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

      [BigQuery] に移動

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

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

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

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

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

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

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

    SQL

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

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

      [BigQuery] に移動

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

      CREATE SCHEMA shared_views;

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

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

    Java

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

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

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

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

    Python

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

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

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

    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. Trusted Cloud コンソールで、[BigQuery] ページに移動します。

      [BigQuery] に移動

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

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

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

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

    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.user ロールを付与します。bigquery.user ロールには bigquery.jobs.create 権限が含まれています。後のステップで、データ アナリストにビューへのアクセス権を付与します。

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

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

      [IAM] に移動

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

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

    4. [アクセス権を付与] ダイアログで、以下を行います。

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

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

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

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

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

    データ アナリストに付与した bigquery.user ロールにより、クエリジョブの作成に必要な権限が付与されます。ただし、承認済みビューまたはビューを含むデータセットへの 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 に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

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

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

    # analyst_group_email = 'data_analysts@example.com'
    access_entries = shared_dataset.access_entries
    access_entries.append(
        bigquery.AccessEntry("READER", EntityTypes.GROUP_BY_EMAIL, 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 に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

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

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

    access_entries = source_dataset.access_entries
    access_entries.append(
        bigquery.AccessEntry(None, EntityTypes.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 に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

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

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

    # Create a source dataset
    from google.cloud import bigquery
    from google.cloud.bigquery.enums import EntityTypes
    
    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
    """
    client.query_and_wait(
        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 and waits for 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", EntityTypes.GROUP_BY_EMAIL, 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, EntityTypes.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 アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

    プロジェクトの削除

    コンソール

    1. In the Trusted 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

    1. In the Trusted 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.

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

    もう一つの方法として、このチュートリアルで使用したリソースを個別に削除する場合は、次の操作を行います。

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

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

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

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

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

    次のステップ