建立資料檢視

本文件說明如何在 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 語法。如要修改用於定義資料檢視的查詢,請在主控台或傳統 BigQuery 網頁版 UI 中使用「Edit query」(編輯查詢) 選項,並使用 bq update --view CLI 指令或是使用 updatepatch API 方法。
  • 您無法在定義資料檢視的 SQL 查詢中加入使用者定義的函式。
  • 您無法在萬用字元資料表查詢中參照資料檢視。

如需進一步瞭解資料檢視適用的配額及限制,請參閱資料檢視限制

所需權限

BigQuery 會將資料檢視視為資料表資源,因此建立資料檢視所需的權限和建立資料表相同。如要建立資料檢視,您必須擁有資料集層級的 WRITER 存取權,或者取得具備 bigquery.tables.create 權限的專案層級身分與存取權管理角色。以下是具備 bigquery.tables.create 權限的預先定義專案層級身分與存取權管理角色:

此外,因為 bigquery.user 角色具備 bigquery.datasets.create 權限,所以取得 bigquery.user 角色身分的使用者可以在自己建立的任何資料集中建立資料檢視。當取得 bigquery.user 角色的使用者建立資料集時,該使用者即被授予該資料集的 OWNER 存取權。 資料集的 OWNER 存取權可讓使用者完全控管該資料集以及其中的所有資料表和視圖。

如要深入瞭解 BigQuery 中的 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) 部分,輸入資料檢視的名稱。

      儲存資料檢視對話方塊

    • 點選 [確定]

指令列

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

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

後續步驟

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

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

這個網頁