管理檢視表

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

複製檢視表

您目前只能使用 GCP Console 複製檢視表。

您無法使用傳統網頁版 UI、CLI、REST API 或用戶端程式庫複製檢視表,因此您必須在目的地資料集裡重新建立檢視表。為協助您重新建立檢視表,您可以使用 CLI 或傳統網頁版 UI 複製檢視表的 SQL 查詢。

所需權限

如要在 GCP Console 中複製檢視表,您至少要具備下列權限:

在來源資料集上

  • 複製檢視表中繼資料的 bigquery.tables.get 權限
  • 複製檢視表 SQL 查詢的 bigquery.tables.getData 權限

您可能還需要其他權限 (例如 bigquery.tables.getData),才能存取檢視表 SQL 查詢所參照的資料表。

在目的地資料集上

  • 在目的地資料集建立檢視表副本的 bigquery.tables.create 權限

以下是具有 bigquery.tables.createbigquery.tables.getbigquery.tables.getData 權限的預先定義 Cloud IAM 角色:

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

此外,具備 bigquery.datasets.create 權限的使用者在建立資料集時,會獲得 bigquery.dataOwner 存取權。 bigquery.dataOwner 存取權可讓使用者從來源資料集複製檢視表,但仍需具備目的地資料集的存取權,除非使用者也是目的地資料集的建立者。

如要進一步瞭解 BigQuery 中的 Cloud IAM 角色和權限,請參閱預先定義的角色和權限一文。

複製檢視表

如要複製檢視表:

Console

  1. 在導覽窗格中選取檢視表。

  2. 按一下視窗右側的 [Copy View] (複製檢視表)

  3. 在「Copy View」(複製檢視表) 對話方塊中:

    • 在「Source」(來源) 區段中,驗證您的「Project name」(專案名稱)、「Dataset name」(資料集名稱) 和「Table name」(資料表名稱) 是否正確。
    • 在「Destination」(目的地) 區段中:

      • 在「Project name」(專案名稱) 部分,選擇要複製檢視表的專案。
      • 在「Dataset name」(資料集名稱) 部分,選擇要納入檢視表副本的資料集。
      • 在「Table name」(資料表名稱) 部分,輸入檢視表的名稱。您可以在方塊中輸入新的檢視表名稱,以重新命名檢視表。您輸入的新名稱必須遵循檢視表命名規則。

      複製檢視表對話方塊

    • 按一下 [Copy] (複製)

傳統版 UI

傳統網頁版 UI 不支援複製檢視表。因此,您必須在目的地資料集裡重新建立檢視表。為協助您重新建立檢視表,您可以複製用於定義檢視表的 SQL 查詢。

如要複製定義檢視表的 SQL 查詢:

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

  2. 在「View Details」面板中,按一下 [Details]

  3. 複製「Query」方塊中的文字。

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

範例:

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

bq show --format=prettyjson mydataset.myview

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

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

API

REST API 不支援複製檢視表。因此,您必須在目的地資料集裡重新建立檢視表。如要瞭解如何使用 REST API 建立檢視表,請參閱建立檢視表一文。

重新命名檢視表

目前,您只能在使用 GCP Console 複製檢視表時才能重新命名檢視表。如需在複製檢視表時重新命名的操作說明,請參閱複製檢視表一節。

您無法使用傳統網頁版 UI、CLI、API 或用戶端程式庫變更現有檢視表的名稱。因此,您必須以新名稱重新建立檢視表

刪除檢視表

您可以透過下列方式刪除檢視表:

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

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

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

所需權限

如要刪除檢視表,您至少要具備 bigquery.tables.deletebigquery.tables.get 權限。以下是具有 bigquery.tables.deletebigquery.tables.get 權限的預先定義 Cloud IAM 角色:

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

此外,具備 bigquery.datasets.create 權限的使用者在建立資料集時,會獲得 bigquery.dataOwner 存取權。 bigquery.dataOwner 存取權可讓使用者在資料集裡刪除檢視表。

如要進一步瞭解 BigQuery 中的 Cloud IAM 角色和權限,請參閱預先定義的角色和權限一文。

刪除檢視表

如要刪除檢視表:

Console

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

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

傳統版 UI

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

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

CLI

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

後續步驟

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

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

這個網頁