標記資料表、檢視表和資料集

本文件說明如何使用標記,將身分與存取權管理 (IAM) 政策依條件套用至 BigQuery 資料表、檢視和資料集。

您也可以使用標記,透過 IAM 政策對 BigQuery 資料表、檢視和資料集 (預先發布版) 依條件拒絕存取權。詳情請參閱「拒絕政策」。

標記是一種鍵/值組合,可直接附加至資料表、檢視畫面或資料集,或是資料表、檢視畫面或資料集可繼承自其他Google Cloud 資源的鍵/值組合。您可以根據資源是否具備特定標記,有條件地套用政策。舉例來說,您可以將 BigQuery 資料檢視者角色授予任何具有 environment:dev 標記的資料集的實體。

如要進一步瞭解如何在 Google Cloud資源階層中使用標記,請參閱「標記總覽」。

如要同時授予多個相關 BigQuery 資源權限 (包括尚不存在的資源),建議您使用IAM 條件

限制

  • 您無法在 BigQuery Omni 資料表、隱藏資料集中的資料表或臨時資料表中使用資料表標記。BigQuery Omni 資料集不支援資料集標記。此外,BigQuery Omni 中的跨區查詢在其他區域的資料表存取權控管檢查期間不會使用標記。

  • 您最多可以為資料表或資料集附加 50 個標記。

  • 萬用字元查詢中參照的所有資料表,都必須有完全相同的標記鍵和值。

  • 資料集或資料表的條件式存取權使用者無法透過 Google Cloud 主控台修改該資源的權限。您只能透過 bq 工具和 BigQuery API 修改權限。

  • 部分 BigQuery 以外的服務無法正確驗證身分與存取權管理代碼條件。如果標記條件為正值,表示只有在資源具有特定標記時,使用者才會獲得資源的角色,則系統會拒絕存取該資源,不論該資源附加哪些標記。如果標記條件為否定,表示只有在資源「沒有」特定標記時,才會授予使用者資源角色,則不會檢查標記條件。

    舉例來說,Data Catalog 無法驗證 BigQuery 資料集和資料表的 IAM 標記條件。假設有一個條件式 IAM 政策,會將 BigQuery 資料檢視者角色授予具有 employee_type=intern 標記的資料集。由於這是正面標記條件,即使資料集含有 employee_type=intern 標記,實習生也無法透過在 Data Catalog 中搜尋來查看資料集。如果標記條件變更為否定條件,實習生就只能查看「沒有」employee_type=intern 標記的資料集,系統會完全略過檢查,實習生就能查看平常無法在 BigQuery 中存取的資料集。

必要的角色

您必須授予 IAM 角色,讓使用者具備執行本文件中各項工作的必要權限

以下兩個預先定義的 IAM 角色都包含所有必要的 BigQuery 權限:

  • BigQuery 資料擁有者 (roles/bigquery.dataOwner)
  • BigQuery 管理員 (roles/bigquery.admin)

代碼使用者角色 (roles/resourcemanager.tagUser) 包含新增和移除代碼的資源管理工具權限。

所需權限

如要在 BigQuery 中使用標記,您必須具備下列權限:

作業 BigQuery 介面 (API、CLI、主控台) 和 Terraform Cloud Resource Manager API 或 gcloud
為資料表或檢視畫面附加標記
  • 資料表或檢視表的 bigquery.tables.createTagBinding 權限
  • 標記值的 resourcemanager.tagValueBindings.create 權限
  • bigquery.tables.create 權限:在建立資料表或檢視表時附加標記
  • bigquery.tables.update 更新資料表或檢視表時附加標記的權限
  • 資料表或檢視表的 bigquery.tables.createTagBinding 權限
  • 標記值的 resourcemanager.tagValueBindings.create 權限
從資料表或檢視畫面中移除標記
  • 資料表或檢視表的 bigquery.tables.deleteTagBinding 權限
  • 標記值的 resourcemanager.tagValueBindings.delete 權限
  • bigquery.tables.update 更新資料表或檢視表時移除標記的權限
  • 資料表或檢視表的 bigquery.tables.deleteTagBinding 權限
  • 標記值的 resourcemanager.tagValueBindings.delete 權限
將標記附加至資料集
  • 資料集的 bigquery.datasets.createTagBinding 權限
  • 標記值的 resourcemanager.tagValueBindings.create 權限
  • bigquery.datasets.create 權限:建立資料集時附加標記
  • bigquery.datasets.update 權限:在更新資料集時附加標記
  • 資料集的 bigquery.datasets.createTagBinding 權限
  • 標記值的 resourcemanager.tagValueBindings.create 權限
從資料集中移除標記
  • 資料集的 bigquery.datasets.deleteTagBinding 權限
  • 標記值的 resourcemanager.tagValueBindings.delete 權限
  • bigquery.datasets.update 更新資料集時移除標記的權限
  • 資料集的 bigquery.datasets.deleteTagBinding 權限
  • 標記值的 resourcemanager.tagValueBindings.delete 權限

如要在 Google Cloud 控制台中列出標記鍵和鍵值,您需要具備下列權限:

  • 如要列出與上層機構或專案相關聯的標記鍵,您必須具備標記鍵父項層級的 resourcemanager.tagKeys.list 權限,以及每個標記鍵的 resourcemanager.tagKeys.get 權限。如要在 BigQuery 控制台中查看代碼鍵清單,請依序點選資料集名稱和「編輯詳細資料」,或是點選資料表或檢視表名稱,然後依序點選「詳細資料」>「編輯詳細資料」

  • 如要列出與上層機構或專案相關聯的索引鍵標記值,您必須具備標記值父層級別的 resourcemanager.tagValues.list 權限,以及每個標記值的 resourcemanager.tagValues.get 權限。如要在 BigQuery 主控台中查看代碼鍵值清單,請依序按一下資料集名稱和「編輯詳情」,或是按一下資料表或檢視名稱,然後依序點選「詳細資料」>「編輯詳情」

