建立分區資料表
本頁面說明如何在 BigQuery 中建立分區資料表。如需分區資料表的總覽,請參閱分區資料表簡介一文。
事前準備
授予身分與存取權管理 (IAM) 角色,讓使用者取得執行本文各項工作所需的權限。
所需權限
必要的角色
如要取得建立資料表所需的權限,請要求管理員授予您下列 IAM 角色:
- 如果您要透過載入資料或將查詢結果儲存至資料表來建立資料表,請在專案中指派 BigQuery Job User (
roles/bigquery.jobUser)。 - 資料集的「BigQuery 資料編輯者」 (
roles/bigquery.dataEditor),您要在該資料集建立資料表。
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這些預先定義的角色具備建立表格所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
如要建立資料表,您必須具備下列權限:
-
bigquery.tables.create在要建立資料表的資料集上。 -
bigquery.tables.getData如果您要將查詢結果儲存為資料表,則必須擁有查詢參照的所有資料表和檢視區塊的存取權。 -
bigquery.jobs.create專案,如果您是透過載入資料或將查詢結果儲存至資料表來建立資料表。 -
bigquery.tables.updateData資料表,如果您要使用查詢結果附加或覆寫資料表,就需要這個權限。
建立空白分區資料表
在 BigQuery 中建立分區資料表的步驟,與建立標準資料表類似,但您需要指定分區選項,以及任何其他資料表選項。
建立時間單位資料欄分區資料表
如何使用結構定義建立空白時間單位資料欄分區資料表:
控制台
前往 Google Cloud 控制台的「BigQuery」頁面。
- 點選左側窗格中的 「Explorer」。
- 在「Explorer」窗格中展開專案,按一下「Datasets」(資料集),然後選取資料集。
- 在「資料集資訊」部分,按一下 「建立資料表」。
- 在「建立資料表」窗格中,指定下列詳細資料:
- 在「來源」部分,從「建立資料表來源」清單中選取「空白資料表」。
- 在「目的地」部分,指定下列詳細資料:
- 在「Dataset」(資料集) 部分,選取要建立資料表的資料集。
- 在「Table」(資料表) 欄位中,輸入要建立的資料表名稱。
- 確認「資料表類型」欄位已設為「原生資料表」。
- 在「Schema」(結構定義) 區段中,輸入結構定義。結構定義必須包含
DATE、TIMESTAMP或DATETIME資料欄,做為分區資料欄。詳情請參閱指定結構定義。 你可以使用下列任一方法手動輸入結構定義資訊:- 選項 1:按一下「以文字形式編輯」,然後以 JSON 陣列的形式貼上結構定義。如果您使用 JSON 陣列,可透過與建立 JSON 結構定義檔一樣的程序產生結構定義。您可以輸入下列指令,查看現有資料表的 JSON 格式結構定義:
bq show --format=prettyjson dataset.table
- 選項 2:按一下 「新增欄位」,然後輸入表格結構定義。指定每個欄位的「Name」(名稱)、「Type」(類型) 和「Mode」(模式)。
- 選項 1:按一下「以文字形式編輯」,然後以 JSON 陣列的形式貼上結構定義。如果您使用 JSON 陣列,可透過與建立 JSON 結構定義檔一樣的程序產生結構定義。您可以輸入下列指令,查看現有資料表的 JSON 格式結構定義:
- 在「Partition and cluster settings」(分區與叢集設定) 區段的「Partitioning」(分區) 清單中,選取「Partition by field」(依欄位分區),然後選擇分區資料欄。只有在結構定義包含
DATE、TIMESTAMP或DATETIME資料欄時,才能使用這個選項。 - 選用:如要要求所有查詢都必須使用分區篩選器,請選取「Require partition filter」(需要分區篩選器) 核取方塊。分區篩選器可降低費用並提升效能。詳情請參閱「設定分區篩選器規定」。
- 選取「Partitioning type」。
- 選用步驟:如要使用客戶自行管理的加密金鑰,請在「Advanced options」(進階選項) 部分選取「Use a customer-managed encryption key (CMEK)」(使用客戶自行管理的加密金鑰 (CMEK)) 選項。根據預設,BigQuery 會使用 Google-owned and Google-managed encryption key加密靜態儲存的客戶內容。
- 點選「建立資料表」。
SQL
如要建立時間單位資料欄分區資料表,請使用 CREATE TABLE DDL 陳述式,並搭配 PARTITION BY 子句。
下列範例會根據 transaction_date 資料欄,建立每日分區的資料表:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE) PARTITION BY transaction_date OPTIONS ( partition_expiration_days = 3, require_partition_filter = TRUE);
使用
OPTIONS子句設定資料表選項,例如分區到期時間和分區篩選器要求。按一下「執行」。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
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);
您也可以指定 TIMESTAMP 或 DATETIME 資料欄做為分區資料欄。在這種情況下,請在 PARTITION BY 子句中加入 TIMESTAMP_TRUNC 或 DATETIME_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);