[手把手教學] 設定 Google Cloud BigQuery authorized view

BigQuery authorized view 可以授權特定的用戶或是群組查看權限,特定的用戶及群組也不會有更動到原始 BigQuery 資料的風險,只會有查詢資料的權限。此教學將帶您手把手建立 BigQuery authorized view。

建立一個 source dataset

# 假如您已經有建立好的 source dataset,則可以略過此步驟

Step 1 前往 GCP console > BigQuery

Step 2 左邊導覽列點選欲建立 dataset 的 Project,此教學以 gcp-expert-demo 當作範例。

Step 3 選完 Project 之後,點選右邊的 create dataset。

Step 4 填寫 dataset ID(這邊以 test_bigquery 當作範例),填寫完後點選左下角的 create dataset 按鈕。

匯入資料至 source dataset

Step 1 點選 create table

Step 2  上方的 source 點選 Upload 並選取需要匯入的 csv 檔案,並點選 Auto detect 及輸入 table 的名稱。完成以上動作之後即可點選左下角的 create table。

Step 3  創建完畢之後,可以試著在上方 query 剛剛匯入的資料。以下為 query 的語法

SELECT * FROM `gcp-expert-demo.test_bigquery.csv`
(格式為 [project_id].[dataset_name].[table_name])

# 注意,因為此教學匯入的資料很少所以用 select * 只會 query 到少量的資料。實務上是不建議用 select *,只 select 需要用到的欄位即可。

建立包含 view 的 dataset

建立完第一個 source dataset 之後,建立另一個 dataset 當作是給外部存取的 view。 因為 BigQuery 只能在 dataset-level 設立權限,所以需要把原始資料跟讓外部存取的資料分成兩個 dataset。此教學將第二個 dataset 名稱設為 shared_views。我們會建議把這個 shared dataset 建立在另一個 project,這樣外部使用者就不會有 source dataset 的 project 以及 BigQuery 權限。

建立一個 view

Step 1 點選右上角的 Compose new query
Step 2 在 Query Editor 中填入需要寫入至 view 的 SQL 語法,並點選 More > Query settings

SELECT number, name
FROM `gcp-expert-demo.shared_views.shared_views_csv`
WHERE number BETWEEN 1 AND 5
(格式為 [project_id].[dataset_name].[table_name])

Step 3 使用預設的設定,點選右方選單左下角的 save

Step 4 點選中間的 Save view,並選擇 view 所在的 project 以及 dataset 名稱以及填入新的 table name,填完點選 SAVE。通常我們會建議把 source dataset 以及 shared dataset 放在不同專案,這樣就算賦予外部使用者過多的權限也不洩漏 source dataset 的資料。

Step 5 在左方的導覽列檢視新建的 view

賦予用戶 Project 的 bigquery.user 權限

bigquery.user 的權限允許用戶執行 project 裡面的 jobs,但是擁有該權限還無法存取 BigQuery dataset 的權限。

Step 1 前往 IAM page,並賦予外部用戶或群組 bigquery.user 的權限。

賦予用戶存取擁有 view 的 dataset 權限

為了讓外部用戶可以存取剛剛創建的 view,我們需要賦予該用戶或群組 dataset 的 bigquery.dataViewer 權限。

Step 1 點選 dataset shared_views,並點選右方的 Share dataset

Step 2 填入外部用戶的信箱,例如:user@example.com,並非設定此 authorized view 的用戶,並賦予該用戶 bigquery.dataViewer 的權限

賦予 view 存取 dataset 的權限

Step 1 點選 source dataset 的 share dataset,此教學以 test_query 當作範例

Step 2 點選 Authorized views 的頁面,選取剛剛創建的 dataset 以及 view。完成後點選左下角的 Done。

驗證 Authorized view 的存取權限

這邊用戶即可透過 user@example.com(範例的外部用戶) 的帳號,進入到 GCP console 的 BigQuery 頁面。並執行以下 SQL 語法來測試存取的權限:

SELECT
  *
FROM
  `shared_views.shared_views_csv0`

常見限制

  1. BigQuery view 的 dataset 必須要與來源的 dataset 位於同一個 location
  2. 無法執行匯出 view 資料的 BigQuery job。
  3. 在使用 view 時無法混合 standard SQL 以及 legacy SQL。
  4. 無法透過 wildcard 來存取 view。

常見問題

Q: BigQuery authorized view 的費用是怎麼計算?
A: BigQuery 在計費的歸屬方面,跟 source table / destination table 所在的 project 無關,而是跟 job 所在的 project 有關。一個簡易的判斷方式是直接看 BigQuery 的 Job History 頁面,哪一個 project 的 Job History 有列出你所執行的 query,就是那個 project 要付費

如果要程式化判斷的話,可以看 Job ID,Job ID 的開頭會是 project ID.[1]https://console.cloud.google.com/bigquery?page=jobs

Q: BigQuery authorized view 會 cache 嗎?
A: 會的,根據文件[1]。只要 view 的資料沒有更動,都是會 cache 的。

Query results are not cached:
If any of the referenced tables or logical views have changed since the results were previously cached

[1]https://cloud.google.com/bigquery/docs/cached-results#cache-exceptions

 


連絡「GCP 專門家」