如要在 Cloud Resource Manager API 或 gcloud 中使用標記,您需要具備下列權限:

  • 如要使用 Cloud Resource Manager API 或 gcloud CLI 列出表格或檢視畫面中附加的標記,您需要 bigquery.tables.listTagBindings IAM 權限。
  • 如要列出資料表或檢視表的有效標記,您必須具備 bigquery.tables.listEffectiveTags IAM 權限。
  • 如要使用 Cloud Resource Manager API 或 gcloud CLI 列出附加至資料集的標記,您需要具備 bigquery.datasets.listTagBindings IAM 權限。
  • 如要列出資料集的有效標記,您必須具備 bigquery.datasets.listEffectiveTags IAM 權限。

建立標記鍵和值

您可以先建立標記,再將標記附加至 BigQuery 資源,也可以在使用Google Cloud 主控台建立資源時手動建立標記。

如要瞭解如何建立標記鍵和標記值,請參閱資源管理工具說明文件中的「建立標記」和「新增標記值」相關章節。

為資料集加上標記

以下各節將說明如何將標記附加至新資料集和現有資料集、列出附加至資料集的標記,以及從資料集中分離標記。

建立新資料集時附加標記

建立標記後,您可以將標記附加至新的 BigQuery 資料集。您只能為任何標記鍵將一個標記值附加至資料集。您最多可為資料集附加 50 個標記。

主控台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在「Explorer」窗格中,選取要建立資料集的專案。

  3. 依序點選 「View actions」>「Create dataset」

  4. 輸入新資料集的相關資訊。詳情請參閱「建立資料集」。

  5. 展開「代碼」部分。

    1. 如要套用現有標籤,請按照下列步驟操作:

      1. 按一下「選取範圍」旁的下拉式箭頭,然後選擇「目前範圍」選取目前的機構或「選取目前的專案」

        或者,您也可以按一下「選取範圍」來搜尋資源,或查看目前資源清單。

      2. 針對「Key 1」和「Value 1」,請從清單中選擇適當的值。

    2. 如要手動輸入新代碼,請按照下列步驟操作:

      1. 按一下「選取範圍」旁的下拉式箭頭,然後選擇「手動輸入 ID」>「機構」、「專案」或「標記」

      2. 如果您要為專案或機構建立代碼,請在對話方塊中輸入 PROJECT_IDORGANIZATION_ID,然後按一下「儲存」

      3. 針對「Key 1」和「Value 1」,請從清單中選擇適當的值。

    3. 選用:如要為表格新增其他標記,請按一下「新增標記」,然後按照前述步驟操作。

  6. 點選「建立資料集」

SQL

使用 CREATE SCHEMA 陳述式

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在查詢編輯器中輸入以下陳述式:

    CREATE SCHEMA PROJECT_ID.DATASET_ID
    OPTIONS (
      tags = [('TAG_KEY_1', 'TAG_VALUE_1'), ('TAG_KEY_2', 'TAG_VALUE_2')];)

    請依指示取代下列項目:

    • PROJECT_ID:您的專案 ID。
    • DATASET_ID:您要建立的資料集 ID。
    • TAG_KEY_1:您要將哪個命名空間鍵名稱設為資料集的第一個標記,例如 'my-project/env''556741164180/department'
    • TAG_VALUE_1:標記值的簡稱,例如 'prod''sales'
    • TAG_KEY_2:第二個標記的命名空間鍵名稱。
    • TAG_VALUE_2:第二個標記值的簡寫名稱。

  3. 按一下 「Run」

如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。

bq

使用加上 --add_tags 旗標的 bq mk --dataset 指令

bq mk --dataset \
    --add_tags=TAG \
    PROJECT_ID:DATASET_ID

更改下列內容:

  • TAG:您要附加至新資料集的標記。多個標記之間請以半形逗號分隔。例如:556741164180/env:prod,myProject/department:sales。每個標記都必須含有命名空間限定的鍵名稱和值簡稱
  • PROJECT_ID:您建立資料集的專案 ID。
  • DATASET_ID:新資料集的 ID。

Terraform

使用 google_bigquery_dataset 資源。

如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。

以下範例會建立名為 my_dataset 的資料集,然後透過填入 resource_tags 欄位,將標記附加到資料集:


# Create tag keys and values
data "google_project" "default" {}

resource "google_tags_tag_key" "env_tag_key" {
  parent     = "projects/${data.google_project.default.project_id}"
  short_name = "env2"
}

resource "google_tags_tag_key" "department_tag_key" {
  parent     = "projects/${data.google_project.default.project_id}"
  short_name = "department2"
}

resource "google_tags_tag_value" "env_tag_value" {
  parent     = "tagKeys/${google_tags_tag_key.env_tag_key.name}"
  short_name = "prod"
}

resource "google_tags_tag_value" "department_tag_value" {
  parent     = "tagKeys/${google_tags_tag_key.department_tag_key.name}"
  short_name = "sales"
}

