管理叢集資料表

本文說明如何取得 BigQuery 中叢集資料表的相關資訊,以及如何控管叢集資料表的存取權。

如要瞭解詳情,請參考下列資源:

事前準備

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

  • 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 角色 (依允許的資源範圍排序,從最大到最小):

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

透過 IAM 保護的任何資源,存取權都是累加的。舉例來說,如果實體沒有專案等高層級的存取權,您可以授予實體資料集層級的存取權,這樣實體就能存取資料集中的資料表和檢視區塊。同樣地,如果實體沒有高層級或資料集層級的存取權,您可以授予實體資料表或檢視表層級的存取權。

Trusted Cloud by S3NS資源階層中的較高層級 (例如專案、資料夾或機構層級) 授予 IAM 角色,可讓實體存取更多資源。舉例來說,在專案層級將特定角色授予實體,可讓該實體擁有適用於專案中所有資料集的權限。

在資料集層級授予角色,即可讓實體對特定資料集裡的資料表和檢視表執行指定作業,即使實體不具備更高層級的存取權也一樣。如要瞭解如何設定資料集層級的存取權控管設定,請參閱控管資料集存取權一文。

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

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

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

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

取得叢集資料表的相關資訊

選取下列選項之一:

主控台

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

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

  3. 按一下「詳細資料」

    畫面會顯示資料表的詳細資料,包括叢集資料欄。

    資料表詳細資料。

SQL

對於叢集資料表,您可以在 INFORMATION_SCHEMA.COLUMNS 檢視表中查詢 CLUSTERING_ORDINAL_POSITION 資料欄,找出資料表叢集資料欄中資料欄的 1 索引偏移:

  1. 前往 Trusted 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 中的 TABLESTABLE_OPTIONSCOLUMNSCOLUMN_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:資料表名稱

範例:

輸入下列指令,顯示 mydatasetmyclusteredtable 的所有相關資訊。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.updatetables.patch API 方法來修改叢集規格

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

    UPDATE DATASET.ORIGINAL_TABLE SET CLUSTER_COLUMN=CLUSTER_COLUMN WHERE true

後續步驟