修改資料表結構定義
本文說明如何修改現有 BigQuery 資料表的結構定義。
您可以使用 SQL 資料定義語言 (DDL) 陳述式,進行本文所述的大部分結構定義修改。這些對帳單不會產生費用。
如要以本頁所述的所有方式修改資料表結構,請將資料表資料匯出至 Cloud Storage,然後將資料載入至結構定義經過修改的新資料表。BigQuery 載入和匯出工作免費,但您必須支付在 Cloud Storage 中儲存匯出資料的費用。以下各節說明如何以其他方式執行各種結構定義修改作業。
新增資料欄
您可以透過下列任一方式,將資料欄新增至現有資料表的結構定義:
- 新增空白資料欄。
- 使用載入或查詢工作覆寫資料表。
- 使用載入或查詢工作將資料附加至資料表。
您新增的任何資料欄都必須遵守 BigQuery 的資料欄名稱規則。如要進一步瞭解如何建立結構定義元件,請參閱指定結構定義。
新增空白資料欄
新增資料欄至現有的資料表結構定義時,資料欄必須為 NULLABLE
或 REPEATED
。您無法將 REQUIRED
資料欄新增至現有的資料表結構定義。在 API 或 bq 指令列工具中,將 REQUIRED
資料欄新增至現有資料表結構定義會導致錯誤。不過,您可以建立巢狀 REQUIRED
資料欄,做為新 RECORD
欄位的一部分。只有在載入資料時建立資料表,或者使用結構定義建立空白資料表時,您才能新增 REQUIRED
資料欄。
如何將空白資料欄新增至資料表的結構定義:
主控台
前往 Google Cloud 控制台的「BigQuery」頁面。
在「Explorer」面板中,展開專案和資料集,然後選取資料表。
在詳細資料面板中,按一下「結構定義」分頁標籤。
按一下「編輯結構定義」。你可能需要捲動畫面才能看到這個按鈕。
在「Current schema」(目前結構定義) 頁面的「New fields」(新欄位) 下方,按一下「Add field」(新增欄位)。
- 在「Name」(名稱) 部分,輸入資料欄名稱。
- 針對「Type」(類型),請選擇資料類型。
- 針對「Mode」(模式),請選擇
NULLABLE
或REPEATED
。
資料欄新增完畢後,按一下 [Save] (儲存)。
SQL
使用 ALTER TABLE ADD COLUMN
DDL 陳述式:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
ALTER TABLE mydataset.mytable ADD COLUMN new_column STRING;
按一下「執行」
。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
bq
發出 bq update
指令並提供 JSON 結構定義檔。如果您要更新的資料表位於非預設專案中,請依照下列格式將該專案的 ID 加到資料集名稱中:PROJECT_ID:DATASET
。
bq update PROJECT_ID:DATASET.TABLE SCHEMA
更改下列內容:
PROJECT_ID
:您的專案 ID。DATASET
:含有您要更新之資料表的資料集名稱。TABLE
:您要更新的資料表名稱。SCHEMA
:您本機上的 JSON 結構定義檔路徑。
指定內嵌結構定義時,無法指定資料欄說明、模式和 RECORD
(STRUCT
) 類型。所有資料欄模式都會預設為 NULLABLE
。因此如要新增巢狀資料欄至 RECORD
,就必須提供 JSON 結構定義檔。
如果您嘗試使用內嵌結構定義新增資料欄,則必須提供包括新資料欄在內的整個結構定義。由於您無法使用內嵌結構定義指定資料欄模式,因此更新作業會將任何現有的 REPEATED
資料欄變更為 NULLABLE
,這會產生下列錯誤:BigQuery error in update
operation: Provided Schema does not match Table
PROJECT_ID:dataset.table. Field field has changed mode
from REPEATED to NULLABLE.
使用 bq 指令列工具將資料欄新增至現有資料表的建議方法是提供 JSON 結構定義檔。
如何使用 JSON 結構定義檔案將空白資料欄新增至資料表的結構定義:
首先,請發出
bq show
指令並加上--schema
旗標,並將現有的資料表結構定義寫入檔案。如果您要更新的資料表位於非預設專案中,請依照下列格式將該專案的 ID 加到資料集名稱中:PROJECT_ID:DATASET
。bq show \ --schema \ --format=prettyjson \ PROJECT_ID:DATASET.TABLE > SCHEMA
更改下列內容:
PROJECT_ID
:您的專案 ID。DATASET
:含有您要更新之資料表的資料集名稱。TABLE
:您要更新的資料表名稱。SCHEMA
:寫入本機的結構定義檔。
舉例來說,如要將
mydataset.mytable
的結構定義寫入檔案,請輸入下列指令。mydataset.mytable
位於您的預設專案中。bq show \ --schema \ --format=prettyjson \ mydataset.mytable > /tmp/myschema.json
在文字編輯器中開啟結構定義檔。結構定義應如下所示:
[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" } ]
在結構定義的結尾處新增資料欄。如果您嘗試在陣列的其他地方新增資料欄,系統將會傳回下列錯誤訊息:
BigQuery error in update operation: Precondition Failed
。您可以使用 JSON 檔案為新資料欄指定說明、
NULLABLE
或REPEATED
模式以及RECORD
類型。例如,如果使用上一個步驟中的結構定義,新的 JSON 陣列會如下所示。此範例中會新增名為column4
的NULLABLE
資料欄,且column4
包含說明。[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" }, { "description": "my new column", "mode": "NULLABLE", "name": "column4", "type": "STRING" } ]
如要進一步瞭解如何使用 JSON 結構定義檔,請參閱指定 JSON 結構定義檔一節。
更新結構定義檔後,請發出下列指令來更新資料表的結構定義。如果您要更新的資料表位於預設專案以外的專案中,請依照下列格式將該專案的 ID 加到資料集名稱中:
PROJECT_ID:DATASET
。bq update PROJECT_ID:DATASET.TABLE SCHEMA
更改下列內容:
PROJECT_ID
:您的專案 ID。DATASET
:含有您要更新之資料表的資料集名稱。TABLE
:您要更新的資料表名稱。SCHEMA
:寫入本機的結構定義檔。
例如,輸入以下指令來更新預設專案中
mydataset.mytable
的結構定義。您本機機器上的 JSON 結構定義檔路徑為/tmp/myschema.json
。bq update mydataset.mytable /tmp/myschema.json
API
呼叫 tables.patch
方法,並使用 schema
屬性將空白資料欄新增至結構定義。由於 tables.update
方法會取代整個資料表資源,因此建議使用 tables.patch
方法。
Go
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Go 設定說明進行操作。詳情請參閱 BigQuery Go API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Node.js 設定說明進行操作。詳情請參閱 BigQuery Node.js API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Python 設定說明進行操作。詳情請參閱 BigQuery Python API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
將新的 SchemaField 物件附加至 Table.schema 的副本,然後用已更新的結構定義取代 Table.schema 屬性的值。在 RECORD
欄中新增巢狀資料欄
除了新增資料欄至資料表的結構定義外,您也可以將巢狀資料欄新增至 RECORD
資料欄。新增巢狀資料欄的程序與新增資料欄的程序類似。
主控台
Google Cloud 主控台不支援在現有的 RECORD
資料欄新增巢狀欄位。
SQL
系統不支援使用 SQL DDL 陳述式,在現有的 RECORD
資料欄新增巢狀欄位。
bq
發出 bq update
指令並提供 JSON 結構定義檔,該檔案會將巢狀欄位新增至現有 RECORD
資料欄的結構定義。如果您要更新的資料表位於非預設專案中,請依照下列格式將該專案的 ID 加到資料集名稱中:PROJECT_ID:DATASET
。
bq update PROJECT_ID:DATASET.TABLE SCHEMA
更改下列內容:
PROJECT_ID
:您的專案 ID。DATASET
:含有您要更新之資料表的資料集名稱。TABLE
:您要更新的資料表名稱。SCHEMA
:您本機上的 JSON 結構定義檔路徑。
指定內嵌結構定義時,無法指定資料欄說明、模式和 RECORD
(STRUCT
) 類型。所有資料欄模式都會預設為 NULLABLE
。因此如要新增巢狀資料欄至 RECORD
,就必須提供 JSON 結構定義檔。
若要使用 JSON 結構檔案將巢狀欄位新增至 RECORD
,請進行以下操作:
首先,請發出
bq show
指令並加上--schema
旗標,並將現有的資料表結構定義寫入檔案。如果您要更新的資料表位於非預設專案中,請依照下列格式將該專案的 ID 加到資料集名稱中:PROJECT_ID:DATASET.TABLE
。bq show \ --schema \ --format=prettyjson \ PROJECT_ID:DATASET.TABLE > SCHEMA
更改下列內容:
PROJECT_ID
:您的專案 ID。DATASET
:含有您要更新之資料表的資料集名稱。TABLE
:您要更新的資料表名稱。SCHEMA
:寫入本機的結構定義檔。
舉例來說,如要將
mydataset.mytable
的結構定義寫入檔案,請輸入下列指令。mydataset.mytable
位於您的預設專案中。bq show \ --schema \ --format=prettyjson \ mydataset.mytable > /tmp/myschema.json
在文字編輯器中開啟結構定義檔。結構定義應如下所示。在此範例中,
column3
是巢狀的重複資料欄。巢狀資料欄為nested1
和nested2
。fields
陣列列出了以巢狀形式嵌套在column3
中的欄位。[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "fields": [ { "mode": "NULLABLE", "name": "nested1", "type": "STRING" }, { "mode": "NULLABLE", "name": "nested2", "type": "STRING" } ], "mode": "REPEATED", "name": "column3", "type": "RECORD" } ]
在
fields
陣列的結尾處新增巢狀資料欄。在此範例中,nested3
是一個新的巢狀資料欄。[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "fields": [ { "mode": "NULLABLE", "name": "nested1", "type": "STRING" }, { "mode": "NULLABLE", "name": "nested2", "type": "STRING" }, { "mode": "NULLABLE", "name": "nested3", "type": "STRING" } ], "mode": "REPEATED", "name": "column3", "type": "RECORD" } ]
如要進一步瞭解如何使用 JSON 結構定義檔,請參閱指定 JSON 結構定義檔一節。
更新結構定義檔後,請發出下列指令來更新資料表的結構定義。如果您要更新的資料表位於預設專案以外的專案中,請依照下列格式將該專案的 ID 加到資料集名稱中:
PROJECT_ID:DATASET
。bq update PROJECT_ID:DATASET.TABLE SCHEMA
更改下列內容:
PROJECT_ID
:您的專案 ID。DATASET
:含有您要更新之資料表的資料集名稱。TABLE
:您要更新的資料表名稱。SCHEMA
:您本機上的 JSON 結構定義檔路徑。
例如,輸入以下指令來更新預設專案中
mydataset.mytable
的結構定義。您本機機器上的 JSON 結構定義檔路徑為/tmp/myschema.json
。bq update mydataset.mytable /tmp/myschema.json
API
呼叫 tables.patch
方法,並使用 schema
屬性將巢狀資料欄新增至結構定義。由於 tables.update
方法會取代整個資料表資源,因此建議使用 tables.patch
方法。
在覆寫或附加資料時新增資料欄
將資料載入現有資料表並選擇覆寫現有資料表時,可以新增資料欄至現有資料表。覆寫現有的資料表時,系統會使用所載入資料的結構定義來覆寫現有資料表的結構定義。如要瞭解如何使用載入工作覆寫資料表,請參閱資料格式的說明文件:
在載入附加工作中新增資料欄
您可以在載入工作期間將資料附加至資料表時一併新增資料欄。新結構定義的決定方式如下:
- 自動偵測 (適用於 CSV 和 JSON 檔案)
- 可在 JSON 結構定義檔中指定 (適用於 CSV 和 JSON 檔)
- Avro、ORC、Parquet 和 Datastore 匯出檔案的自述式來源資料
若您在 JSON 檔中指定結構,則必須在其中定義新的資料欄。如果缺少新資料欄的定義,則嘗試附加資料時,系統將會傳回錯誤訊息。
當您在附加作業期間新增資料欄時,系統將會針對現有資料列將新資料欄中的值設為 NULL
。
如要在載入工作期間,在將資料附加到資料表時一併新增資料欄,請使用下列任一選項:
bq
請使用 bq load
指令載入資料並指定 --noreplace
旗標,以指出您要將資料附加至現有的資料表。
如果您要附加的資料是 CSV 格式,或是以換行符號分隔的 JSON 格式,請指定 --autodetect
旗標以使用結構定義自動偵測功能,或在 JSON 結構定義檔中提供結構定義。系統可從 Avro 或 Datastore 匯出檔自動推斷新增的資料欄。
將 --schema_update_option
旗標設為 ALLOW_FIELD_ADDITION
,以指出要附加的資料中包含新的資料欄。
如果您要附加的資料表位於非預設專案中的資料集裡,請依照下列格式將該專案的 ID 加到資料集名稱中:PROJECT_ID:DATASET
。
(選用) 提供 --location
旗標,並將值設為您的位置。
輸入 load
指令,如下所示:
bq --location=LOCATION load \ --noreplace \ --autodetect \ --schema_update_option=ALLOW_FIELD_ADDITION \ --source_format=FORMAT \ PROJECT_ID:DATASET.TABLE \ PATH_TO_SOURCE \ SCHEMA
更改下列內容:
LOCATION
:您位置的名稱。--location
是選用旗標。舉例來說,如果您在東京地區使用 BigQuery,就可將該旗標的值設為asia-northeast1
。您可以使用 .bigqueryrc 檔來設定位置的預設值。FORMAT
:結構定義的格式。NEWLINE_DELIMITED_JSON
、CSV
、AVRO
、PARQUET
、ORC
或DATASTORE_BACKUP
。PROJECT_ID
:您的專案 ID。DATASET
:包含資料表的資料集名稱。TABLE
:您要附加的資料表名稱。PATH_TO_SOURCE
:完整的 Cloud Storage URI、以逗號分隔的 URI 清單,或您本機上的資料檔案路徑。SCHEMA
:本機 JSON 結構定義檔的路徑。不指定--autodetect
時,只有 CSV 和 JSON 檔案需要結構定義檔。系統會從來源資料推斷 Avro 和 Datastore 的結構定義。
範例:
輸入下列指令,使用載入工作將本機 Avro 資料檔案 (/tmp/mydata.avro
) 附加至 mydataset.mytable
。由於結構定義可從 Avro 資料中自動推斷出來,因此您不需要使用 --autodetect
旗標。mydataset
位於您的預設專案中。
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_ADDITION \
--source_format=AVRO \
mydataset.mytable \
/tmp/mydata.avro
輸入下列指令,使用載入工作將 Cloud Storage 中採用換行符號分隔格式的 JSON 資料檔案附加至 mydataset.mytable
。--autodetect
旗標可用於偵測新資料欄。mydataset
位於您的預設專案中。
bq load \
--noreplace \
--autodetect \
--schema_update_option=ALLOW_FIELD_ADDITION \
--source_format=NEWLINE_DELIMITED_JSON \
mydataset.mytable \
gs://mybucket/mydata.json
輸入下列指令,使用載入工作將 Cloud Storage 中採用換行符號分隔格式的 JSON 資料檔案附加至 mydataset.mytable
。包含新資料欄的結構定義是在本機 JSON 結構定義檔 /tmp/myschema.json
中指定。mydataset
在 myotherproject
中,而不在您的預設專案中。
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_ADDITION \
--source_format=NEWLINE_DELIMITED_JSON \
myotherproject:mydataset.mytable \
gs://mybucket/mydata.json \
/tmp/myschema.json
API
呼叫 jobs.insert
方法。設定 load
工作和下列屬性:
- 使用
sourceUris
屬性參照 Cloud Storage 中的資料。 - 設定
sourceFormat
屬性來指定資料格式。 - 在
schema
屬性中指定結構定義。 - 使用
schemaUpdateOptions
屬性指定結構定義更新選項。 - 使用
writeDisposition
屬性將目的地資料表的寫入處理方式設為WRITE_APPEND
。
Go
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Go 設定說明進行操作。詳情請參閱 BigQuery Go API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Node.js 設定說明進行操作。詳情請參閱 BigQuery Node.js API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Python 設定說明進行操作。詳情請參閱 BigQuery Python API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
在查詢附加工作中新增資料欄
將查詢結果附加至資料表時,可以新增資料欄至資料表。
在查詢工作中使用附加作業新增資料欄時,系統會使用查詢結果的結構定義來更新目的地資料表的結構定義。請注意,您無法在一個位置查詢資料表後,將結果寫入不同位置的資料表。
如要在查詢工作期間,於將資料附加至資料表時一併新增資料欄,請選取下列其中一個選項:
bq
使用 bq query
指令查詢資料,並指定 --destination_table
旗標來指出您要附加的資料表。
如要指定將查詢結果附加至現有目的地資料表,請指定 --append_table
旗標。
將 --schema_update_option
旗標設定為 ALLOW_FIELD_ADDITION
,以指出要附加的查詢結果中包含新的資料欄。
指定 use_legacy_sql=false
旗標,以在查詢中使用 GoogleSQL 語法。
如果您要附加的資料表位於非預設專案中的資料集裡,請依照下列格式將該專案的 ID 加到資料集名稱中:PROJECT_ID:DATASET
。請注意,您要查詢的資料表和目的地資料表必須位於同一位置。
(選用) 提供 --location
旗標,並將值設為您的位置。
bq --location=LOCATION query \ --destination_table PROJECT_ID:DATASET.TABLE \ --append_table \ --schema_update_option=ALLOW_FIELD_ADDITION \ --use_legacy_sql=false \ 'QUERY'
更改下列內容:
LOCATION
:您位置的名稱。--location
是選用旗標。舉例來說,如果您在東京地區使用 BigQuery,就可將該旗標的值設為asia-northeast1
。您可以使用 .bigqueryrc 檔來設定位置的預設值。請注意,您無法將查詢結果附加至不同位置的資料表。PROJECT_ID
:您的專案 ID。dataset
:含有您要附加之資料表的資料集名稱。TABLE
:您要附加的資料表名稱。QUERY
:採用 GoogleSQL 語法的查詢。
範例:
輸入下列指令,以查詢預設專案中的 mydataset.mytable
,並將查詢結果附加至 mydataset.mytable2
(也在預設專案中)。
bq query \
--destination_table mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_ADDITION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
輸入下列指令,以查詢預設專案中的 mydataset.mytable
,並將查詢結果附加至位於 myotherproject
中的 mydataset.mytable2
。
bq query \
--destination_table myotherproject:mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_ADDITION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
API
呼叫 jobs.insert
方法。設定 query
工作和下列屬性:
- 使用
destinationTable
屬性指定目的地資料表。 - 使用
writeDisposition
屬性將目的地資料表的寫入處理方式設為WRITE_APPEND
。 - 使用
schemaUpdateOptions
屬性指定結構定義更新選項。 - 使用
query
屬性指定 GoogleSQL 查詢。
Go
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Go 設定說明進行操作。詳情請參閱 BigQuery Go API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Node.js 設定說明進行操作。詳情請參閱 BigQuery Node.js API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Python 設定說明進行操作。詳情請參閱 BigQuery Python API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
變更資料欄名稱
如要重新命名資料表中的資料欄,請使用 ALTER TABLE RENAME COLUMN
DDL 陳述式。以下範例會將 mytable
上的資料欄 old_name
重新命名為 new_name
:
ALTER TABLE mydataset.mytable RENAME COLUMN old_name TO new_name;
如要進一步瞭解 ALTER TABLE RENAME COLUMN
陳述式,請參閱 DDL 詳細資料。
變更資料欄的資料類型
Google Cloud 主控台、bq 指令列工具或 BigQuery API 均不支援變更資料欄的資料類型。如果您嘗試套用結構定義,藉此為資料欄指定新資料類型來更新資料表,系統會傳回錯誤訊息。
使用 DDL 陳述式變更資料欄的資料類型
您可以使用 GoogleSQL 變更資料欄的資料類型。如需更多資訊和支援的資料類型轉換完整清單,請參閱 ALTER COLUMN SET DATA TYPE
DDL 陳述式。
下列範例會建立含有 INT64
類型資料欄的資料表,然後將類型更新為 NUMERIC
:
CREATE TABLE mydataset.mytable(c1 INT64); ALTER TABLE mydataset.mytable ALTER COLUMN c1 SET DATA TYPE NUMERIC;
下列範例會建立含有巢狀資料欄的資料表,其中包含兩個欄位,然後將其中一個資料欄的類型從 INT
更新為 NUMERIC
:
CREATE TABLE mydataset.mytable(s1 STRUCT<a INT64, b STRING>); ALTER TABLE mydataset.mytable ALTER COLUMN s1 SET DATA TYPE STRUCT<a NUMERIC, b STRING>;
修改巢狀資料欄類型
對於複雜的巢狀結構定義變更 (例如變更 STRUCT 陣列中的欄位),系統不支援 ALTER TABLE
DDL 陳述式。如要解決這個問題,您可以搭配使用 CREATE OR REPLACE TABLE
陳述式和 SELECT
陳述式,轉換巢狀結構架構變更。
以下範例說明如何轉換 STRUCTS
陣列中的資料欄:
假設資料表 samples.test
的結構定義和資料如下:
CREATE OR REPLACE TABLE samples.test(D STRUCT <L ARRAY<STRUCT<R STRING, U STRING, V STRING>>, F STRING>); INSERT INTO samples.test(D) VALUES (STRUCT([STRUCT("r1", "u1", "v1"), STRUCT("r2", "u2", "v2")], "f1"));
傳回的結果看起來類似下列內容:
+----------------------------------------------------------------------------+ | D | +----------------------------------------------------------------------------+ | {"L":[{"R":"r1","U":"u1","V":"v1"},{"R":"r2","U":"u2","V":"v2"}],"F":"f1"} | +----------------------------------------------------------------------------+
假設您需要將 STRUCT
巢狀陣列中 U
欄位的類型變更為 STRUCT<W STRING>
。以下 SQL 陳述式示範如何完成這項操作:
CREATE OR REPLACE TABLE samples.new_table AS SELECT STRUCT(ARRAY( SELECT STRUCT(tmp.R, STRUCT(tmp.U AS W) AS U, tmp.V) FROM UNNEST(t.D.L) AS tmp) AS L, t.D.F) AS D FROM samples.test AS t
這項陳述式會建立具有目標結構定義的新資料表 samples.new_table
。UNNEST
函式會展開 t.D.L
內的 STRUCT 陣列。運算式 STRUCT(tmp.U AS W) AS U
會建構新的 STRUCT,其中包含欄位 W,並填入原始 U
欄位的值。產生的資料表 samples.new_table
具有下列結構定義和資料:
+----------------------------------------------------------------------------------------+ | D | +----------------------------------------------------------------------------------------+ | {"L":[{"R":"r1","U":{"W":"u1"},"V":"v1"},{"R":"r2","U":{"W":"u2"},"V":"v2"}],"F":"f1"} | +----------------------------------------------------------------------------------------+
轉換資料欄的資料類型
如要將資料欄的資料類型變更為可轉換的類型,請使用 SQL 查詢選取資料表資料、轉換相關資料欄,然後覆寫資料表。不建議對非常大型的資料表進行轉換和覆寫,因為這需要完整掃描資料表。
以下範例使用 SQL 查詢選取 mydataset.mytable
中 column_two
和 column_three
的所有資料,並將 column_one
由 DATE
轉換為 STRING
。並使用查詢結果覆寫現有的資料表。經覆寫的資料表會以 STRING
資料類型儲存 column_one
。
使用 CAST
時,如果 BigQuery 無法執行類型轉換,查詢可能會失敗。如要進一步瞭解 GoogleSQL 的類型轉換規則,請參閱類型轉換。
主控台
前往 Google Cloud 控制台的「BigQuery」頁面。
在「Query editor」(查詢編輯器) 中輸入以下查詢,藉此選取
mydataset.mytable
中column_two
和column_three
的所有資料,並將column_one
由DATE
轉換為STRING
。這項查詢會使用別名轉換具備相同名稱的column_one
。mydataset.mytable
在您的預設專案中。SELECT column_two, column_three, CAST(column_one AS STRING) AS column_one FROM mydataset.mytable;
按一下 [More] (更多) 並選取 [Query settings] (查詢設定)。
在「目的地」部分中,執行下列操作:
選取「為查詢結果設定目標資料表」。
保留「Project name」(專案名稱) 欄位中預設專案的設定值 (含有
mydataset.mytable
的專案)。在「Dataset」(資料集) 部分,選擇
mydataset
。在「Table Id」(資料表 ID) 欄位中輸入
mytable
。針對「Destination table write preference」(目標資料表寫入偏好設定),選取「Overwrite table」(覆寫資料表)。這個選項會使用查詢結果覆寫
mytable
。
視需要選擇資料的位置。
如要更新設定,請按一下「儲存」。
按一下「執行」
。查詢工作完成時,
column_one
的資料類型就會是STRING
。
bq
輸入以下 bq query
指令,藉此選取 mydataset.mytable
中 column_two
和 column_three
的所有資料,並將 column_one
由 DATE
轉換為 STRING
。這項查詢會使用別名轉換具備相同名稱的 column_one
。mydataset.mytable
在您的預設專案中。
查詢結果會使用 --destination_table
旗標寫入 mydataset.mytable
,並使用 --replace
旗標覆寫 mytable
。指定 use_legacy_sql=false
旗標以使用 GoogleSQL 語法。
(選用) 加上 --location
旗標,並該旗標值設為您的位置。
bq query \
--destination_table mydataset.mytable \
--replace \
--use_legacy_sql=false \
'SELECT
column_two,
column_three,
CAST(column_one AS STRING) AS column_one
FROM
mydataset.mytable'
API
如要選取 mydataset.mytable
中 column_two
和 column_three
的所有資料,並將 column_one
由 DATE
轉換為 STRING
,請呼叫 jobs.insert
方法,並設定 query
工作。(選用) 在 jobReference
部分的 location
屬性中指定您的位置。
查詢工作中使用的 SQL 查詢如下:SELECT column_two,
column_three, CAST(column_one AS STRING) AS column_one FROM
mydataset.mytable
。這項查詢會使用別名轉換具備相同名稱的 column_one
。
如要使用查詢結果覆寫 mytable
,請將 mydataset.mytable
加入 configuration.query.destinationTable
屬性,並在 configuration.query.writeDisposition
屬性中指定 WRITE_TRUNCATE
。
變更資料欄的模式
系統唯一支援的資料欄模式修改作業為將資料欄的模式從 REQUIRED
變更為 NULLABLE
。而將資料欄的模式從 REQUIRED
變更為 NULLABLE
也稱為資料欄放寬。載入資料以覆寫現有資料表,或將資料附加至現有資料表時,也可以放寬資料欄。您無法將資料欄的模式從 NULLABLE
變更為 REQUIRED
。
在現有資料表中建立資料欄 NULLABLE
如要將資料欄的模式從 REQUIRED
變更為 NULLABLE
,請選取下列其中一個選項:
主控台
前往「BigQuery」頁面
在「Explorer」面板中,展開專案和資料集,然後選取資料表。
在詳細資料面板中,按一下「結構定義」分頁標籤。
按一下「編輯結構定義」。你可能需要捲動畫面才能看到這個按鈕。
在「目前的結構定義」頁面中,找出要變更的欄位。
在該欄位的「模式」下拉式清單中,選取
NULLABLE
。如要更新設定,請按一下「儲存」。
SQL
使用 ALTER COLUMN DROP NOT NULL
DDL 陳述式。以下範例會將資料欄 mycolumn
的模式從 REQUIRED
變更為 NULLABLE
:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
ALTER TABLE mydataset.mytable ALTER COLUMN mycolumn DROP NOT NULL;
按一下「執行」
。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
bq
首先,請發出
bq show
指令並加上--schema
旗標,並將現有的資料表結構定義寫入檔案。如果您要更新的資料表位於非預設專案中,請依照下列格式將該專案的 ID 加到資料集名稱中:PROJECT_ID:DATASET
。bq show \ --schema \ --format=prettyjson \ PROJECT_ID:DATASET.TABLE > SCHEMA_FILE
更改下列內容:
PROJECT_ID
:您的專案 ID。DATASET
:含有您要更新之資料表的資料集名稱。TABLE
:您要更新的資料表名稱。SCHEMA_FILE
:寫入本機的結構定義檔。
舉例來說,如要將
mydataset.mytable
的結構定義寫入檔案,請輸入下列指令。mydataset.mytable
位於您的預設專案中。bq show \ --schema \ --format=prettyjson \ mydataset.mytable > /tmp/myschema.json
在文字編輯器中開啟結構定義檔。結構定義應如下所示:
[ { "mode": "REQUIRED", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" } ]
將現有的資料欄模式從
REQUIRED
變更為NULLABLE
。在這個範例中,column1
的模式已放寬。[ { "mode": "NULLABLE", "name": "column1", "type": "STRING" }, { "mode": "REQUIRED", "name": "column2", "type": "FLOAT" }, { "mode": "REPEATED", "name": "column3", "type": "STRING" } ]
如要深入瞭解如何使用 JSON 結構定義檔案,請參閱指定 JSON 結構定義檔案。
更新結構定義檔後,請發出下列指令來更新資料表的結構定義。如果您要更新的資料表位於非預設專案中,請依照下列格式將該專案的 ID 加到資料集名稱中:
PROJECT_ID:DATASET
。bq update PROJECT_ID:DATASET.TABLE SCHEMA
更改下列內容:
PROJECT_ID
:您的專案 ID。DATASET
:含有您要更新之資料表的資料集名稱。TABLE
:您要更新的資料表名稱。SCHEMA
:您本機上的 JSON 結構定義檔路徑。
例如,輸入以下指令來更新預設專案中
mydataset.mytable
的結構定義。您本機機器上的 JSON 結構定義檔路徑為/tmp/myschema.json
。bq update mydataset.mytable /tmp/myschema.json
API
呼叫 tables.patch
並使用 schema
屬性,將結構定義中的 REQUIRED
資料欄變更為 NULLABLE
。由於 tables.update
方法會取代整個資料表資源,因此建議使用 tables.patch
方法。
Go
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Go 設定說明進行操作。詳情請參閱 BigQuery Go API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Node.js 設定說明進行操作。詳情請參閱 BigQuery Node.js API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Python 設定說明進行操作。詳情請參閱 BigQuery Python API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
使用 mode 屬性設為'NULLABLE'
的 SchemaField 物件清單覆寫 Table.schema 屬性。
使用附加載入工作建立 NULLABLE
資料欄
在載入工作期間將資料附加至資料表時,您可以放寬資料欄的模式。根據檔案類型選取下列其中一種做法:
- 從 CSV 和 JSON 檔案附加資料時,指定 JSON 結構定義檔以放寬個別資料欄的模式。
- 從 Avro、ORC 或 Parquet 檔案附加資料時,請在結構定義中將資料欄放寬為
NULL
,並允許系統推斷結構定義以偵測放寬的資料欄。
如要在載入工作期間將資料附加到資料表時,一併將資料欄從 REQUIRED
放寬為 NULLABLE
,請選取下列其中一個選項:
主控台
您無法使用 Google Cloud 主控台放寬資料欄的模式。
bq
請使用 bq load
指令載入資料並指定 --noreplace
旗標,以指出您要將資料附加至現有的資料表。
如果您要附加的資料是 CSV 格式,或是以換行符號分隔的 JSON 格式,請在本機 JSON 結構定義檔中指定放寬的資料欄,或透過 --autodetect
旗標使用結構定義偵測功能,在來源資料中找出放寬的資料欄。
系統可以從 Avro、ORC 和 Parquet 檔案自動推斷放寬的資料欄。不過,資料欄放寬不適用於 Datastore 匯出檔的附加作業。透過載入 Datastore 匯出檔所建立的資料表,其資料欄一律為 NULLABLE
。
將 --schema_update_option
旗標設為 ALLOW_FIELD_RELAXATION
,以指出您要附加的資料中包含放寬的資料欄。
如果您要附加的資料表位於非預設專案中的資料集裡,請依照下列格式將該專案的 ID 加到資料集名稱中:PROJECT_ID:DATASET
。
(選用) 提供 --location
旗標,並將值設為您的位置。
輸入 load
指令,如下所示:
bq --location=LOCATION load \ --noreplace \ --schema_update_option=ALLOW_FIELD_RELAXATION \ --source_format=FORMAT \ PROJECT_ID:DATASET.TABLE \ PATH_TO_SOURCE \ SCHEMA
更改下列內容:
LOCATION
:您位置的名稱。--location
是選用旗標。舉例來說,如果您在東京地區使用 BigQuery,就可將該旗標的值設為asia-northeast1
。您可以使用 .bigqueryrc 檔來設定位置的預設值。FORMAT
:NEWLINE_DELIMITED_JSON
、CSV
、PARQUET
、ORC
或AVRO
。DATASTORE_BACKUP
檔案不需要進行資料欄放寬。從 Datastore 匯出檔所建立的資料表,其資料欄一律為NULLABLE
。PROJECT_ID
:您的專案 ID。dataset 是含有資料表的資料集名稱。
TABLE
:您要附加的資料表名稱。PATH_TO_SOURCE
:完整的 Cloud Storage URI、以逗號分隔的 URI 清單,或您本機上的資料檔案路徑。SCHEMA
:本機 JSON 結構定義檔的路徑。這個選項僅用於 CSV 和 JSON 檔案。系統會從 Avro 檔案自動推斷放寬的資料欄。
範例:
輸入下列指令,使用載入工作將本機 Avro 資料檔案 (/tmp/mydata.avro
) 附加至 mydataset.mytable
。由於放寬的資料欄可從 Avro 資料自動推斷出來,因此您不需要指定結構定義檔。mydataset
在您的預設專案中。
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--source_format=AVRO \
mydataset.mytable \
/tmp/mydata.avro
輸入下列指令,使用載入工作將 Cloud Storage 上採用換行符號分隔格式之 JSON 檔案中的資料附加至 mydataset.mytable
。包含放寬資料欄的結構定義位於本機 JSON 結構定義檔 (/tmp/myschema.json
) 中。mydataset
位於您的預設專案中。
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--source_format=NEWLINE_DELIMITED_JSON \
mydataset.mytable \
gs://mybucket/mydata.json \
/tmp/myschema.json
輸入下列指令,使用載入工作將本機機器上 CSV 檔案中的資料附加至 mydataset.mytable
。該指令使用結構定義自動偵測功能來找出來源資料中放寬的資料欄。mydataset
在 myotherproject
中,而不在您的預設專案中。
bq load \
--noreplace \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--source_format=CSV \
--autodetect \
myotherproject:mydataset.mytable \
mydata.csv
API
呼叫 jobs.insert
方法。設定 load
工作和下列屬性:
- 使用
sourceUris
屬性參照 Cloud Storage 中的資料。 - 設定
sourceFormat
屬性來指定資料格式。 - 在
schema
屬性中指定結構定義。 - 使用
schemaUpdateOptions
屬性指定結構定義更新選項。 - 使用
writeDisposition
屬性將目的地資料表的寫入處理方式設為WRITE_APPEND
。
Go
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Go 設定說明進行操作。詳情請參閱 BigQuery Go API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Node.js
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Node.js 設定說明進行操作。詳情請參閱 BigQuery Node.js API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Python 設定說明進行操作。詳情請參閱 BigQuery Python API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
使用附加工作將所有資料欄設為 NULLABLE
將查詢結果附加至資料表時,您可以放寬資料表中的所有資料欄。您可以將 --schema_update_option
旗標設為 ALLOW_FIELD_RELAXATION
,放寬目的地資料表中的所有必要欄位。您無法使用查詢附加工作放寬目標資料表中的個別資料欄。如要使用載入附加工作放寬個別資料欄,請參閱「使用附加工作將資料欄設為 NULLABLE
」。
如要在將查詢結果附加至目的地資料表時一併放寬所有資料欄,請選取下列其中一個選項:
主控台
您無法使用 Google Cloud 主控台放寬資料欄的模式。
bq
使用 bq query
指令查詢資料,並指定 --destination_table
旗標來指出您要附加的資料表。
如要指定將查詢結果附加至現有目的地資料表,請指定 --append_table
旗標。
將 --schema_update_option
旗標設為 ALLOW_FIELD_RELAXATION
,以指出您要附加之資料表中的所有 REQUIRED
資料欄,都應變更為 NULLABLE
。
指定 use_legacy_sql=false
旗標,以在查詢中使用 GoogleSQL 語法。
如果您要附加的資料表位於非預設專案中的資料集裡,請依照下列格式將該專案的 ID 加到資料集名稱中:PROJECT_ID:DATASET
。
(選用) 提供 --location
旗標,並將值設為您的位置。
bq --location=LOCATION query \ --destination_table PROJECT_ID:DATASET.TABLE \ --append_table \ --schema_update_option=ALLOW_FIELD_RELAXATION \ --use_legacy_sql=false \ 'QUERY'
更改下列內容:
LOCATION
:您位置的名稱。--location
是選用旗標。舉例來說,如果您在東京地區使用 BigQuery,就可將該旗標的值設為asia-northeast1
。您可以使用 .bigqueryrc 檔來設定位置的預設值。PROJECT_ID
:您的專案 ID。DATASET
:含有您要附加之資料表的資料集名稱。TABLE
:您要附加的資料表名稱。QUERY
:採用 GoogleSQL 語法的查詢。
範例:
輸入下列指令,查詢預設專案中的 mydataset.mytable
,並將查詢結果附加至 mydataset.mytable2
(也在預設專案中)。該指令會將目的地資料表中的所有 REQUIRED
資料欄變更為 NULLABLE
。
bq query \
--destination_table mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
輸入下列指令,查詢預設專案中的 mydataset.mytable
,並將查詢結果附加至位於 myotherproject
中的 mydataset.mytable2
。該指令會將目的地資料表中的所有 REQUIRED
資料欄變更為 NULLABLE
。
bq query \
--destination_table myotherproject:mydataset.mytable2 \
--append_table \
--schema_update_option=ALLOW_FIELD_RELAXATION \
--use_legacy_sql=false \
'SELECT
column1,column2
FROM
mydataset.mytable'
API
呼叫 jobs.insert
方法。設定 query
工作和下列屬性:
- 使用
destinationTable
屬性指定目的地資料表。 - 使用
writeDisposition
屬性將目的地資料表的寫入處理方式設為WRITE_APPEND
。 - 使用
schemaUpdateOptions
屬性指定結構定義更新選項。 - 使用
query
屬性指定 GoogleSQL 查詢。
Go
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Go 設定說明進行操作。詳情請參閱 BigQuery Go API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
Python
在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Python 設定說明進行操作。詳情請參閱 BigQuery Python API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。 詳情請參閱「設定用戶端程式庫的驗證機制」。
變更資料欄的預設值
如要變更資料欄的預設值,請選取下列其中一個選項:
主控台
前往 Google Cloud 控制台的「BigQuery」頁面。
在「Explorer」面板中,展開專案和資料集,然後選取資料表。
在詳細資料面板中,按一下「結構定義」分頁標籤。
按一下「編輯結構定義」。你可能需要捲動畫面才能看到這個按鈕。
在「目前的結構定義」頁面中,找出要變更的頂層欄位。
輸入該欄位的預設值。
按一下 [儲存]。
SQL
使用 ALTER COLUMN SET DEFAULT
DDL 陳述式。
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
ALTER TABLE mydataset.mytable ALTER COLUMN column_name SET DEFAULT default_expression;
按一下「執行」
。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
變更資料欄說明
如要變更資料欄的說明,請選取下列其中一個選項:
主控台
前往 Google Cloud 控制台的「BigQuery」頁面。
在「Explorer」面板中,展開專案和資料集,然後選取資料表。
在詳細資料面板中,按一下「結構定義」分頁標籤。
按一下「編輯結構定義」。你可能需要捲動畫面才能看到這個按鈕。
在「目前的結構定義」頁面中,找出要變更的欄位。
輸入該欄位的說明。
按一下 [儲存]。
SQL
使用 ALTER COLUMN SET OPTIONS
DDL 陳述式。
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中輸入下列陳述式:
ALTER TABLE mydataset.mytable ALTER COLUMN column_name SET OPTIONS (description = 'This is a column description.');
按一下「執行」
。
如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。
您也可以使用 Gemini,根據資料洞察預先發布版生成說明。
刪除資料欄
您可以使用 ALTER TABLE DROP COLUMN
DDL 陳述式,從現有資料表刪除資料欄。
陳述式不會立即釋出與捨棄資料欄相關聯的儲存空間。如要進一步瞭解在儲存空間中捨棄資料欄對儲存空間的影響,請參閱 ALTER TABLE DROP COLUMN
陳述式詳細資料。如要立即回收儲存空間,有兩種做法:
-
CREATE OR REPLACE TABLE mydataset.mytable AS ( SELECT * EXCEPT (column_to_delete) FROM mydataset.mytable );
將資料匯出至 Cloud Storage,刪除不需要的資料欄,然後將資料載入至結構定義正確的新資料表。