更新数据集属性

本文档介绍了如何在 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 方法。
  • 使用客户端库。

如需更新数据集的说明,请执行以下操作:

控制台

  1. 在左侧窗格中,点击 Explorer

    突出显示的“探索器”窗格按钮。

    如果您没有看到左侧窗格,请点击 展开左侧窗格以打开该窗格。

  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 命令。如果您要更新非默认项目中的数据集,请按以下格式将相应项目 ID 添加到数据集名称中:project_id:dataset

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.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 中,到期时间以毫秒为单位表示。

如需更新数据集的默认到期时间,请执行以下操作:

控制台

  1. 在左侧窗格中,点击 Explorer

    突出显示的“探索器”窗格按钮。

  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 命令。如果您要更新非默认项目中的数据集,请按以下格式将相应项目 ID 添加到数据集名称中:project_id:dataset

bq update \
--default_table_expiration integer \
project_id:dataset

请替换以下内容:

  • integer:新创建的表的默认生命周期(以秒为单位)。最小值为 3600 秒(一小时)。到期时间以当前世界协调时间 (UTC) 加上这个整数值为准。 指定 0 可移除现有到期时间。在数据集中创建的任何表都会在创建之时起的 integer 秒后删除。如果您在创建表时未设置表到期时间,则系统会应用此值。
  • project_id:您的项目 ID。
  • dataset:您要更新的数据集的名称。

示例:

输入以下命令可将在 mydataset 中创建的新表的默认表过期时间设置为从当前时间算起两小时(7200 秒)。该数据集在默认项目中。

bq update --default_table_expiration 7200 mydataset

输入以下命令可将在 mydataset 中创建的新表的默认表过期时间设置为从当前时间算起两小时(7200 秒)。该数据集属于 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.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 命令。如果您要更新非默认项目中的数据集,请按以下格式将相应项目 ID 添加到数据集名称中:project_id:dataset

bq update \
--default_partition_expiration integer \
project_id:dataset

请替换以下内容:

  • integer:新创建的分区表中分区的默认生命周期(以秒为单位)。此标志没有最小值。指定 0 可移除现有到期时间。新创建的分区表中的所有分区都会在分区创建日期(按世界协调时间 (UTC) 计算)之时起的 integer 秒后删除。如果您在创建表时未设置分区到期时间,则系统会应用此值。
  • project_id:您的项目 ID。
  • dataset:您要更新的数据集的名称。

示例:

输入以下命令可将在 mydataset 中创建的新分区表的默认分区到期时间设置为 26 小时(93600 秒)。该数据集在默认项目中。

bq update --default_partition_expiration 93600 mydataset

输入以下命令可将在 mydataset 中创建的新分区表的默认分区到期时间设置为 26 小时(93600 秒)。该数据集属于 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");

这样会为数据集中创建的新表设置默认舍入模式。它不会影响添加到现有表的新列。 对数据集中的表设置默认舍入模式会替换此选项。

更新时间旅行窗口

您可以通过以下方式更新数据集的时间旅行窗口:

如需详细了解时间旅行窗口,请参阅配置时间旅行窗口

如需更新数据集的时间旅行窗口,请执行以下操作:

控制台

  1. 在左侧窗格中,点击 Explorer

    突出显示的“探索器”窗格按钮。

  2. 探索器窗格中,展开您的项目,点击数据集,然后点击某个数据集。

  3. 详细信息标签页中,点击 修改详细信息

  4. 展开高级选项,然后选择要使用的时间旅行窗口

  5. 点击保存

SQL

在更改数据集时,使用带有 max_time_travel_hours 选项的 ALTER SCHEMA SET OPTIONS 语句来指定时间旅行窗口。max_time_travel_hours 值必须是 48(2 天)到 168(7 天)之间以 24 的倍数(48、72、96、120、144、168)表示的整数。

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在查询编辑器中,输入以下语句:

    ALTER SCHEMA DATASET_NAME
    SET OPTIONS(
      max_time_travel_hours = HOURS);

    请替换以下内容:

    • DATASET_NAME:您要更新的数据集的名称
    • HOURS 替换为时间旅行窗口的时长(以小时为单位)。

  3. 点击 运行

如需详细了解如何运行查询,请参阅运行交互式查询

bq

在更改数据集时,使用带有 --max_time_travel_hours 标志的 bq update 命令来指定时间窗口。--max_time_travel_hours 值必须是 48(2 天)到 168(7 天)之间以 24 的倍数(48、72、96、120、144、168)表示的整数。

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

请替换以下内容:

  • PROJECT_ID:您的项目 ID
  • DATASET_NAME:您要更新的数据集的名称
  • HOURS 替换为时间旅行窗口的时长(以小时为单位)

API

使用已定义的数据集资源(已在其中为 maxTimeTravelHours 字段指定值)调用 datasets.patchdatasets.update 方法。maxTimeTravelHours 值必须是 48(2 天)到 168(7 天)之间以 24 的倍数(48、72、96、120、144、168)表示的整数。

更新存储结算模式

您可以更改数据集的存储结算模式。您可以将 storage_billing_model 值设置为 PHYSICAL 以在计算存储费用时使用物理字节,或设置为 LOGICAL 以使用逻辑字节。默认值为 LOGICAL

更改数据集的结算模式后,更改需要 24 小时才能生效。

更改数据集的存储空间结算模式后,您必须等待 14 天才能再次更改存储空间结算模式。

控制台

  1. 在左侧窗格中,点击 Explorer

    突出显示的“探索器”窗格按钮。

  2. 探索器窗格中,展开您的项目,点击数据集,然后点击某个数据集。

  3. 详细信息标签页中,点击 修改详细信息

  4. 展开高级选项

  5. 存储结算模式菜单中,选择物理以使用物理存储结算,或选择逻辑以使用逻辑存储结算。您也可以选择 Storage_billing_model_unspecified

  6. 点击保存

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 替换为您要使用的存储类型(LOGICALPHYSICAL

  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 替换为您要使用的存储类型(LOGICALPHYSICAL

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:您要使用的存储类型(LOGICALPHYSICAL

API

使用已定义的数据集资源调用 datasets.update 方法,其中 storageBillingModel 字段已设置。

以下示例显示如何使用 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:您要使用的存储类型(LOGICALPHYSICAL

更新访问权限控制

如需控制对 BigQuery 中数据集的访问权限,请参阅控制对数据集的访问权限。 如需了解数据加密,请参阅静态加密

后续步骤