# Create a dataset
resource "google_bigquery_dataset" "default" {
  dataset_id                      = "my_dataset"
  default_partition_expiration_ms = 2592000000  # 30 days
  default_table_expiration_ms     = 31536000000 # 365 days
  description                     = "dataset description"
  location                        = "US"
  max_time_travel_hours           = 96 # 4 days

  # Attach tags to the dataset
  resource_tags = {
    (google_tags_tag_key.env_tag_key.namespaced_name) : google_tags_tag_value.env_tag_value.short_name,
    (google_tags_tag_key.department_tag_key.namespaced_name) : google_tags_tag_value.department_tag_value.short_name
  }
}

如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節中的步驟。

準備 Cloud Shell

  1. 啟動 Cloud Shell
  2. 設定要套用 Terraform 設定的預設 Google Cloud 專案。

    您只需為每個專案執行這個指令一次,而且可以在任何目錄中執行。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 設定檔中設定明確的值,系統就會覆寫環境變數。

準備目錄

每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。

  1. Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱必須包含 .tf 副檔名,例如 main.tf。在本教學課程中,檔案稱為 main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您正在參考教學課程,可以複製各個部分或步驟中的程式碼範例。

    將範例程式碼複製到新建立的 main.tf 中。

    您可以視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您採用這種做法。

  3. 查看並修改要套用至環境的範例參數。
  4. 儲存變更。
  5. 初始化 Terraform。這項操作只需對每個目錄執行一次。
    terraform init

    如要使用最新版的 Google 供應器,請視需要加入 -upgrade 選項:

    terraform init -upgrade

套用變更

  1. 查看設定,並確認 Terraform 要建立或更新的資源是否符合您的預期:
    terraform plan

    視需要修正設定。

  2. 執行下列指令,並在提示中輸入 yes,即可套用 Terraform 設定:
    terraform apply

    等待 Terraform 顯示「Apply complete!」(套用完成) 訊息。

  3. 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。

API

呼叫 datasets.insert 方法,並將標記新增至 resource_tags 欄位。

將標記附加至現有資料集

建立標記後,即可將標記套用至現有資料集。您只能為任何標記鍵將一個標記值附加至資料集。

主控台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在「Explorer」窗格中展開專案並選取資料集。

  3. 在「資料集資訊」部分,按一下 「編輯詳細資料」

  4. 展開「代碼」部分。

    1. 如要套用現有標籤,請按照下列步驟操作:

      1. 按一下「選取範圍」旁的下拉式箭頭,然後選擇「目前範圍」選取目前的機構或「選取目前的專案」

        或者,您也可以按一下「選取範圍」來搜尋資源,或查看目前資源清單。

      2. 針對「Key 1」和「Value 1」,請從清單中選擇適當的值。

    2. 如要手動輸入新代碼,請按照下列步驟操作:

      1. 按一下「選取範圍」旁的下拉式箭頭,然後選擇「手動輸入 ID」>「機構」、「專案」或「標記」

      2. 如果您要為專案或機構建立代碼,請在對話方塊中輸入 PROJECT_IDORGANIZATION_ID,然後按一下「儲存」

      3. 針對「Key 1」和「Value 1」,請從清單中選擇適當的值。

    3. 選用:如要為表格新增其他標記,請按一下「新增標記」,然後按照前述步驟操作。

  5. 按一下 [儲存]

SQL

使用 ALTER SCHEMA SET OPTIONS 陳述式

以下範例會覆寫現有資料集的所有標記。

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在查詢編輯器中輸入以下陳述式:

    ALTER SCHEMA PROJECT_ID.DATASET_ID
    SET OPTIONS (
      tags = [('TAG_KEY_1', 'TAG_VALUE_1'), ('TAG_KEY_2', 'TAG_VALUE_2')];)

    請依指示取代下列項目:

    • PROJECT_ID:您的專案 ID。
    • DATASET_ID:包含資料表的資料集 ID。
    • TABLE_ID:您要標記的資料表名稱。
    • TAG_KEY_1:您要設為資料表中第一個標記的命名空間鍵名稱,例如 'my-project/env''556741164180/department'
    • TAG_VALUE_1:標記值的簡稱,例如 'prod''sales'
    • TAG_KEY_2:第二個標記的命名空間鍵名稱。
    • TAG_VALUE_2:第二個標記值的簡寫名稱。

  3. 按一下 「Run」

如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。

以下範例使用 += 運算子,將標記附加至資料集,且不會覆寫現有標記。如果現有標記的鍵相同,系統會覆寫該標記。

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在查詢編輯器中輸入以下陳述式:

    ALTER SCHEMA PROJECT_ID.DATASET_ID
    SET OPTIONS (
      tags += [('TAG_KEY_1', 'TAG_VALUE_1'), ('TAG_KEY_2', 'TAG_VALUE_2')];)

    請依指示取代下列項目:

    • PROJECT_ID:您的專案 ID。
    • DATASET_ID:包含資料表的資料集 ID。
    • TABLE_ID:您要標記的資料表名稱。
    • TAG_KEY_1:您要設為資料表中第一個標記的命名空間鍵名稱,例如 'my-project/env''556741164180/department'
    • TAG_VALUE_1:標記值的簡稱,例如 'prod''sales'
    • TAG_KEY_2:第二個標記的命名空間鍵名稱。
    • TAG_VALUE_2:第二個標記值的簡寫名稱。

  3. 按一下 「Run」

如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。

bq

使用加上 --add_tags 旗標的 bq update 指令

bq update \
    --add_tags=TAG \
    PROJECT_ID:DATASET_ID

