管理視圖

本文件說明如何在 Google BigQuery 中管理視圖。您可以透過下列方式管理 BigQuery 視圖:

複製視圖

目前,還沒有支援將視圖從一個資料集複製到另一個資料集的方法。您必須在目標資料集中重新建立視圖。

為協助重新建立視圖,您可以從舊視圖複製 SQL 查詢。請依照以下步驟複製定義視圖的 SQL 查詢:

主控台

  1. 在 UI 導覽窗格中選取視圖。

  2. 按一下「Query editor」(查詢編輯器) 下方的 [Details] (詳細資料)

    瞭解詳情

  3. 複製「Details」(詳細資料) 分頁上「Query」(查詢) 方塊中的文字。

    檢視查詢

傳統版 UI

  1. 在 UI 導覽窗格中選取視圖。

  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] 是您本機上的輸出檔案路徑。

範例:

輸入下列指令,顯示 mydatasetmyview 的相關資訊。 mydataset 位於預設專案中。

bq show --format=prettyjson mydataset.myview

輸入下列指令,顯示 mydatasetmyview 的相關資訊。 mydataset 位於 myotherproject 而非預設專案中。 系統會將視圖屬性寫入本機檔案 — /tmp/myview.json

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

重新命名視圖

目前,您無法變更現有視圖的名稱。如果您需要變更視圖名稱,請使用新名稱來重新建立視圖

刪除視圖

您可以透過以下方式刪除視圖:

  • 使用 GCP 主控台或 BigQuery 傳統網頁版 UI
  • 使用指令列工具的 bq rm 指令
  • 呼叫 tables.delete API 方法

您目前可以透過任何可用的方法,一次只刪除一個視圖。

如要在指定的時間區段後自動刪除視圖,請設定資料集層級的預設到期時間,或是在建立視圖時設定到期時間。

所需權限

刪除視圖需要與刪除資料表相同的權限,您必須具備資料集層級的 OWNER 存取權,或取得具有 bigquery.tables.delete 權限的專案層級身分與存取權管理 (IAM) 角色。以下是擁有 bigquery.tables.delete 權限的預先定義專案層級身分與存取權管理角色:

獲指派預先定義專案層級角色的使用者,可以刪除專案內任何資料集中的視圖。在資料集層級獲指派 OWNER 權限的使用者,只能刪除該資料集中的視圖。

此外,因為 bigquery.user 角色擁有 bigquery.datasets.create 權限,所以接受 bigquery.user 角色指派的使用者可以刪除該使用者建立的任何資料集視圖。當接受 bigquery.user 角色指派的使用者建立資料集時,該使用者即被授予資料集的 OWNER 存取權。資料集的 OWNER 存取權可讓使用者完全控管該資料集和其中的所有資料表與視圖。

如要深入瞭解 BigQuery 中的 IAM 角色和權限,請參閱存取權控管一文。如要深入瞭解資料集層級角色,請參閱資料集的原始角色一節。

刪除視圖

如何刪除視圖:

傳統版 UI

  1. 在「Resources」(資源) 面板中選取視圖,然後按一下視窗右側的 [Delete view] (刪除視圖)

  2. 在對話方塊中輸入視圖的名稱,然後按一下 [Delete] (刪除) 以確認動作。

傳統版 UI

  1. 在導覽列中,按一下視圖名稱旁的向下箭號圖示 向下箭號圖示,然後按一下 [Delete view] (刪除視圖)

  2. 系統提示時,按一下 [OK] (確定) 確認操作。

指令列

使用 bq rm 指令並搭配使用 --table 標記 (或 -t 捷徑) 以刪除視圖。當您使用 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 刪除 myviewmydataset 位於 myotherproject 而非預設專案中。

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');

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";

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

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

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

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

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