建立分區資料表

本頁面說明如何在 BigQuery 中建立分區資料表。如需分區資料表的總覽,請參閱分區資料表簡介一文。

事前準備

授予身分與存取權管理 (IAM) 角色,讓使用者取得執行本文各項工作所需的權限。

所需權限

如要建立資料表,您必須具備下列 IAM 權限:

  • bigquery.tables.create
  • bigquery.tables.updateData
  • bigquery.jobs.create

此外,您可能需要 bigquery.tables.getData 權限,才能存取寫入資料表的資料。

下列每個預先定義的 IAM 角色都包含建立資料表所需的權限:

  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.admin (包括 bigquery.jobs.create 權限)
  • roles/bigquery.user (包括 bigquery.jobs.create 權限)
  • roles/bigquery.jobUser (包括 bigquery.jobs.create 權限)

此外,如果您具備 bigquery.datasets.create 權限,就能在自己建立的資料集中建立及更新資料表。

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

建立空白分區資料表

在 BigQuery 中建立分區資料表的步驟與建立標準資料表類似,但您需要指定分區選項,以及任何其他資料表選項。

建立時間單位資料欄分區資料表

如何使用結構定義建立空白時間單位資料欄分區資料表:

主控台

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

    前往 BigQuery

  2. 在「Explorer」窗格中展開專案,然後選取資料集。
  3. 在「資料集資訊」部分中,按一下 「建立資料表」
  4. 在「建立資料表」面板中,指定下列詳細資料:
    1. 在「來源」部分,從「使用下列資料建立資料表」清單中選取「空白資料表」
    2. 在「目的地」部分,指定下列詳細資料:
      1. 在「Dataset」(資料集) 部分,選取要建立資料表的資料集。
      2. 在「Table」(資料表) 欄位中,輸入要建立的資料表名稱。
      3. 確認「Table type」(資料表類型) 欄位已設為「Native table」(原生資料表)。
    3. 在「Schema」(結構定義) 區段中,輸入結構定義。結構定義必須包含 DATETIMESTAMPDATETIME 資料欄,做為分區資料欄。詳情請參閱指定結構定義。 你可以使用下列其中一種方法,手動輸入結構定義資訊:
      • 選項 1:按一下「以文字形式編輯」,然後以 JSON 陣列的形式貼上結構定義。如果您使用 JSON 陣列,可透過與建立 JSON 結構定義檔一樣的程序產生結構定義。您可以輸入下列指令,查看現有資料表的 JSON 格式結構定義:
            bq show --format=prettyjson dataset.table
            
      • 選項 2:按一下 「新增欄位」,然後輸入表格結構定義。指定每個欄位的「Name」(名稱)、「Type」(類型) 和「Mode」(模式)
    4. 在「Partition and cluster settings」(分區與叢集設定) 區段的「Partitioning」(分區) 清單中,選取「Partition by field」(依欄位分區),然後選擇分區資料欄。只有在結構定義包含 DATETIMESTAMPDATETIME 資料欄時,才能使用這個選項。
    5. 選用:如要規定所有查詢都必須使用分區篩選器,請選取「需要分區篩選器」核取方塊。分區篩選器可以降低費用並提升效能。詳情請參閱「設定分區篩選器規定」。
    6. 選取「分區類型」,選擇每日、每小時、每月或每年分區。
    7. 選用步驟:如要使用客戶管理的加密金鑰,請在「Advanced options」(進階選項) 部分選取「Use a customer-managed encryption key (CMEK)」(使用客戶管理的加密金鑰 (CMEK)) 選項。根據預設,BigQuery 會使用 Google-owned and Google-managed encryption key加密靜態儲存的客戶內容
    8. 點選「建立資料表」。

SQL

如要建立時間單位資料欄分區資料表,請使用 CREATE TABLE DDL 陳述式,並搭配 PARTITION BY 子句

下列範例會根據 transaction_date 資料欄,建立每日分區的資料表:

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

    前往 BigQuery

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

    CREATE TABLE
      mydataset.newtable (transaction_id INT64, transaction_date DATE)
    PARTITION BY
      transaction_date
      OPTIONS (
        partition_expiration_days = 3,
        require_partition_filter = TRUE);

    使用 OPTIONS 子句設定資料表選項,例如分區到期時間分區篩選器需求

  3. 按一下「執行」

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

DATE 資料欄的預設分區類型為每日分區。如要指定其他分割類型,請在 PARTITION BY 子句中加入 DATE_TRUNC 函式。舉例來說,下列查詢會建立每月分區的資料表:

CREATE TABLE
  mydataset.newtable (transaction_id INT64, transaction_date DATE)
PARTITION BY
  DATE_TRUNC(transaction_date, MONTH)
  OPTIONS (
    partition_expiration_days = 3,
    require_partition_filter = TRUE);

您也可以指定 TIMESTAMPDATETIME 資料欄做為分區資料欄。在這種情況下,請在 PARTITION BY 子句中加入 TIMESTAMP_TRUNCDATETIME_TRUNC 函式,指定分割區類型。舉例來說,下列陳述式會根據 TIMESTAMP 資料欄建立每日分區的資料表:

CREATE TABLE
  mydataset.newtable (transaction_id INT64, transaction_ts TIMESTAMP)
PARTITION BY
  TIMESTAMP_TRUNC(transaction_ts, DAY)
  OPTIONS (
    partition_expiration_days = 3,
    require_partition_filter = TRUE);