データセット プロパティの更新

このドキュメントでは、BigQuery でデータセット プロパティを更新する方法について説明します。データセットを作成したら、次のデータセット プロパティを更新できます。

始める前に

このドキュメントの各タスクを実行するために必要な権限をユーザーに与える Identity and Access Management(IAM)のロールを付与します。

必要な権限

データセット プロパティを更新するには、次の IAM 権限が必要です。

  • bigquery.datasets.update
  • bigquery.datasets.setIamPolicy(Google Cloud コンソールでデータセットのアクセス制御を更新する場合にのみ必要)

事前定義された IAM ロールの roles/bigquery.dataOwner には、データセットのプロパティを更新するために必要な権限が含まれています。

また、bigquery.datasets.create 権限を付与されている場合は、作成したデータセットのプロパティを更新できます。

BigQuery での IAM のロールと権限については、事前定義ロールと権限をご覧ください。

データセットの説明の更新

データセットの説明は次の方法で更新できます。

  • Google Cloud コンソールを使用する。
  • bq コマンドライン ツールの bq update コマンドを使用する。
  • datasets.patch API メソッドを呼び出す。
  • クライアント ライブラリを使用する。

データセットの説明を更新するには:

Console

  1. [エクスプローラ] パネルでプロジェクトを開いて、データセットを選択します。

  2. アクション オプションを開いて、[開く] をクリックします。

  3. [詳細] パネルで、 [詳細を編集] をクリックして説明テキストを編集します。

    表示された [詳細を編集] ダイアログで、次の操作を行います。

    1. [説明] フィールドで、説明を入力するか、既存の説明を編集します。
    2. 新しい説明テキストを保存するには、[保存] をクリックします。

SQL

データセットの説明を更新するには、ALTER SCHEMA SET OPTIONS ステートメントを使用して description オプションを設定します。

次の例では、mydataset という名前のデータセットに説明を設定します。

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

    [BigQuery] に移動

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

     ALTER SCHEMA mydataset
     SET OPTIONS (
         description = 'Description of mydataset');
     

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

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

bq

--description フラグを指定して bq update コマンドを発行します。更新するデータセットがデフォルト以外のプロジェクトにある場合は、次の project_id:dataset の形式でプロジェクト ID をデータセット名に追加します。

bq update \
--description "string" \
project_id:dataset

次のように置き換えます。

  • string: データセットを説明するテキスト。引用符で囲みます。
  • project_id: プロジェクト ID。
  • dataset: 更新するデータセット名。

例:

mydataset の説明を「Description of mydataset」に変更するには、次のコマンドを入力します。mydataset はデフォルト プロジェクトにあります。

bq update --description "Description of mydataset" mydataset

mydataset の説明を「Description of mydataset」に変更するには、次のコマンドを入力します。このデータセットはデフォルト プロジェクトではなく myotherproject にあります。

bq update \
--description "Description of mydataset" \
myotherproject:mydataset

API

datasets.patch を呼び出して、データセット リソースdescription プロパティを更新します。datasets.update メソッドはデータセット リソース全体を置き換えるため、datasets.patch メソッドの方が適切です。

Go

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

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

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// updateDatasetDescription demonstrates how the Description metadata of a dataset can
// be read and modified.
func updateDatasetDescription(projectID, datasetID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	ds := client.Dataset(datasetID)
	meta, err := ds.Metadata(ctx)
	if err != nil {
		return err
	}
	update := bigquery.DatasetMetadataToUpdate{
		Description: "Updated Description.",
	}
	if _, err = ds.Update(ctx, update, meta.ETag); err != nil {
		return err
	}
	return nil
}

Java

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

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

Dataset.toBuilder() メソッドを使用して、既存の Dataset インスタンスから Dataset.Builder インスタンスを作成します。データセット ビルダー オブジェクトを構成します。Dataset.Builder.build() メソッドを使用して、更新したデータセットを作成します。Dataset.update() メソッドを呼び出して API に更新を送信します。
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;

public class UpdateDatasetDescription {

  public static void runUpdateDatasetDescription() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String newDescription = "this is the new dataset description";
    updateDatasetDescription(datasetName, newDescription);
  }

  public static void updateDatasetDescription(String datasetName, String newDescription) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      Dataset dataset = bigquery.getDataset(datasetName);
      bigquery.update(dataset.toBuilder().setDescription(newDescription).build());
      System.out.println("Dataset description updated successfully to " + newDescription);
    } catch (BigQueryException e) {
      System.out.println("Dataset description was not updated \n" + e.toString());
    }
  }
}