更改下列內容:

  • TAG:您要附加至資料集的標記。多個標記之間請以半形逗號分隔。例如:556741164180/env:prod,myProject/department:sales。每個標記都必須含有命名空間限定的鍵名稱和值簡稱
  • PROJECT_ID:現有資料集所在專案的 ID。
  • DATASET_ID:現有資料集的 ID。

gcloud

如要使用指令列將標記附加至資料集,請使用 gcloud resource-manager tags bindings create 指令建立標記繫結資源:

gcloud resource-manager tags bindings create \
    --tag-value=TAG_VALUE_NAME \
    --parent=RESOURCE_ID \
    --location=LOCATION

更改下列內容:

  • TAG_VALUE_NAME:要附加的標記值的永久 ID 或命名空間名稱,例如 tagValues/45678901231234567/my_tag_key/my_tag_value
  • RESOURCE_ID:資料集的全名,包括用於識別資源類型的 API 網域名稱 (//bigquery.googleapis.com/)。例如://bigquery.googleapis.com/projects/my_project/datasets/my_dataset
  • LOCATION:資料集的位置

Terraform

將標記新增至資料集的 resource_tags 欄位,然後使用 google_bigquery_dataset 資源套用更新後的設定。詳情請參閱「建立新資料集時附加標記」一文中的 Terraform 範例。

API

呼叫 datasets.get 方法來取得資料集資源,包括 resource_tags 欄位。將標記新增至 resource_tags 欄位,然後使用 datasets.update 方法傳回更新後的資料集資源。

列出資料集附加的標記

下列步驟會提供直接附加至資料集的標記繫結清單。這些方法不會傳回從父項資源繼承的標記。

主控台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在「Explorer」窗格中展開專案並選取資料集。

    標記會顯示在「Dataset info」部分。

bq

如要列出附加至資料集的標記,請使用 bq show 指令

bq show PROJECT_ID:DATASET_ID

更改下列內容:

  • PROJECT_ID:包含資料集的專案 ID。
  • DATASET_ID:您要列出標記的資料集 ID。

gcloud

如要取得已連結至資源的標記繫結清單,請使用 gcloud resource-manager tags bindings list 指令

gcloud resource-manager tags bindings list \
    --parent=RESOURCE_ID \
    --location=LOCATION

更改下列內容:

  • RESOURCE_ID:資料集的全名,包括用於識別資源類型的 API 網域名稱 (//bigquery.googleapis.com/)。例如://bigquery.googleapis.com/projects/my_project/datasets/my_dataset

  • LOCATION:資料集的位置

輸出結果會與下列內容相似:

name: tagBindings/%2F%2Fbigquery.googleapis.com%2Fprojects%2Fmy_project%2Fdatasets%2Fmy_dataset/tagValues/4567890123
parent: //bigquery.googleapis.com/projects/my_project/datasets/my_dataset
tagValue: tagValues/4567890123

Terraform

使用 terraform state show 指令列出資料集的屬性,包括 resource_tags 欄位。在執行資料集 Terraform 設定檔的目錄中執行此指令。

terraform state show google_bigquery_dataset.default

API

呼叫 datasets.get 方法來取得資料集資源。資料集資源包含在 resource_tags 欄位中附加至資料集的標記。

觀看次數

使用 INFORMATION_SCHEMA.SCHEMATA_OPTIONS 檢視畫面

舉例來說,下列查詢會顯示某個區域中所有資料集所附加的所有標記。這項查詢會傳回資料表,其中的欄包括 schema_name (資料集名稱)、option_name (一律為 'tags')、object_type (一律為 ARRAY<STRUCT<STRING, STRING>>) 和 option_value,其中包含 STRUCT 物件陣列,代表與每個資料集相關聯的標記。如果資料集未指派標記,option_value 欄會傳回空陣列。

SELECT * from region-REGION.INFORMATION_SCHEMA.SCHEMATA_OPTIONS
WHERE option_name='tags'

更改下列內容:

  • REGION:資料集所在的區域

從資料集中分離標記

您可以刪除標籤繫結資源,將標籤從資源中分離。如果要刪除代碼,您必須先將其從資料集中分離,再刪除。詳情請參閱刪除標記

主控台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在「Explorer」窗格中展開專案並選取資料集。

  3. 在「資料集資訊」部分,按一下 「編輯詳細資料」

  4. 在「標記」部分中,找出要刪除的標記,然後按一下旁邊的「刪除項目」圖示

  5. 按一下 [儲存]

SQL

使用 ALTER SCHEMA SET OPTIONS 陳述式

以下範例會使用 -= 運算子,從資料集中分離標記。如要將所有標記從資料集分離,您可以指定 tags=NULLtags=[]

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在查詢編輯器中輸入以下陳述式:

    ALTER TABLE PROJECT_ID.DATASET_ID.TABLE_ID
    SET OPTIONS (
      tags -= [('TAG_KEY_1', 'TAG_VALUE_1'), ('TAG_KEY_2', 'TAG_VALUE_2')];)

    請依指示取代下列項目:

    • PROJECT_ID:您的專案 ID。
    • DATASET_ID:包含資料表的資料集 ID。
    • TABLE_ID:您要從中分離標記的資料表名稱。
    • TAG_KEY_1:您要分離的第一個標記的命名空間鍵名稱,例如 'my-project/env''556741164180/department'
    • TAG_VALUE_1:要分離的標記值的簡短名稱,例如 'prod''sales'
    • TAG_KEY_2:您要分離的第二個標記的命名空間鍵名稱。
    • TAG_VALUE_2:要分離的第二個標記值的簡短名稱。

  3. 按一下 「Run」

如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。

bq

使用加上 --remove_tags 旗標的 bq update 指令

bq update \
    --remove_tags=REMOVED_TAG \
    PROJECT_ID:DATASET_ID

更改下列內容:

  • REMOVED_TAG:從資料集中移除的標記。多個標記之間請以半形逗號分隔。僅接受不含值對的鍵。例如:556741164180/env,myProject/department。每個代碼都必須有命名空間鍵名稱
  • PROJECT_ID:包含資料集的專案 ID。
  • DATASET_ID:要解除標記的資料集 ID。

或者,如要從資料集中移除所有代碼,請使用 bq update 指令搭配 --clear_all_tags 標記:

bq update \
    --clear_all_tags
    PROJECT_ID:DATASET_ID

gcloud

如要使用指令列從資料集中分離標記,請使用 gcloud resource-manager tags bindings delete 指令刪除標記繫結:

gcloud resource-manager tags bindings delete \
    --tag-value=TAG_VALUE_NAME \
    --parent=RESOURCE_ID \
    --location=LOCATION

更改下列內容:

  • TAG_VALUE_NAME:要分離的標記值的永久 ID 或命名空間名稱,例如 tagValues/45678901231234567/my_tag_key/my_tag_value
  • RESOURCE_ID:資料集的全名,包括用於識別資源類型的 API 網域名稱 (//bigquery.googleapis.com/)。例如://bigquery.googleapis.com/projects/my_project/datasets/my_dataset
  • LOCATION:資料集的位置

Terraform

從資料集的 resource_tags 欄位移除標記,然後使用 google_bigquery_dataset 資源套用更新的設定。

API

呼叫 datasets.get 方法來取得資料集資源,包括 resource_tags 欄位。從 resource_tags 欄位移除標記,並使用 datasets.update 方法傳回更新後的資料集資源。

標記資料表

以下各節將說明如何將標記附加至新表格和現有表格、列出附加至表格的標記,以及從表格中分離標記。

建立新資料表時附加標記

建立標籤後,您可以將標籤附加到新資料表。您只能為任何指定的標記鍵,將一個標記值附加至表格。您最多可為表格附加 50 個標記。

主控台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在「Explorer」窗格中展開專案,然後選取資料集。

  3. 在「資料集資訊」部分,按一下 「建立資料表」

  4. 輸入新資料表的資訊。詳情請參閱「建立及使用資料表」。

  5. 展開「代碼」部分。

    1. 如要套用現有標籤,請按照下列步驟操作:

      1. 按一下「選取範圍」旁的下拉式箭頭,然後選擇「目前範圍」選取目前的機構或「選取目前的專案」

        或者,您也可以按一下「選取範圍」來搜尋資源,或查看目前資源清單。

      2. 針對「Key 1」和「Value 1」,請從清單中選擇適當的值。

    2. 如要手動輸入新代碼,請按照下列步驟操作:

      1. 按一下「選取範圍」旁的下拉式箭頭,然後選擇「手動輸入 ID」>「機構」、「專案」或「標記」

      2. 如果您要為專案或機構建立代碼,請在對話方塊中輸入 PROJECT_IDORGANIZATION_ID,然後按一下「儲存」

      3. 針對「Key 1」和「Value 1」,請從清單中選擇適當的值。

    3. 選用:如要為表格新增其他標記,請按一下「新增標記」,然後按照前述步驟操作。

  6. 點選「建立資料表」。

SQL

使用 CREATE TABLE 陳述式

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在查詢編輯器中輸入以下陳述式:

    CREATE TABLE PROJECT_ID.DATASET_ID.TABLE_ID
    OPTIONS (
      tags = [('TAG_KEY_1', 'TAG_VALUE_1'), ('TAG_KEY_2', 'TAG_VALUE_2')];)

    請依指示取代下列項目:

    • PROJECT_ID:您的專案 ID。
    • DATASET_ID:您要建立資料表的資料集 ID。
    • TABLE_ID:新資料表的名稱。
    • TAG_KEY_1:您要設為資料表中第一個標記的命名空間鍵名稱,例如 'my-project/env''556741164180/department'
    • TAG_VALUE_1:標記值的簡稱,例如 'prod''sales'
    • TAG_KEY_2:第二個標記的命名空間鍵名稱。
    • TAG_VALUE_2:第二個標記值的簡寫名稱。

  3. 按一下 「Run」

如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。

bq

使用加上 --add_tags 旗標的 bq mk --table 指令

bq mk --table \
    --schema=SCHEMA \
    --add_tags=TAG \
    PROJECT_ID:DATASET_ID.TABLE_ID

更改下列內容:

  • SCHEMA內嵌結構定義
  • TAG:您要附加至新資料表的標記。多個標記之間請以半形逗號分隔。例如:556741164180/env:prod,myProject/department:sales。每個標記都必須包含命名空間限定鍵名稱和值簡稱
  • PROJECT_ID:您建立表格的專案 ID。
  • DATASET_ID:您要建立資料表的資料集 ID。
  • TABLE_ID:新資料表的 ID。

Terraform

使用 google_bigquery_table 資源。

如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。

以下範例會建立名為 mytable 的資料表,然後透過填入 resource_tags 欄位,將標記附加至該資料表:


# Create tag keys and values
data "google_project" "default" {}

resource "google_tags_tag_key" "env_tag_key" {
  parent     = "projects/${data.google_project.default.project_id}"
  short_name = "env3"
}

resource "google_tags_tag_key" "department_tag_key" {
  parent     = "projects/${data.google_project.default.project_id}"
  short_name = "department3"
}

resource "google_tags_tag_value" "env_tag_value" {
  parent     = "tagKeys/${google_tags_tag_key.env_tag_key.name}"
  short_name = "prod"
}

resource "google_tags_tag_value" "department_tag_value" {
  parent     = "tagKeys/${google_tags_tag_key.department_tag_key.name}"
  short_name = "sales"
}

# Create a dataset
resource "google_bigquery_dataset" "default" {
  dataset_id                      = "MyDataset"
  default_partition_expiration_ms = 2592000000  # 30 days
  default_table_expiration_ms     = 31536000000 # 365 days
  description                     = "dataset description"
  location                        = "US"
  max_time_travel_hours           = 96 # 4 days
}

# Create a table
resource "google_bigquery_table" "default" {
  dataset_id          = google_bigquery_dataset.default.dataset_id
  table_id            = "mytable"
  description         = "table description"
  deletion_protection = false # set to "true" in production

  # Attach tags to the table
  resource_tags = {
    (google_tags_tag_key.env_tag_key.namespaced_name) : google_tags_tag_value.env_tag_value.short_name,
    (google_tags_tag_key.department_tag_key.namespaced_name) : google_tags_tag_value.department_tag_value.short_name
  }
}

如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節中的步驟。

準備 Cloud Shell

  1. 啟動 Cloud Shell
  2. 設定要套用 Terraform 設定的預設 Google Cloud 專案。

    您只需為每個專案執行這個指令一次,而且可以在任何目錄中執行。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 設定檔中設定明確的值,系統就會覆寫環境變數。

準備目錄

每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。

  1. Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱必須包含 .tf 副檔名,例如 main.tf。在本教學課程中,檔案稱為 main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您正在參考教學課程,可以複製各個部分或步驟中的程式碼範例。

    將範例程式碼複製到新建立的 main.tf 中。

    您可以視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您採用這種做法。

  3. 查看並修改要套用至環境的範例參數。
  4. 儲存變更。
  5. 初始化 Terraform。這項操作只需對每個目錄執行一次。
    terraform init

    如要使用最新版的 Google 供應器,請視需要加入 -upgrade 選項:

    terraform init -upgrade

套用變更

  1. 查看設定,並確認 Terraform 要建立或更新的資源是否符合您的預期:
    terraform plan

    視需要修正設定。

  2. 執行下列指令,並在提示中輸入 yes,即可套用 Terraform 設定:
    terraform apply

    等待 Terraform 顯示「Apply complete!」(套用完成) 訊息。

  3. 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。

API

使用已定義的資料表資源呼叫 tables.insert 方法。在 resource_tags 欄位中加入標記。

將標記附加至現有資料表

建立標記後,即可將標記套用至現有資料表。您只能為任何指定的標記鍵,將一個標記值附加至表格。

主控台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在「Explorer」窗格中展開專案和資料集,然後選取資料表。

  3. 依序點選「詳細資料」分頁卡 > 「編輯詳情」

  4. 展開「代碼」部分。

    1. 如要套用現有標籤,請按照下列步驟操作:

      1. 按一下「選取範圍」旁的下拉式箭頭,然後選擇「目前範圍」選取目前的機構或「選取目前的專案」

        或者,您也可以按一下「選取範圍」來搜尋資源,或查看目前資源清單。

      2. 針對「Key 1」和「Value 1」,請從清單中選擇適當的值。

    2. 如要手動輸入新代碼,請按照下列步驟操作:

      1. 按一下「選取範圍」旁的下拉式箭頭,然後選擇「手動輸入 ID」>「機構」、「專案」或「標記」

      2. 如果您要為專案或機構建立代碼,請在對話方塊中輸入 PROJECT_IDORGANIZATION_ID,然後按一下「儲存」

      3. 針對「Key 1」和「Value 1」,請從清單中選擇適當的值。

    3. 選用:如要為表格新增其他標記,請按一下「新增標記」,然後按照前述步驟操作。

  5. 按一下 [儲存]

SQL

使用 ALTER TABLE SET OPTIONS 陳述式

以下範例會覆寫現有資料表的所有標記。

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在查詢編輯器中輸入以下陳述式:

    ALTER TABLE PROJECT_ID.DATASET_ID.TABLE_ID
    SET OPTIONS (
      tags = [('TAG_KEY_1', 'TAG_VALUE_1'), ('TAG_KEY_2', 'TAG_VALUE_2')];)

    請依指示取代下列項目:

    • PROJECT_ID:您的專案 ID。
    • DATASET_ID:包含資料表的資料集 ID。
    • TABLE_ID:您要標記的資料表名稱。
    • TAG_KEY_1:您要設為資料表中第一個標記的命名空間鍵名稱,例如 'my-project/env''556741164180/department'
    • TAG_VALUE_1:標記值的簡稱,例如 'prod''sales'
    • TAG_KEY_2:第二個標記的命名空間鍵名稱。
    • TAG_VALUE_2:第二個標記值的簡寫名稱。

  3. 按一下 「Run」

如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。

以下範例使用 += 運算子,將標記附加至資料表,且不會覆寫現有標記。如果現有標記的鍵相同,系統會覆寫該標記。

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在查詢編輯器中輸入以下陳述式:

    ALTER TABLE PROJECT_ID.DATASET_ID.TABLE_ID
    SET OPTIONS (
      tags += [('TAG_KEY_1', 'TAG_VALUE_1'), ('TAG_KEY_2', 'TAG_VALUE_2')];)

    請依指示取代下列項目:

    • PROJECT_ID:您的專案 ID。
    • DATASET_ID:包含資料表的資料集 ID。
    • TABLE_ID:您要標記的資料表名稱。
    • TAG_KEY_1:您要設為資料表中第一個標記的命名空間鍵名稱,例如 'my-project/env''556741164180/department'
    • TAG_VALUE_1:標記值的簡稱,例如 'prod''sales'
    • TAG_KEY_2:第二個標記的命名空間鍵名稱。
    • TAG_VALUE_2:第二個標記值的簡寫名稱。

  3. 按一下 「Run」

如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。

bq

使用加上 --add_tags 旗標的 bq update 指令

bq update \
    --add_tags=TAG \
    PROJECT_ID:DATASET_ID.TABLE_ID

更改下列內容:

  • TAG:您要附加至資料表的標記。多個標記之間請以半形逗號分隔。例如:556741164180/env:prod,myProject/department:sales。每個標記都必須包含命名空間限定鍵名稱和值簡稱
  • PROJECT_ID:包含資料表的專案 ID。
  • DATASET_ID:包含資料表的資料集 ID。
  • TABLE_ID:您要更新的資料表 ID。

gcloud

如要使用指令列將標記附加至資料表,請使用 gcloud resource-manager tags bindings create 指令建立標記繫結資源:

gcloud resource-manager tags bindings create \
    --tag-value=TAG_VALUE_NAME \
    --parent=RESOURCE_ID \
    --location=LOCATION

更改下列內容:

  • TAG_VALUE_NAME:要附加的標記值的永久 ID 或命名空間名稱,例如 tagValues/45678901231234567/my_tag_key/my_tag_value
  • RESOURCE_ID:表格的完整 ID,包括用於識別資源類型的 API 網域名稱 (//bigquery.googleapis.com/)。例如://bigquery.googleapis.com/projects/my_project/datasets/my_dataset/tables/my_table
  • LOCATION:資料表的位置

Terraform

在資料表的 resource_tags 欄位中加入標記,然後使用 google_bigquery_table 資源套用更新後的設定。詳情請參閱「建立新資料表時附加標記」一文中的 Terraform 範例。

API

使用已定義的資料表資源呼叫 tables.update 方法。在 resource_tags 欄位中加入標記。

列出附加至資料表的標記

您可以列出直接附加至資料表的標記。這個程序不會列出從父項資源繼承的標記。

主控台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在「Explorer」窗格中展開專案和資料集,然後選取資料表。

    標記會顯示在「Details」分頁中。

bq

使用 bq show 指令,然後尋找 tags 欄。如果表格中沒有代碼,系統就不會顯示 tags 欄。

bq show \
    PROJECT_ID:DATASET_ID.TABLE_ID

更改下列內容:

  • PROJECT_ID:包含資料表的專案 ID。
  • DATASET_ID:包含資料表的資料集 ID。
  • TABLE_ID:資料表的 ID。

gcloud

如要取得已連結至資源的標記繫結清單,請使用 gcloud resource-manager tags bindings list 指令

gcloud resource-manager tags bindings list \
    --parent=RESOURCE_ID \
    --location=LOCATION

更改下列內容:

  • RESOURCE_ID:表格的完整 ID,包括用於識別資源類型的 API 網域名稱 (//bigquery.googleapis.com/)。例如://bigquery.googleapis.com/projects/my_project/datasets/my_dataset/tables/my_table

  • LOCATION:資料集的位置

輸出結果會與下列內容相似:

name: tagBindings/%2F%2Fbigquery.googleapis.com%2Fprojects%2Fmy_project%2Fdatasets%2Fmy_dataset/tagValues/4567890123
parent: //bigquery.googleapis.com/projects/my_project/datasets/my_dataset
tagValue: tagValues/4567890123

Terraform

使用 terraform state show 指令列出資料表的屬性,包括 resource_tags 欄位。在執行資料表的 Terraform 設定檔的目錄中執行這項指令。

terraform state show google_bigquery_table.default

API

使用已定義的資料表資源呼叫 tables.get 方法,然後尋找 resource_tags 欄位。

觀看次數

使用 INFORMATION_SCHEMA.TABLE_OPTIONS 檢視畫面

舉例來說,下列查詢會顯示資料集中所有資料表所附加的所有標記。這項查詢會傳回資料表,其中的資料欄包括 schema_name (資料集名稱)、option_name (一律為 'tags')、object_type (一律為 ARRAY<STRUCT<STRING, STRING>>) 和 option_value,其中包含 STRUCT 物件陣列,代表與每個資料集相關聯的標記。如果是未指派標記的資料表,option_value 欄會傳回空的陣列。

SELECT * from DATASET_ID.INFORMATION_SCHEMA.TABLE_OPTIONS
WHERE option_name='tags'

請將 DATASET_ID 替換為包含資料表的資料集 ID。

從表格中分離標記

您可以刪除標記繫結,從資料表中移除標記關聯。如果要刪除標記,請先將標記從表格中卸離,再刪除標記。詳情請參閱刪除標記

主控台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在「Explorer」窗格中展開專案和資料集,然後選取資料表。

  3. 依序點選「詳細資料」分頁,然後點選 「編輯詳細資料」

  4. 在「標記」部分,找出要刪除的標記,然後按一下旁邊的「刪除項目」圖示

  5. 按一下 [儲存]

SQL

使用 ALTER TABLE SET OPTIONS 陳述式

以下範例會使用 -= 運算子,從資料表中分離標記。如要從表格中分離所有代碼,您可以指定 tags=NULLtags=[]

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在查詢編輯器中輸入以下陳述式:

    ALTER TABLE PROJECT_ID.DATASET_ID.TABLE_ID
    SET OPTIONS (
      tags -= [('TAG_KEY_1', 'TAG_VALUE_1'), ('TAG_KEY_2', 'TAG_VALUE_2')];)

    請依指示取代下列項目:

    • PROJECT_ID:您的專案 ID。
    • DATASET_ID:包含資料表的資料集 ID。
    • TABLE_ID:您要從中分離標記的資料表名稱。
    • TAG_KEY_1:您要分離的第一個標記的命名空間鍵名稱,例如 'my-project/env''556741164180/department'
    • TAG_VALUE_1:要分離的標記值的簡短名稱,例如 'prod''sales'
    • TAG_KEY_2:您要分離的第二個標記的命名空間鍵名稱。
    • TAG_VALUE_2:要分離的第二個標記值的簡短名稱。

  3. 按一下 「Run」

如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。

bq

如要從資料表中移除部分標記,請使用帶有 --remove_tags 標記的 bq update 指令

bq update \
    --remove_tags=TAG_KEYS \
    PROJECT_ID:DATASET_ID.TABLE_ID

更改下列內容:

  • TAG_KEYS:您要從資料表中分離的標記鍵,以逗號分隔。例如:556741164180/env,myProject/department。每個代碼鍵都必須有命名空間鍵名稱
  • PROJECT_ID:包含資料表的專案 ID。
  • DATASET_ID:包含資料表的資料集 ID。
  • TABLE_ID:您要更新的資料表 ID。

如要從資料表移除所有標記,請使用 bq update 指令搭配 --clear_all_tags 標記:

bq update \
    --clear_all_tags \
    PROJECT_ID:DATASET_ID.TABLE_ID

gcloud

如要使用指令列從資料表中移除標記關聯,請使用 gcloud resource-manager tags bindings delete 指令刪除標記繫結:

gcloud resource-manager tags bindings delete \
    --tag-value=TAG_VALUE_NAME \
    --parent=RESOURCE_ID \
    --location=LOCATION

更改下列內容:

  • TAG_VALUE_NAME:要刪除的標記值的永久 ID 或命名空間名稱,例如 tagValues/45678901231234567/my_tag_key/my_tag_value
  • RESOURCE_ID:表格的完整 ID,包括用於識別資源類型的 API 網域名稱 (//bigquery.googleapis.com/)。例如://bigquery.googleapis.com/projects/my_project/datasets/my_dataset/tables/my_table
  • LOCATION:資料集的位置

Terraform

從資料表的 resource_tags 欄位移除標記,然後使用 google_bigquery_table 資源套用更新後的設定。

API

使用已定義的資料表資源呼叫 tables.update 方法,然後移除 resource_tags 欄位中的標記。如要移除所有標記,請移除 resource_tags 欄位。

標記其他類似表格的資源

您也可以為 BigQuery 檢視表、具體化檢視表、複本和快照加上標記。

刪除標記

如果標記已被資料表、檢視畫面或資料集參照,就無法刪除。請先解除所有現有標記繫結資源,再刪除標記鍵或值本身。如要刪除標記鍵和標記值,請參閱刪除標記

範例

假設您是機構的管理員。您的資料分析師都是「analysts@example.com」群組的成員,該群組在專案 userData 中具有「BigQuery Data Viewer」IAM 角色。公司聘請了一位資料分析師實習生,根據公司政策,該實習生只能查看 userData 專案中的 anonymousData 資料集。您可以使用標記控管他們的存取權。

  1. 使用鍵 employee_type 和值 intern 建立標記

    建立標記鍵和值的範例。

  2. 前往 Google Cloud 控制台的「IAM」頁面。

    前往身分與存取權管理頁面

  3. 找出含有您要限制資料集存取權的實習生所在的資料列,然後點選該列中的 「Edit principal」(編輯主體)

  4. 在「角色」選單中,選取「BigQuery 資料檢視者」

  5. 按一下「新增條件」

  6. 在「Title」和「Description」欄位中,輸入描述要建立的 IAM 代碼條件值。

  7. 在「條件建構工具」分頁中,按一下「新增」

  8. 在「Condition type」選單中,依序選取「Resource」和「Tag」

  9. 在「運算子」選單中,選取「有值」

  10. 在「Value path」欄位中,輸入代碼值路徑的 ORGANIZATION/TAG_KEY/TAG_VALUE 格式。例如:example.org/employee_type/intern

    使用標記的 IAM 條件範例。

    這個 IAM 標記條件會限制實習生對含有 intern 標記的資料集存取權。

  11. 如要儲存代碼條件,請按一下「儲存」

  12. 如要儲存在「編輯權限」窗格中所做的任何變更,請按一下「儲存」

  13. 如要將 intern 標記值附加至 anonymousData 資料集,請使用指令列執行 gcloud resource-manager tags bindings create 指令。例如:

    gcloud resource-manager tags bindings create \
        --tag-value=tagValues/4567890123 \
        --parent=//bigquery.googleapis.com/projects/userData/datasets/anonymousData \
        --location=US
    

後續步驟