建立檢視表

本文件說明如何在 BigQuery 中建立檢視表。

您可以透過以下方式在 BigQuery 中建立檢視表:

  • 使用 Cloud Console 或 BigQuery 傳統網頁版 UI
  • 使用指令列工具的 bq mk 指令
  • 呼叫 tables.insert API 方法
  • 使用用戶端程式庫
  • 提交 CREATE VIEW 資料定義語言 (DDL) 陳述式

檢視表命名

在 BigQuery 中建立檢視表時,檢視表名稱在同一資料集中不得重複。以下是檢視表的命名規則:

  • 最多包含 1,024 個字元
  • 包含英文字母 (大寫或小寫)、數字與底線

檢視表限制

BigQuery 檢視表有下列幾項限制:

  • 包含檢視表的資料集,以及包含檢視表參照之資料表的資料集,必須位於同一個位置
  • 您無法執行從檢視表匯出資料的 BigQuery 工作。
  • 您無法使用 TableDataList JSON API 方法從檢視表擷取資料。詳情請參閱 Tabledata:list 的相關說明。
  • 使用檢視表時,不能混用標準 SQL 和舊版 SQL 查詢。標準 SQL 查詢無法參照使用舊版 SQL 語法定義的檢視表。
  • 您無法在檢視表中參照查詢參數
  • 建立檢視表時,系統會將基礎資料表的結構定義和檢視表一併儲存。除非更新檢視表,否則如果在檢視表建立後新增、刪除資料欄,或進行其他操作,回報的結構定義就會不正確。不過即使回報的結構定義不正確,所有提交的查詢還是會產生正確的結果。
  • 您無法將舊版 SQL 檢視表自動更新為標準 SQL 語法。如要修改用於定義檢視表的查詢,請在 Cloud Console 或 BigQuery 傳統網頁版 UI 中使用 [Edit query] (編輯查詢) 選項、使用 bq update --view CLI 指令、使用用戶端程式庫,或是使用 updatepatch API 方法。
  • 您無法在定義檢視表的 SQL 查詢中加入使用者定義的函式。
  • 您無法在萬用字元資料表查詢中參照檢視表。

如要瞭解檢視表適用的配額及限制,請參閱檢視表限制一節。

所需權限

BigQuery 會將檢視表視為資料表資源,因此建立檢視表需要的權限和建立資料表相同。您至少要具備 bigquery.tables.create 權限,才能建立檢視表。以下是具有 bigquery.tables.create 權限的預先定義 Cloud IAM 角色:

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

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

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

建立檢視表

您可以撰寫用來定義檢視表可存取之資料的 SQL 查詢,藉此建立檢視表。

在用於建立檢視表的標準 SQL 查詢中,您必須以下列格式在資料表和檢視表參考資料中包含專案 ID:`project_id.dataset.table`。標準 SQL 需要有明確的專案 ID,以避免從不同專案查詢檢視表時發生混淆。

如要建立檢視表:

主控台

  1. 執行查詢後,在查詢結果視窗上方按一下 [Save View] (儲存檢視表) 按鈕,將查詢儲存為檢視表。

    儲存檢視表

  2. 在「Save view」(儲存檢視表) 對話方塊中:

    • 在「Project name」(專案名稱) 部分,選取要用來儲存檢視表的專案。
    • 在「Dataset name」(資料集名稱) 部分,選擇要納入檢視表的資料集。包含檢視表的資料集,以及包含檢視表參照之資料表的資料集,必須位於同一個位置
    • 在「Table name」(資料表名稱) 部分,輸入檢視表的名稱。
    • 按一下 [Save] (儲存)

傳統版 UI

  1. 執行查詢後,在查詢結果視窗中按一下 [Save View] (儲存檢視表) 按鈕,將查詢儲存為檢視表。

    儲存檢視表

  2. 在「Save view」(儲存檢視表) 對話方塊中:

    • 在「Project」(專案) 部分,選取要用來儲存檢視表的專案。
    • 在「Dataset」(資料集) 部分,選擇要納入檢視表的資料集。包含檢視表的資料集,以及包含檢視表參照之資料表的資料集,必須位於同一個位置
    • 在「Table ID」(資料表 ID) 部分,輸入檢視表的名稱。
    • 按一下 [OK] (確定)

CLI

請使用 mk 指令,並加上 --view 旗標。如果是標準 SQL 查詢,請加入 --use_legacy_sql 旗標,並將旗標設定為 false。可選擇性使用的參數包括 --expiration--description--label

如果您的查詢參照儲存在 Google Cloud Storage 或本機檔案中的外部使用者定義函式資源,請使用 --view_udf_resource 旗標來指定這些資源。本文不示範 --view_udf_resource 旗標。如要進一步瞭解如何使用 UDF,請參閱標準 SQL 使用者定義的函式一文。