Node.js

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

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

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function updateDatasetDescription() {
  // Updates a dataset's description.

  // Retreive current dataset metadata
  const dataset = bigquery.dataset(datasetId);
  const [metadata] = await dataset.getMetadata();

  // Set new dataset description
  const description = 'New dataset description.';
  metadata.description = description;

  const [apiResponse] = await dataset.setMetadata(metadata);
  const newDescription = apiResponse.description;

  console.log(`${datasetId} description: ${newDescription}`);
}

Python

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

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

Dataset.description プロパティを構成し、Client.update_dataset() を呼び出して API に更新を送信します。

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set dataset_id to the ID of the dataset to fetch.
# dataset_id = 'your-project.your_dataset'

dataset = client.get_dataset(dataset_id)  # Make an API request.
dataset.description = "Updated description."
dataset = client.update_dataset(dataset, ["description"])  # Make an API request.

full_dataset_id = "{}.{}".format(dataset.project, dataset.dataset_id)
print(
    "Updated dataset '{}' with description '{}'.".format(
        full_dataset_id, dataset.description
    )
)

デフォルトのテーブルの有効期限を更新する

データセットのデフォルトのテーブルの有効期限は、次の方法で更新できます。

  • Google Cloud コンソールを使用する。
  • bq コマンドライン ツールの bq update コマンドを使用する。
  • datasets.patch API メソッドを呼び出す。
  • クライアント ライブラリを使用する。

データセット レベルでデフォルトのテーブル有効期限を設定できます。また、テーブルの作成時にテーブルの有効期限を設定することもできます。テーブルの作成時に有効期限を設定した場合、データセットのデフォルトのテーブル有効期限は無視されます。データセット レベルでデフォルトのテーブル有効期限を設定せず、テーブルの作成時にもテーブル有効期限を設定しなかった場合、テーブルは無期限に有効になり、手動でテーブルを削除する必要があります。テーブルが期限切れになると、テーブル内のすべてのデータとともに、テーブルが削除されます。

データセットのデフォルトのテーブル有効期限設定を更新するときの規則は以下のとおりです。

  • 値を Never から有限の有効期限に変更する場合、そのデータセット内にすでに存在するテーブルが期限切れになることはありません(そのテーブルの作成時に有効期限が設定されている場合は除く)。
  • デフォルトのテーブル有効期限の値を変更する場合、すでに存在するテーブルの有効期限は変更前のテーブル有効期限の設定に従います。そのデータセット内に新規作成されたテーブルには、新しいテーブル有効期限設定が適用されます(ただし、そのテーブルの作成時に別のテーブル有効期限を指定した場合は除く)。

デフォルトのテーブル有効期限の表し方は、どの方法で値を設定するかによって異なります。適切な粒度の方法を使用してください。

  • Google Cloud コンソールでは、有効期限が日数で表されます。
  • bq コマンドライン ツールでは、有効期限は秒数で表されます。
  • API では、有効期限はミリ秒数で表されます。

データセットのデフォルトの有効期限を更新するには:

Console

  1. [エクスプローラ] パネルでプロジェクトを開いて、データセットを選択します。

  2. アクション オプションを開いて、[開く] をクリックします。

  3. [詳細] パネルで、[データセット情報] の横にある鉛筆アイコンをクリックして有効期限を編集します。

  4. [データセット情報] ダイアログの [デフォルトのテーブルの有効期限] セクションで、[テーブル作成後の日数] の値を入力します。

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

SQL

デフォルトのテーブル有効期限を更新するには、ALTER SCHEMA SET OPTIONS ステートメントを使用して default_table_expiration_days オプションを設定します。

次の例では、mydataset という名前のデータセットのデフォルトのテーブル有効期限を更新しています。

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

    [BigQuery] に移動

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

     ALTER SCHEMA mydataset
     SET OPTIONS(
         default_table_expiration_days = 3.75);
     

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

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

bq

データセット内に新しく作成されるテーブルのデフォルト有効期限を更新するには、--default_table_expiration フラグを指定した bq update コマンドを入力します。更新するデータセットがデフォルト以外のプロジェクトにある場合は、次の project_id:dataset の形式でプロジェクト ID をデータセット名に追加します。

bq update \
--default_table_expiration integer \
project_id:dataset

