管理视图

本文档介绍了如何在 BigQuery 中管理视图。您可以通过以下方式管理 BigQuery 视图:

复制视图

目前,您只能使用 GCP Console 复制视图。

系统不支持使用经典版网页界面、CLI、REST API 或客户端库复制视图。如有相应需要,您必须在目标数据集中重新创建视图。为了帮助您重新创建视图,您可以使用 CLI 或经典版网页界面复制视图的 SQL 查询。

所需权限

如需在 GCP Console 中复制视图,您至少必须具有以下权限。

针对源数据集

  • bigquery.tables.get,用于复制视图的元数据
  • bigquery.tables.getData,用于复制视图的 SQL 查询

如需访问视图的 SQL 查询引用的表,可能还需要其他权限,例如 bigquery.tables.getData

针对目标数据集

  • bigquery.tables.create,用于在目标数据集中创建视图的副本

以下预定义的 Cloud IAM 角色具有 bigquery.tables.createbigquery.tables.getbigquery.tables.getData 权限:

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

此外,如果用户具有 bigquery.datasets.create 权限,则当该用户创建数据集时,系统会为其授予该数据集的 bigquery.dataOwner 访问权限。 具有 bigquery.dataOwner 访问权限的用户可以复制源数据集中的视图,但如果目标数据集不是由该用户创建的,则该用户还需要对目标数据集的访问权限。

如需详细了解 BigQuery 中的 Cloud IAM 角色和权限,请参阅预定义的角色和权限

复制视图

要复制视图,请执行以下操作:

控制台

  1. 在导航窗格中,选择视图。

  2. 在窗口的右侧,点击复制视图

  3. 复制视图对话框中,执行以下操作:

    • 来源 (Source) 部分中,验证您的项目名称数据集名称表名称是否正确无误。
    • 目标 (Destination) 部分中执行如下设置:

      • 对于项目名称,选择要将视图复制到哪个项目。
      • 对于数据集名称,选择要包含所复制视图的数据集。
      • 对于表名称,输入该视图的名称。您可以在框中输入新的视图名称,以便更改视图名称。如果要输入新名称,这个新名称必须遵循视图命名规则。

      “复制视图”对话框

    • 点击复制

经典版界面

经典版网页界面不支持复制视图。如有相应需要,您必须在目标数据集中重新创建视图。为了帮助您重新创建视图,您可以复制用于定义视图的 SQL 查询。

要复制定义视图的 SQL 查询,请执行以下操作:

  1. 在界面导航窗格中,选择视图。

  2. View Details 面板中,点击 Details

  3. 将文字复制到查询框中。

CLI

bq 命令行工具不支持复制视图。如有相应需要,您必须在目标数据集中重新创建视图。为了帮助您重新创建视图,您可以复制用于定义视图的 SQL 查询。

要复制定义视图的 SQL 查询,请执行 bq show 命令。--format 标志可用于控制输出。如果您要获取非默认项目中的视图信息,请按以下格式将相应项目 ID 添加到数据集中:project_id:dataset。要将视图属性写入文件,请在命令中添加 > path_to_file

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

其中:

  • project_id 是您的项目 ID
  • dataset 是数据集的名称
  • view 是视图的名称
  • path_to_file 是本地机器上输出文件的路径

示例:

输入以下命令可显示有关 mydataset 中的 myview 的所有信息。mydataset 在您的默认项目中。

bq show --format=prettyjson mydataset.myview

输入以下命令可显示有关 mydataset 中的 myview 的所有信息。mydatasetmyotherproject 中,不在您的默认项目中。视图属性会写入本地文件 /tmp/myview.json

bq show \
--format=prettyjson \
myotherproject:mydataset.myview > /tmp/myview.json

API

REST API 不支持复制视图。如有相应需要,您必须在目标数据集中重新创建视图。有关使用 REST API 创建视图的信息,请参阅创建视图

重命名视图

目前,只有在使用 GCP Console 复制视图时才能重命名视图。有关在复制视图时对视图进行重命名的说明,请参阅复制视图

系统不支持使用经典版网页界面、CLI、API 或客户端库更改现有视图的名称。如有相应需要,您必须使用新名称重新创建视图

删除视图

