管理数据集

本文档介绍了如何管理 BigQuery 中的数据集。创建数据集后,您可以通过以下方式管理数据集:

重命名数据集

目前,您不能更改现有数据集的名称,也不能复制数据集并为其指定一个新名称。如果需要更改数据集名称,请按照以下步骤重新创建数据集:

  1. 创建新数据集并指定新名称。

  2. 复制表(从旧数据集复制到新数据集)。

  3. 在新数据集中重新创建视图

  4. 删除旧数据集以免产生额外的存储费用。

复制数据集

目前,您不能复制数据集。请按照下述步骤重新创建数据集:

  1. 创建新数据集。由于各项目的数据集名称不得重复,因此如果要在同一项目中重新创建数据集,您必须为该数据集指定一个新名称。

  2. 复制表(从旧数据集复制到新数据集)。

  3. 在新数据集中重新创建视图

  4. 删除旧数据集以免产生额外的存储费用。

删除数据集

您可以通过以下方式删除数据集:

  • 使用 GCP Console 或经典版 BigQuery 网页界面
  • 使用 bq rm CLI 命令
  • 调用 datasets.delete API 方法

所需权限

要删除数据集,您必须拥有数据集级别的 OWNER 访问权限,或者必须拥有具备 bigquery.datasets.delete 权限的项目级别 IAM 角色。如果数据集包含表,则还需要具备 bigquery.tables.delete 权限。以下预定义的项目级层 IAM 角色包含 bigquery.datasets.deletebigquery.tables.delete 权限:

此外,由于 bigquery.user 角色具有 bigquery.datasets.create 权限,因此分配有 bigquery.user 角色的用户可以删除用户创建的任何数据集。在分配有 bigquery.user 角色的用户创建数据集后,系统将为该用户授予对该数据集的 OWNER 访问权限。 凭借对数据集的 OWNER 访问权限,用户可以完全掌控该数据集。

要详细了解 BigQuery 中的 IAM 角色和权限,请参阅访问权限控制。如需详细了解数据集级层的角色,请参阅数据集的初始角色

删除数据集

使用网页界面删除数据集时,该数据集中的表(及其所含数据)也会一起删除。使用 CLI 删除数据集时,您必须使用 -r 标志删除数据集中的表。

删除数据集后,您就无法再恢复、还原或撤消删除。数据集删除操作属于永久性操作。

要删除数据集,请执行以下操作:

Console

  1. 资源窗格中选择您的数据集,然后点击窗口右侧的删除数据集

    删除数据集

  2. 删除数据集吗? 对话框的文本框中,输入数据集的名称,然后点击删除

经典版界面

  1. 点击导航窗格中数据集名称旁边的向下箭头图标 向下箭头图标,然后点击 Delete dataset

  2. Delete Dataset 对话框中执行以下操作:

    • Dataset ID 中,输入要删除的数据集的名称。
    • 点击 OK

      删除数据集

命令行

可以搭配使用 bq rm 命令和(可选)--dataset-d 快捷方式标志来删除数据集。使用 CLI 移除数据集时,您必须确认该命令。可使用 -f 标志跳过确认。

此外,如果数据集包含表,您必须使用 -r 标志移除该数据集中的所有表。如果您要删除非默认项目中的表,请按以下格式将相应项目 ID 添加到数据集名称中:[PROJECT_ID]:[DATASET]

bq rm -r -f -d [PROJECT_ID]:[DATASET]

其中:

  • [PROJECT_ID] 是项目 ID。
  • [DATASET] 是要删除的数据集的名称。

示例:

输入以下命令可从默认项目中移除 mydataset 及其包含的所有表。该命令使用可选的 -d 快捷方式。

bq rm -r -d mydataset

出现提示时,输入 y 并按 Enter 键。

输入以下命令可从 myotherproject 中移除 mydataset 及其包含的所有表。该命令不使用可选的 -d 快捷方式。-f 标志用于跳过确认。

bq rm -r -f myotherproject:mydataset

API

调用 datasets.delete 方法以删除数据集,并将 deleteContents 参数设置为 true 以删除该数据集所含的表。

Go

试用此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Go 设置说明进行操作。如需了解详情,请参阅 BigQuery Go API 参考文档

if err := client.Dataset(datasetID).Delete(ctx); err != nil {
	return fmt.Errorf("Failed to delete dataset: %v", err)
}

Java

试用此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Java 设置说明进行操作。如需了解详情,请参阅 BigQuery Java API 参考文档

DatasetId datasetId = DatasetId.of(projectId, datasetName);
boolean deleted = bigquery.delete(datasetId, DatasetDeleteOption.deleteContents());
if (deleted) {
  // the dataset was deleted
} else {
  // the dataset was not found
}

Node.js

在尝试此示例之前,请先按照 BigQuery 快速入门:使用客户端库中的 Node.js 设置说明进行操作。如需了解详情,请参阅 BigQuery Node.js API 参考文档

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

async function deleteDataset() {
  // Deletes a dataset named "my_dataset".

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

  // Create a client
  const bigqueryClient = new BigQuery();

  // Create a reference to the existing dataset
  const dataset = bigqueryClient.dataset(datasetId);

  // Delete the dataset and its contents
  await dataset.delete({force: true});
  console.log(`Dataset ${dataset.id} deleted.`);
}
deleteDataset();

PHP

试用此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 PHP 设置说明进行操作。如需了解详情,请参阅 BigQuery PHP API 参考文档

use Google\Cloud\BigQuery\BigQueryClient;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $datasetId = 'The BigQuery dataset ID';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->delete();
printf('Deleted dataset %s' . PHP_EOL, $datasetId);

Python

试用此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档

from google.cloud import bigquery

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

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

# Use the delete_contents parameter to delete a dataset and its contents
# Use the not_found_ok parameter to not receive an error if the dataset has already been deleted.
client.delete_dataset(dataset_id, delete_contents=True, not_found_ok=True)

print("Deleted dataset '{}'.".format(dataset_id))

Ruby

在尝试此示例之前,请先按照 BigQuery 快速入门:使用客户端库中的 Ruby 设置说明进行操作。如需了解详情,请参阅 BigQuery Ruby API 参考文档

require "google/cloud/bigquery"

def delete_dataset dataset_id = "my_empty_dataset"
  bigquery = Google::Cloud::Bigquery.new

  # Delete a dataset that does not contain any tables
  dataset = bigquery.dataset dataset_id
  dataset.delete
  puts "Dataset #{dataset_id} deleted."
end

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面