次のように置き換えます。

  • integer: 新しく作成されるテーブルのデフォルトの存続期間(秒単位)。最小値は 3,600 秒(1 時間)です。現在の UTC 時間にこの整数値を足した値が、有効期限になります。0 を指定すると、既存の有効期限が削除されます。データセット内に作成されたテーブルは、作成時点から integer 秒後に削除されます。この値が適用されるのは、テーブルの作成時にテーブルの有効期限を設定しなかった場合です。
  • project_id: プロジェクト ID。
  • dataset: 更新するデータセットの名前。

例:

mydataset 内に新規作成されるテーブルのデフォルトの有効期限を現在時刻から 2 時間(7,200 秒)後に設定するには、次のコマンドを入力します。このデータセットはデフォルト プロジェクトにあります。

bq update --default_table_expiration 7200 mydataset

mydataset 内に新規作成されるテーブルのデフォルトの有効期限を現在時刻から 2 時間(7,200 秒)後に設定するには、次のコマンドを入力します。このデータセットはデフォルト プロジェクトではなく myotherproject にあります。

bq update --default_table_expiration 7200 myotherproject:mydataset

API

datasets.patch を呼び出して、データセット リソースdefaultTableExpirationMs プロパティを更新します。API では、有効期限はミリ秒単位で表されます。datasets.update メソッドはデータセット リソース全体を置き換えるため、datasets.patch メソッドの方が適切です。

Go

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

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

import (
	"context"
	"fmt"
	"time"

	"cloud.google.com/go/bigquery"
)

// updateDatasetDefaultExpiration demonstrats setting the default expiration of a dataset
// to a specific retention period.
func updateDatasetDefaultExpiration(projectID, datasetID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	ds := client.Dataset(datasetID)
	meta, err := ds.Metadata(ctx)
	if err != nil {
		return err
	}
	update := bigquery.DatasetMetadataToUpdate{
		DefaultTableExpiration: 24 * time.Hour,
	}
	if _, err := client.Dataset(datasetID).Update(ctx, update, meta.ETag); err != nil {
		return err
	}
	return nil
}

Java

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

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

Dataset.toBuilder() メソッドを使用して、既存の Dataset インスタンスから Dataset.Builder インスタンスを作成します。データセット ビルダー オブジェクトを構成します。Dataset.Builder.build() メソッドを使用して、更新したデータセットを作成します。Dataset.update() メソッドを呼び出して API に更新を送信します。

Dataset.Builder.setDefaultTableLifetime() メソッドを使用して、デフォルトの有効期限を構成します。

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;
import java.util.concurrent.TimeUnit;

public class UpdateDatasetExpiration {

  public static void runUpdateDatasetExpiration() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    updateDatasetExpiration(datasetName);
  }

  public static void updateDatasetExpiration(String datasetName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      // Update dataset expiration to one day
      Long newExpiration = TimeUnit.MILLISECONDS.convert(1, TimeUnit.DAYS);

      Dataset dataset = bigquery.getDataset(datasetName);
      bigquery.update(dataset.toBuilder().setDefaultTableLifetime(newExpiration).build());
      System.out.println("Dataset description updated successfully to " + newExpiration);
    } catch (BigQueryException e) {
      System.out.println("Dataset expiration was not updated \n" + e.toString());
    }
  }
}

Node.js

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

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

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function updateDatasetExpiration() {
  // Updates the lifetime of all tables in the dataset, in milliseconds.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_dataset";

  // Retreive current dataset metadata
  const dataset = bigquery.dataset(datasetId);
  const [metadata] = await dataset.getMetadata();

  // Set new dataset metadata
  const expirationTime = 24 * 60 * 60 * 1000;
  metadata.defaultTableExpirationMs = expirationTime.toString();

  const [apiResponse] = await dataset.setMetadata(metadata);
  const newExpirationTime = apiResponse.defaultTableExpirationMs;

  console.log(`${datasetId} expiration: ${newExpirationTime}`);
}

Python

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

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

Dataset.default_table_expiration_ms プロパティを構成し、Client.update_dataset() を呼び出して API に更新を送信します。

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set dataset_id to the ID of the dataset to fetch.
# dataset_id = 'your-project.your_dataset'

dataset = client.get_dataset(dataset_id)  # Make an API request.
dataset.default_table_expiration_ms = 24 * 60 * 60 * 1000  # In milliseconds.

dataset = client.update_dataset(
    dataset, ["default_table_expiration_ms"]
)  # Make an API request.

full_dataset_id = "{}.{}".format(dataset.project, dataset.dataset_id)
print(
    "Updated dataset {} with new expiration {}".format(
        full_dataset_id, dataset.default_table_expiration_ms
    )
)

デフォルトのパーティションの有効期限を更新する

