建立檢視表

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

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

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

資料檢視命名

在 BigQuery 中建立資料檢視時,每個資料集中的資料檢視名稱不得重複。資料檢視名稱可以:

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

資料檢視限制

BigQuery 資料檢視有下列幾項限制:

  • 包含資料檢視的資料集和包含資料檢視參照資料表的資料集必須位於同一個位置
  • 您不能執行從資料檢視匯出資料的 BigQuery 工作。
  • 您不能使用 TableDataList JSON API 方法從資料檢視擷取資料。詳情請參閱資料表資料:清單一文。
  • 使用資料檢視時,不能混用標準 SQL 和舊版 SQL 查詢。標準 SQL 查詢無法參照使用舊版 SQL 語法定義的檢視表。
  • 您無法在檢視表中參照查詢參數
  • 建立檢視表時,系統會將基礎資料表的結構定義和檢視表一併儲存。除非更新檢視表,否則如果在檢視表建立後新增、刪除資料欄,或進行其他操作,回報的結構定義就會不正確。不過即使回報的結構定義不正確,所有提交的查詢還是會產生正確的結果。
  • 您無法將舊版 SQL 檢視表自動更新為標準 SQL 語法。如要修改用於定義檢視表的查詢,請在 GCP Console 或傳統 BigQuery 網頁版 UI 中使用 [Edit query] (編輯查詢) 選項、使用 bq update --view CLI 指令,或是使用 update patch 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」(儲存為資料檢視) 對話方塊中:

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

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

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

後續步驟

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

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

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