管理视图

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

复制视图

目前,没有支持将视图从一个数据集复制到另一个数据集的方法。您必须在目标数据集中重新创建视图。

为了帮助您重新创建视图,您可以从旧视图中复制 SQL 查询。要复制定义视图的 SQL 查询,请执行以下操作:

经典版界面

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

  2. View Details 面板中,点击 Details

  3. 复制 Query 框中的文本。

命令行

发出 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

重命名视图

当前无法更改现有视图的名称。如果需要更改视图名称,请使用新名称重新创建视图

删除视图

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

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

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

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

所需权限

删除视图所需的权限与删除表所需的权限相同,也就是说,您必须具有数据集级层的 OWNER 访问权限,或者必须被分配包含 bigquery.tables.delete 权限的项目级层 IAM 角色。以下预定义的项目级层 IAM 角色包含 bigquery.tables.delete 权限:

分配有预定义的项目级层角色的用户可以删除该项目中任何数据集内的视图。在数据集级层分配有 OWNER 权限的用户只能删除该数据集中的视图。

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

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

删除视图

删除视图的方法如下:

经典版界面

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

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

命令行

使用带有 --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 参考文档

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

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

// Creates a client
const bigquery = new BigQuery({projectId});

// Deletes 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
# client = bigquery.Client()
# dataset_id = 'my_dataset'
# table_id = 'my_table'

table_ref = client.dataset(dataset_id).table(table_id)
client.delete_table(table_ref)  # API request

print('Table {}:{} deleted.'.format(dataset_id, 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

后续步骤

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

发送以下问题的反馈:

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