データセットのデフォルトのパーティションの有効期限は、次の方法で更新できます。

  • bq コマンドライン ツールの bq update コマンドを使用する。
  • datasets.patch API メソッドを呼び出す。
  • クライアント ライブラリを使用する。

現在、Google Cloud コンソールでは、データセットのデフォルトのパーティション有効期限の設定または更新はサポートされていません。

デフォルトのパーティション有効期限をデータセット レベルで設定すると、新規に作成されるすべてのパーティション分割テーブルにそれが適用されます。パーティション分割テーブルを作成するときに、個々のテーブルにパーティションの有効期限を設定することもできます。デフォルトのパーティション有効期限をデータセット レベルで設定し、デフォルトのテーブル有効期限をデータセット レベルで設定した場合、新しいパーティション分割テーブルにはパーティションの有効期限のみが設定されます。両方のオプションを設定した場合、デフォルトのパーティション有効期限がデフォルトのテーブル有効期限よりも優先されます。

パーティション分割テーブルの作成時にパーティションの有効期限を設定した場合、データセット レベルのデフォルトのパーティション有効期限が無効になり、新たに設定した値が優先されます。

データセット レベルでデフォルトのパーティション有効期限を設定せず、テーブルの作成時にパーティションの有効期限を設定しない場合は、パーティションが期限切れになることはないため、パーティションを手動で削除する必要があります。

データセットにデフォルトのパーティション有効期限を設定すると、その有効期限はデータセット内に作成されたすべてのパーティション分割テーブルのパーティションに適用されます。テーブルにパーティションの有効期限を設定した場合、その有効期限は指定のテーブルに作成されたすべてのパーティションに適用されます。現在、同じテーブル内のパーティションに異なる有効期限を適用することはできません。

データセットのデフォルトのパーティション有効期限を更新する場合、次のことに注意してください。

  • 値を never から有限の有効期限に変更する場合、そのデータセットのパーティション分割テーブルにすでに存在するパーティションが期限切れになることはありません(その作成時に有効期限が設定されている場合は除く)。
  • デフォルトのパーティション有効期限の値を変更した場合、既存のパーティション分割テーブルのパーティションには元のデフォルトのパーティション有効期限が適用されます。データセット内に新たに作成されたパーティション分割テーブルには、作成時に別のパーティション有効期限を指定しない限り、新しいデフォルトのパーティション有効期限が適用されます。

デフォルトのパーティション有効期限の値は、値の設定場所によって異なります。適切な粒度の方法を使用してください。

  • bq コマンドライン ツールでは、有効期限は秒数で表されます。
  • API では、有効期限はミリ秒数で表されます。

データセットのデフォルトのパーティション有効期限を更新するには:

コンソール

現在、Google Cloud コンソールでは、データセットのデフォルトのパーティション有効期限を更新できません。

SQL

デフォルトのパーティション有効期限を更新するには、ALTER SCHEMA SET OPTIONS ステートメントを使用して default_partition_expiration_days オプションを設定します。

次の例では、mydataset という名前のデータセットのデフォルトのパーティション有効期限を更新しています。

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

    [BigQuery] に移動

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

     ALTER SCHEMA mydataset
     SET OPTIONS(
         default_partition_expiration_days = 3.75);
     

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

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

bq

データセットのデフォルトの有効期限を更新するには、--default_partition_expiration フラグを指定して bq update コマンドを入力します。更新するデータセットがデフォルト以外のプロジェクトにある場合は、project_id:dataset の形式でプロジェクト ID をデータセット名に追加します。

bq update \
--default_partition_expiration integer \
project_id:dataset

次のように置き換えます。

  • integer: 新しく作成されるパーティション分割テーブルのパーティションのデフォルトの存続時間(秒単位)。このフラグには最小値はありません。0 を指定すると、既存の有効期限が削除されます。新しく作成されたパーティション分割テーブルのパーティションは、パーティションの作成日(UTC)から integer 秒後に削除されます。この値は、作成時にテーブルのパーティションに有効期限を設定していない場合に適用されます。
  • project_id: プロジェクト ID。
  • dataset: 更新するデータセットの名前。

例:

次のコマンドを入力して、mydataset に作成された新しいパーティション分割テーブルのデフォルトのパーティション有効期限を 26 時間(93,600 秒)に設定します。このデータセットはデフォルト プロジェクトにあります。

bq update --default_partition_expiration 93600 mydataset

次のコマンドを入力して、mydataset に作成された新しいパーティション分割テーブルのデフォルトのパーティション有効期限を 26 時間(93,600 秒)に設定します。このデータセットはデフォルト プロジェクトではなく myotherproject にあります。