您可以通过以下方式删除视图:

  • 使用 GCP Console 或经典版 BigQuery 网页界面
  • 使用命令行工具的 bq rm 命令
  • 调用 tables.delete API 方法

目前,无论使用何种方法,您每次只能删除一个视图。

若要在指定的时间段后自动删除视图,请设置数据集级别的默认到期时间,或在创建视图时设置到期时间。

所需权限

如需删除视图,您至少必须具有 bigquery.tables.deletebigquery.tables.get 权限。以下预定义的 Cloud IAM 角色具有 bigquery.tables.deletebigquery.tables.get 权限:

  • bigquery.dataOwner
  • bigquery.dataEditor
  • bigquery.admin

此外,如果用户具有 bigquery.datasets.create 权限,则当该用户创建数据集时,系统会为其授予该数据集的 bigquery.dataOwner 访问权限。 借助 bigquery.dataOwner 访问权限,用户可以在数据集中删除视图。

如需详细了解 BigQuery 中的 Cloud IAM 角色和权限,请参阅预定义的角色和权限

删除视图

删除视图的方法如下:

控制台

  1. 资源面板中选择视图。点击窗口右侧的删除视图

  2. 在对话框中键入视图的名称,然后点击删除进行确认。

经典版界面

  1. 在导航栏中,点击视图名称旁的向下箭头图标 向下箭头图标,再点击 Delete view

  2. 出现提示时,点击 OK 以确认删除。

CLI

使用带有 --table 标志(或 -t 快捷方式)的 bq rm 命令删除视图。使用 CLI 移除视图时,您必须确认该操作。您可以使用 --force 标志(或 -f 快捷方式)跳过确认。

如果该视图属于非默认项目中的数据集,请按以下格式将相应项目 ID 添加到数据集名称中:project_id:dataset

bq rm \
-f \
-t \
project_id:dataset.view

其中:

  • project_id 是项目 ID。
  • dataset 是包含该表的数据集的名称
  • view 是您要删除的视图的名称

示例:

输入以下命令可从 mydataset 中删除 myviewmydataset 在您的默认项目中。

bq rm -t mydataset.myview

输入以下命令可从 mydataset 中删除 myviewmydatasetmyotherproject 中,不在您的默认项目中。

bq rm -t myotherproject:mydataset.myview

输入以下命令可从 mydataset 中删除 myviewmydataset 在您的默认项目中。该命令使用 -f 快捷键绕过确认。

bq rm -f -t mydataset.myview

API

调用 tables.delete API 方法并使用 tableId 参数指定要删除的视图。

C#

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


using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryDeleteTable
{
    public void DeleteTable(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_id",
        string tableId = "your_table_id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        client.DeleteTable(datasetId, tableId);
        Console.WriteLine($"Table {tableId} deleted.");
    }
}

Go

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

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
table := client.Dataset(datasetID).Table(tableID)
if err := table.Delete(ctx); err != nil {
	return err
}

Java

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

TableId tableId = TableId.of(projectId, datasetName, tableName);
boolean deleted = bigquery.delete(tableId);
if (deleted) {
  // the table was deleted
} else {
  // the table was not found
}

Node.js

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

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

async function deleteTable() {
  // Deletes "my_table" from "my_dataset".

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

  // Delete the table
  await bigquery
    .dataset(datasetId)
    .table(tableId)
    .delete();

  console.log(`Table ${tableId} deleted.`);
}

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';
// $tableId = 'The BigQuery table ID';

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

Python

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

from google.cloud import bigquery

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

# TODO(developer): Set table_id to the ID of the table to fetch.
# table_id = 'your-project.your_dataset.your_table'

# If the table does not exist, delete_table raises
# google.api_core.exceptions.NotFound unless not_found_ok is True
client.delete_table(table_id, not_found_ok=True)
print("Deleted table '{}'.".format(table_id))

Ruby

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

require "google/cloud/bigquery"

def delete_table dataset_id = "my_dataset_id", table_id = "my_table_id"
  bigquery = Google::Cloud::Bigquery.new
  dataset  = bigquery.dataset dataset_id
  table    = dataset.table table_id

  table.delete

  puts "Table #{table_id} deleted."
end

后续步骤

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

发送以下问题的反馈:

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