管理分群資料表

在 BigQuery 建立分群資料表後,您可以控管存取權限、查看屬性,並隨著查詢模式變化調整分群資料欄。本文說明如何控管分群資料表的存取權、取得相關資訊、列出資料集中的分群資料表,以及修改分群規格。

如要瞭解分群資料表,請參閱「分群資料表簡介」。如要建立分群資料表,請參閱「建立分群資料表」。

事前準備

如要取得資料表相關資訊,您必須具備 bigquery.tables.get 權限。下列預先定義的 IAM 角色包含 bigquery.tables.get 權限:

  • roles/bigquery.metadataViewer
  • roles/bigquery.dataViewer
  • roles/bigquery.dataOwner
  • roles/bigquery.dataEditor
  • roles/bigquery.admin

此外,如果使用者具備 bigquery.datasets.create 權限,則在建立資料集時,會獲得該資料集的 bigquery.dataOwner 存取權。bigquery.dataOwner 存取權可讓使用者取得資料集裡的資料表相關資訊。

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

控管分群資料表的存取權

如要設定資料表和檢視表的存取權,您可以將 IAM 角色授予下列層級的實體,這些層級依允許的資源範圍 (由大到小) 排序:

  • Google Cloud 資源階層中的高層級,例如專案、資料夾或組織層級
  • 資料集層級
  • 資料表或檢視表層級

您也可以使用下列方法,限制資料表內的資料存取權:

受 IAM 保護的資源存取權屬於外加規則。舉例來說,如果實體沒有專案等高層級的存取權,您可以在資料集層級授予實體存取權,這樣實體就能存取資料集中的資料表和檢視表。同樣地,如果實體沒有高層級或資料集層級的存取權,您可以在資料表或檢視表層級授予實體存取權。

在 Google Cloud資源階層中較高層級 (例如專案、資料夾或組織層級) 授予 IAM 角色,可讓實體存取廣泛的資源。舉例來說,在專案層級將角色授予實體,該實體就會獲得適用於整個專案中所有資料集的權限。

在資料集層級授予角色,可指定實體在該特定資料集的資料表和檢視表上可執行的作業,即使實體沒有較高層級的存取權也一樣。如要瞭解如何設定資料集層級存取控管,請參閱「控管資料集的存取權」。

在資料表或檢視表層級授予角色,可指定實體在特定資料表和檢視表上可執行的作業,即使實體沒有較高層級的存取權也一樣。如要瞭解如何設定資料表層級存取控管機制,請參閱「控管資料表和檢視表的存取權」。

您也可以建立 IAM 自訂角色。建立自訂角色之後,您就能依據要讓實體執行的特定作業授予權限。

您無法對受 IAM 保護的任何資源設定「拒絕」權限。

如要進一步瞭解角色和權限,請參閱 IAM 說明文件中的「瞭解角色」和 BigQuery「IAM 角色和權限」。

取得分群資料表的相關資訊

選取下列選項之一:

控制台

  1. 前往 Google Cloud 控制台的「Resources」(資源) 窗格。

  2. 按一下資料集名稱展開資料集,然後點選要查看的資料表名稱。

  3. 按一下「詳細資料」。

    系統會顯示資料表的詳細資料,包括分群欄。

    資料表詳細資料。

SQL

如果是分群資料表,您可以查詢 INFORMATION_SCHEMA.COLUMNS 檢視表中的 CLUSTERING_ORDINAL_POSITION 資料欄,找出資料表分群資料欄中資料欄的 1 索引偏移:

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

    前往「BigQuery」

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

    CREATE TABLE mydataset.data (column1 INT64, column2 INT64)
    CLUSTER BY column1, column2;
    SELECT
      column_name, clustering_ordinal_position
    FROM
      mydataset.INFORMATION_SCHEMA.COLUMNS;

  3. 按一下「 執行」。

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

column1 的叢集序數位置為 1,column2 則為 2。如要查看更多資料表中繼資料,請前往 INFORMATION_SCHEMA 的 TABLES、TABLE_OPTIONS、COLUMNS 和 COLUMN_FIELD_PATH 檢視畫面。

bq

發出 bq show 指令以顯示所有資料表資訊。使用 --schema 旗標可以只顯示資料表結構定義資訊。--format 旗標可用來控制輸出內容。

如果您要取得非預設專案中資料表的相關資訊,請使用下列格式將專案 ID 新增至資料集:project_id:dataset。

bq show \
    --schema \
    --format=prettyjson \
    PROJECT_ID:DATASET.TABLE

更改下列內容:

  • PROJECT_ID:專案 ID
  • DATASET:資料集名稱
  • TABLE:資料表名稱。

範例:

輸入下列指令,顯示 mydataset 中 myclusteredtable 的所有相關資訊。mydataset 在您的預設專案中。

bq show --format=prettyjson mydataset.myclusteredtable

輸出應如下所示:

{
  "clustering": {
    "fields": [
      "customer_id"
    ]
  },
...
}

API

呼叫 bigquery.tables.get 方法,並提供所有相關參數。

列出資料集內的分群資料表

列出分群資料表所需的權限和步驟,與標準資料表相同。詳情請參閱「列出資料集中的資料表」。

修改叢集規格

您可以變更或移除資料表的分群規格,或變更分群資料表中的分群資料欄組合。如果資料表使用連續串流資料即時插入,則無法輕易透過其他方法替換,因此這種更新分群欄組合的方法非常實用。

請按照下列步驟,將新的分群規格套用至未分區或分區資料表。

  1. 在 bq 工具中,更新資料表的叢集規格,以符合新的叢集:

     bq update --clustering_fields=CLUSTER_COLUMN DATASET.ORIGINAL_TABLE 

    更改下列內容:

    • CLUSTER_COLUMN:要分群的資料欄,例如 mycolumn
    • DATASET:資料表所在資料集的名稱,例如 mydataset
    • ORIGINAL_TABLE:原始資料表的名稱,例如 mytable

    您也可以呼叫 tables.update 或 tables.patch API 方法,修改分群規格。

  2. 如要根據新的分群規格將所有資料列分群,請執行下列 UPDATE 陳述式:

    UPDATE DATASET.ORIGINAL_TABLE SET CLUSTER_COLUMN=CLUSTER_COLUMN WHERE true

後續步驟