bq update --default_partition_expiration 93600 myotherproject:mydataset

API

datasets.patch を呼び出して、データセット リソースdefaultPartitionExpirationMs プロパティを更新します。有効期限はミリ秒数で表されます。datasets.update メソッドはデータセット リソース全体を置き換えるため、datasets.patch メソッドの方が適切です。

丸めモードを更新する

ALTER SCHEMA SET OPTIONS DDL ステートメントを使用して、データセットのデフォルトの丸めモードを更新できます。次の例では、mydataset のデフォルトの丸めモードを ROUND_HALF_EVEN に更新します。

ALTER SCHEMA mydataset
SET OPTIONS (
  default_rounding_mode = "ROUND_HALF_EVEN");

これにより、データセット内に新しく作成されるテーブルのデフォルトの丸めモードが設定されます。既存のテーブルに追加された新しい列には影響しません。データセット内のテーブルにデフォルトの丸めモードを設定すると、このオプションがオーバーライドされます。

データセットのアクセス制御を更新する

データセットのアクセス制御を更新するプロセスは、アクセス制御をデータセットに割り当てるプロセスと非常によく似ています。Google Cloud コンソールまたは bq コマンドライン ツールを使用してデータセットを作成している間は、アクセス制御を適用できません。まずデータセットを作成してから、データセットのアクセス制御を更新する必要があります。この API では、datasets.patch メソッドを呼び出してデータセットのアクセス制御を更新できます。

データセットのアクセス制御を更新するときは、以下のエンティティを変更できます。

  • IAM プリンシパル:

    • Google アカウントのメールアドレス: 個々の Google アカウントにデータセットへのアクセスを許可します。
    • Google グループ: Google グループ内のすべてのメンバーにデータセットへのアクセスを許可します。
    • Google Workspace ドメイン: Google ドメイン内のすべてのユーザーとグループにデータセットへのアクセスを許可します。
    • サービス アカウント: サービス アカウントにデータセットへのアクセスを許可します。
    • 全員: 「allUsers」と入力して、一般ユーザーにアクセス権を付与します。
    • すべての Google アカウント: Google アカウントにログインしたすべてのユーザーにアクセス権を付与するには、「allAuthenticatedUsers」と入力します。
  • リソースタイプ:

データセットのアクセス制御を更新するには:

Console

  1. [エクスプローラ] パネルでプロジェクトを開いて、データセットを選択します。

  2. アクション オプションを開いて、[開く] をクリックします。

  3. [共有データセット] をクリックします。

  4. [共有データセット] ダイアログで既存のエントリを削除するには、エントリを展開して削除アイコン(ゴミ箱)をクリックします。

  5. [共有データセット] ダイアログで、新しいエントリを追加します。

    1. [プリンシパルを追加] ボックスにエンティティを入力します。

    2. [ロールを選択] で、リストから適切な IAM ロールを選択します。事前定義された各 BigQuery ロールに割り当てられている権限の詳細については、事前定義されたロールと権限をご覧ください。

    3. [追加] をクリックします。

  6. 承認済みのビューを追加するには、[承認済みのビュー] タブをクリックして、プロジェクト、データセット、ビューを入力し、[追加] をクリックします。

  7. アクセス制御の追加または削除が完了したら、[完了] をクリックします。