如果要在預設專案以外的專案中建立檢視表,請使用 --project_id 旗標來指定專案 ID。

bq mk \
--use_legacy_sql=false \
--view_udf_resource=path_to_file \
--expiration integer \
--description "description" \
--label key:value, key:value \
--view 'query' \
--project_id project_id \
dataset.view

其中:

  • path_to_file 是程式碼檔案的 URI 或本機檔案系統路徑,該檔案會做為檢視表使用的使用者定義函式資源,而立即載入並進行評估。請重複該標記以指定多個檔案。
  • integer 是檢視表的預設生命週期 (以秒為單位),最小值是 3600 秒 (1 小時)。到期時間為目前時間加整數值。如果您在建立檢視表時設定了到期時間,系統會忽略資料集的預設資料表到期時間設定。
  • description 是置於引號中的檢視表說明。
  • key:value 是代表標籤的「鍵:值」組合。您可以用逗號分隔的清單輸入多個標籤。
  • query 是一個有效的查詢,對於標準 SQL 檢視表而言,查詢必須以下列格式在資料表和檢視表參照中包含專案 ID:`[PROJECT_ID].[DATASET].[TABLE]`
  • project_id 是您的專案 ID (若未設定預設專案)。
  • dataset 是專案中的資料集。
  • view 是您要建立的檢視表名稱。

範例:

輸入下列指令,在預設專案的 mydataset 中建立名為 myview 的檢視表。到期時間設為 3600 秒 (1 小時)、說明設為 This is my view,標籤則設為 organization:development。用於建立檢視表的查詢會查詢來自美國人名資料公開資料集的資料。

bq mk \
--use_legacy_sql=false \
--expiration 3600 \
--description "This is my view" \
--label organization:development \
--view \
'SELECT
  name,
  number
FROM
  `bigquery-public-data.usa_names.usa_1910_current`
WHERE
  gender = "M"
ORDER BY
  number DESC' \
mydataset.myview

輸入下列指令,在 myotherproject 中的 mydataset 建立名為 myview 的檢視表。到期時間設為 3600 秒 (1 小時)、說明設為 This is my view,標籤則設為 organization:development。用於建立檢視表的查詢會查詢來自美國人名資料公開資料集的資料。

bq mk \
--use_legacy_sql=false \
--expiration 3600 \
--description "This is my view" \
--label organization:development \
--view \
'SELECT
  name,
  number
FROM
  `bigquery-public-data.usa_names.usa_1910_current`
WHERE
  gender = "M"
ORDER BY
  number DESC' \
--project_id myotherproject \
mydataset.myview

建立檢視表後,您可以更新檢視表的到期時間、說明和標籤。詳情請參閱更新檢視表的相關說明。

API

使用含有 view 屬性的資料表資源呼叫 tables.insert 方法。

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")
meta := &bigquery.TableMetadata{
	// This example shows how to create a view of the shakespeare sample dataset, which
	// provides word frequency information.  This view restricts the results to only contain
	// results for works that contain the "king" in the title, e.g. King Lear, King Henry V, etc.
	ViewQuery: "SELECT word, word_count, corpus, corpus_date FROM `bigquery-public-data.samples.shakespeare` WHERE corpus LIKE '%king%'",
}
if err := client.Dataset(datasetID).Table(tableID).Create(ctx, meta); err != nil {
	return err
}

Python

請在嘗試這個範例之前,依照 BigQuery 快速入門導覽課程:使用用戶端程式庫一文中的 Python 設定操作說明進行操作。詳情請參閱 BigQuery Python API 參考資料說明文件

# from google.cloud import bigquery
# client = bigquery.Client()
# project = 'my-project'
# source_dataset_id = 'my_source_dataset'
# source_table_id = 'us_states'
# shared_dataset_ref = client.dataset('my_shared_dataset')

# This example shows how to create a shared view of a source table of
# US States. The source table contains all 50 states, while the view will
# contain only states with names starting with 'W'.
view_ref = shared_dataset_ref.table("my_shared_view")
view = bigquery.Table(view_ref)
sql_template = 'SELECT name, post_abbr FROM `{}.{}.{}` WHERE name LIKE "W%"'
view.view_query = sql_template.format(project, source_dataset_id, source_table_id)
view = client.create_table(view)  # API request

print("Successfully created view at {}".format(view.full_table_id))

建立檢視表之後,便可像查詢資料表一樣查詢該檢視表。

後續步驟

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

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

這個網頁
需要協助嗎?請前往我們的支援網頁