bq

  1. show コマンドを使用して、既存のデータセット情報(アクセス制御も含む)を JSON ファイルに書き込みます。データセットがデフォルト プロジェクト以外のプロジェクトにある場合は、project_id:dataset の形式でプロジェクト ID をデータセット名に追加します。

    bq show \
    --format=prettyjson \
    project_id:dataset > path_to_file

    次のように置き換えます。

    • project_id: プロジェクト ID。
    • dataset: データセット名。
    • path_to_file: ローカルマシン上の JSON ファイルへのパス。

    例:

    次のコマンドを入力すると、mydataset のアクセス制御が JSON ファイルに書き込まれます。mydataset はデフォルト プロジェクトにあります。

    bq show --format=prettyjson mydataset > /tmp/mydataset.json

    次のコマンドを入力すると、mydataset のアクセス制御が JSON ファイルに書き込まれます。mydatasetmyotherproject にあります。

    bq show --format=prettyjson \
    myotherproject:mydataset > /tmp/mydataset.json
  2. JSON ファイルの "access" セクションに変更を加えます。specialGroup のエントリ(projectOwnersprojectWritersprojectReadersallAuthenticatedUsers)を追加または削除できます。さらに、userByEmailgroupByEmaildomain を追加、削除、変更することもできます。

    たとえば、データセットの JSON ファイルの access セクションは次のようになります。

    {
     "access": [
      {
       "role": "READER",
       "specialGroup": "projectReaders"
      },
      {
       "role": "WRITER",
       "specialGroup": "projectWriters"
      },
      {
       "role": "OWNER",
       "specialGroup": "projectOwners"
      }
      {
       "role": "READER",
       "specialGroup": "allAuthenticatedUsers"
      }
      {
       "role": "READER",
       "domain": "[DOMAIN_NAME]"
      }
      {
       "role": "WRITER",
       "userByEmail": "[USER_EMAIL]"
      }
      {
       "role": "READER",
       "groupByEmail": "[GROUP_EMAIL]"
      }
     ],
    }

  3. 編集が完了したら、update コマンドを実行します。その際、--source フラグを使用して JSON ファイルを指定します。データセットがデフォルト プロジェクト以外のプロジェクトにある場合は、project_id:dataset の形式でプロジェクト ID をデータセット名に追加します。

    bq update --source path_to_file project_id:dataset

    次のように置き換えます。

    • path_to_file: ローカルマシン上の JSON ファイルへのパス。
    • project_id: プロジェクト ID。
    • dataset: データセット名。

    例:

    次のコマンドを入力すると、mydataset のアクセス制御が更新されます。mydataset はデフォルト プロジェクトにあります。

    bq update --source /tmp/mydataset.json mydataset

    次のコマンドを入力すると、mydataset のアクセス制御が更新されます。mydatasetmyotherproject にあります。

    bq update --source /tmp/mydataset.json myotherproject:mydataset
  4. アクセス制御の変更を確認するには、show コマンドをもう一度入力します。ただし、今回は情報をファイルに書き込む指定を省略します。

    bq show --format=prettyjson dataset

    または

    bq show --format=prettyjson project_id:dataset

API

datasets.patch を呼び出して、テーブル リソースaccess プロパティを更新します。

datasets.update メソッドはデータセット リソース全体を置き換えるので、アクセス制御の更新には datasets.patch メソッドの方が適切です。

Go

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

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

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// updateDatasetAccessControl demonstrates how the access control policy of a dataset
// can be amended by adding an additional entry corresponding to a specific user identity.
func updateDatasetAccessControl(projectID, datasetID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	ds := client.Dataset(datasetID)
	meta, err := ds.Metadata(ctx)
	if err != nil {
		return err
	}
	// Append a new access control entry to the existing access list.
	update := bigquery.DatasetMetadataToUpdate{
		Access: append(meta.Access, &bigquery.AccessEntry{
			Role:       bigquery.ReaderRole,
			EntityType: bigquery.UserEmailEntity,
			Entity:     "sample.bigquery.dev@gmail.com"},
		),
	}

	// Leverage the ETag for the update to assert there's been no modifications to the
	// dataset since the metadata was originally read.
	if _, err := ds.Update(ctx, update, meta.ETag); err != nil {
		return err
	}
	return nil
}

Java

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

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

Dataset.toBuilder() メソッドを使用して、既存の Dataset インスタンスから Dataset.Builder インスタンスを作成します。データセット ビルダー オブジェクトを構成します。Dataset.Builder.build() メソッドを使用して、更新したデータセットを作成します。Dataset.update() メソッドを呼び出して API に更新を送信します。

Dataset.Builder.setAcl() メソッドを使用して、アクセス制御を構成します。

import com.google.cloud.bigquery.Acl;
import com.google.cloud.bigquery.Acl.Role;
import com.google.cloud.bigquery.Acl.User;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;
import java.util.ArrayList;

public class UpdateDatasetAccess {

  public static void runUpdateDatasetAccess() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    updateDatasetAccess(datasetName);
  }

  public static void updateDatasetAccess(String datasetName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      Dataset dataset = bigquery.getDataset(datasetName);

      // Create a new ACL granting the READER role to "sample.bigquery.dev@gmail.com"
      // For more information on the types of ACLs available see:
      // https://cloud.google.com/storage/docs/access-control/lists
      Acl newEntry = Acl.of(new User("sample.bigquery.dev@gmail.com"), Role.READER);

      // Get a copy of the ACLs list from the dataset and append the new entry
      ArrayList<Acl> acls = new ArrayList<>(dataset.getAcl());
      acls.add(newEntry);

      bigquery.update(dataset.toBuilder().setAcl(acls).build());
      System.out.println("Dataset Access Control updated successfully");
    } catch (BigQueryException e) {
      System.out.println("Dataset Access control was not updated \n" + e.toString());
    }
  }
}

Node.js

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

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

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function updateDatasetAccess() {
  // Updates a datasets's access controls.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_dataset";

  // Create new role metadata
  const newRole = {
    role: 'READER',
    entity_type: 'userByEmail',
    userByEmail: 'sample.bigquery.dev@gmail.com',
  };

  // Retreive current dataset metadata
  const dataset = bigquery.dataset(datasetId);
  const [metadata] = await dataset.getMetadata();

  // Add new role to role acess array
  metadata.access.push(newRole);
  const [apiResponse] = await dataset.setMetadata(metadata);
  const newAccessRoles = apiResponse.access;
  newAccessRoles.forEach(role => console.log(role));
}

Python

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

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

dataset.access_entries プロパティを使用してデータセットのアクセス制御を設定します。次に、client.update_dataset() 関数を呼び出してプロパティを更新します。

# TODO(developer): Set dataset_id to the ID of the dataset to fetch.
dataset_id = "your-project.your_dataset"

# TODO(developer): Set entity_id to the ID of the email or group from whom
# you are adding access. Alternatively, to the JSON REST API representation
# of the entity, such as a view's table reference.
entity_id = "user-or-group-to-add@example.com"

from google.cloud.bigquery.enums import EntityTypes

# TODO(developer): Set entity_type to the type of entity you are granting access to.
# Common types include:
#
# * "userByEmail" -- A single user or service account. For example "fred@example.com"
# * "groupByEmail" -- A group of users. For example "example@googlegroups.com"
# * "view" -- An authorized view. For example
#       {"projectId": "p", "datasetId": "d", "tableId": "v"}
#
# For a complete reference, see the REST API reference documentation:
# https://cloud.google.com/bigquery/docs/reference/rest/v2/datasets#Dataset.FIELDS.access
entity_type = EntityTypes.GROUP_BY_EMAIL

# TODO(developer): Set role to a one of the "Basic roles for datasets"
# described here:
# https://cloud.google.com/bigquery/docs/access-control-basic-roles#dataset-basic-roles
role = "READER"

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

dataset = client.get_dataset(dataset_id)  # Make an API request.

entries = list(dataset.access_entries)
entries.append(
    bigquery.AccessEntry(
        role=role,
        entity_type=entity_type,
        entity_id=entity_id,
    )
)
dataset.access_entries = entries

dataset = client.update_dataset(dataset, ["access_entries"])  # Make an API request.

full_dataset_id = "{}.{}".format(dataset.project, dataset.dataset_id)
print(
    "Updated dataset '{}' with modified user permissions.".format(full_dataset_id)
)

タイムトラベル ウィンドウの更新

データセットのタイムトラベル ウィンドウは、次の方法で更新できます。

  • Google Cloud コンソールを使用する。
  • ALTER SCHEMA SET OPTIONS ステートメントを使用する。
  • bq コマンドライン ツールの bq update コマンドを使用する。
  • datasets.patch または datasets.update の API メソッドを呼び出す。update メソッドはデータセット リソース全体を置き換えるのに対し、patch メソッドは送信されたデータセット リソースに含まれるフィールドのみを置き換えます。

タイムトラベル ウィンドウの詳細については、タイムトラベル ウィンドウの構成をご覧ください。

データセットのタイムトラベル ウィンドウを更新するには:

コンソール

  1. [エクスプローラ] パネルでプロジェクトを開いて、データセットを選択します。
  2. アクション オプションを開いて、[開く] をクリックします。
  3. [詳細] パネルで、 [詳細を編集] をクリックします。
  4. [詳細オプション] を開き、使用する [タイムトラベル期間] を選択します。
  5. [保存] をクリックします。

SQL

データセットを変更する場合は、max_time_travel_hours オプション付きで ALTER SCHEMA SET OPTIONS ステートメントを使用してタイムトラベル ウィンドウを指定します。max_time_travel_hours 値は、24 の倍数(48、72、96、120、144、168)であり、48(2 日)~168(7 日)の範囲にする必要があります。

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

    [BigQuery] に移動

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

    ALTER SCHEMA DATASET_NAME
    SET OPTIONS(
      max_time_travel_hours = HOURS);

    次のように置き換えます。

    • DATASET_NAME: 更新するデータセット名。
    • HOURS は、タイムトラベル ウィンドウの期間(時間単位)に置き換えます。

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

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

bq

データセットを変更する場合は、bq update コマンドを使用して --max_time_travel_hours フラグを指定し、タイムトラベル ウィンドウを指定します。--max_time_travel_hours 値は、24 の倍数(48、72、96、120、144、168)であり、48(2 日)~168(7 日)の範囲にする必要があります。

bq update \
--dataset=true --max_time_travel_hours=HOURS \
PROJECT_ID:DATASET_NAME

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID。
  • DATASET_NAME: 更新するデータセットの名前。
  • HOURS は、タイムトラベル ウィンドウの期間(時間単位)に置き換えます。

API

maxTimeTravelHours フィールドの値を指定した定義済みのデータセット リソースを使用して datasets.patch または datasets.update メソッドを呼び出します。maxTimeTravelHours 値は、24 の倍数(48、72、96、120、144、168)であり、48(2 日)~168(7 日)の範囲にする必要があります。

ストレージ課金モデルを更新する

データセットのストレージ課金モデルを変更できます。ストレージの変更の計算時に物理バイトを使用する場合は storage_billing_model 値を PHYSICAL に設定し、論理バイトを使用する場合は LOGICAL に設定します。デフォルトは LOGICAL です。

データセットの課金モデルを変更した場合は、変更が反映されるまでに 24 時間を要します。

データセットのストレージ課金モデルを変更した後、再度ストレージ課金モデルを変更するには、14 日間お待ちいただく必要があります。

コンソール

  1. [エクスプローラ] パネルでプロジェクトを開いて、データセットを選択します。
  2. アクション オプションを開いて、[開く] をクリックします。
  3. [詳細] パネルで、 [詳細を編集] をクリックします。
  4. [詳細オプション] を開いて、物理ストレージの課金を使用する場合は [物理ストレージの課金モデルを有効にする] をオンにし、論理ストレージの課金を使用する場合はオフにします。
  5. [保存] をクリックします。

SQL

データセットの課金モデルを更新するには、ALTER SCHEMA SET OPTIONS ステートメントを使用して storage_billing_model オプションを設定します。

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

    [BigQuery] に移動

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

    ALTER SCHEMA DATASET_NAME
    SET OPTIONS(
     storage_billing_model = 'BILLING_MODEL');

    次のように置き換えます。

    • DATASET_NAME は、変更するデータセットの名前に置き換えます。
    • BILLING_MODEL は、使用するストレージのタイプ(LOGICAL または PHYSICAL)に置き換えます。

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

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

プロジェクト内のすべてのデータセットのストレージ課金モデルを更新するには、データセットが配置されているすべてのリージョンに対して次の SQL クエリを使用します。

FOR record IN
 (SELECT CONCAT(catalog_name, '.', schema_name) AS dataset_path
 FROM PROJECT_ID.region-REGION.INFORMATION_SCHEMA.SCHEMATA)
DO
 EXECUTE IMMEDIATE
   "ALTER SCHEMA `" || record.dataset_path || "` SET OPTIONS(storage_billing_model = 'BILLING_MODEL')";
END FOR;

次のように置き換えます。

  • PROJECT_ID はプロジェクト ID に置き換えます。
  • REGIONリージョン修飾子に置き換えます。
  • BILLING_MODEL は、使用するストレージのタイプ(LOGICAL または PHYSICAL)に置き換えます。

bq

データセットの課金モデルを更新するには、bq update コマンドを使用して --storage_billing_model フラグを設定します。

bq update -d --storage_billing_model=BILLING_MODEL PROJECT_ID:DATASET_NAME

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID。
  • DATASET_NAME: 更新するデータセットの名前。
  • BILLING_MODEL: 使用するストレージのタイプ(LOGICAL または PHYSICAL

API

storageBillingModel フィールドが設定されている定義済みのデータセット リソースを使用して、datasets.update メソッドを呼び出します。

次の例は、curl を使用して datasets.update を呼び出す方法を示しています。

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -L -X PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET_ID -d '{"datasetReference": {"projectId": "PROJECT_ID", "datasetId": "DATASET_NAME"}, "storageBillingModel": "BILLING_MODEL"}'

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID。
  • DATASET_NAME: 更新するデータセットの名前。
  • BILLING_MODEL: 使用するストレージのタイプ(LOGICAL または PHYSICAL

データセットのセキュリティ

BigQuery でデータセットへのアクセスを制御するには、データセットへのアクセスの制御をご覧ください。データ暗号化の詳細については、保存データの暗号化をご覧ください。

次のステップ