前言
與傳統的關聯式資料庫不同, BigQuery 並不支援使用 ALTER 來修改資料表內的欄位, 如果很不幸的真的需要改欄位, 我們只能重新建立新的資料表
CREATE OR REPLACE TABLE `dataset.usr_new` AS
SELECT
* EXCEPT (usrType),
CAST(usrType AS INT64) AS usrType,
FROM
`dataset.usr`;
分區表 (Partitioned Table)
以上的方法只適合用在普通的資料表, 若想要修改分區表內的欄位資訊, 建議使用 bq
query 的指令來做
bq query 支援將查詢的結果寫入到指定的資料表中, 除此之外還可以用查詢結果來建立分區表(如下)
bq --location=location query \
--destination_table project_id:dataset.table \
--time_partitioning_field column \
--use_legacy_sql=false \
'query'
分區表都會有兩個虛擬的欄位 _PARTITIONDATA, _PARTITIONTIME
用來記錄資料的時間, 這邊需要注意的是 bq query
沒辦法將舊資料表內的虛擬欄位的資訊直接寫到新的資料表中,
若想將這些資訊保留下來, 必須額外建立新的欄位來放這些資訊
SELECT
* EXCEPT (usrType),
CAST(usrType AS INT64) AS usrType,
_PARTITIONTIME AS createdAt
FROM
`dataset.usr`;
完整的指令
bq query \
--destination_table 'dataset.usr_new' \
--time_partitioning_field createdAt \
--use_legacy_sql=false --append_table \
'
SELECT
* EXCEPT (usrType),
CAST(usrType AS INT64) AS usrType,
_PARTITIONTIME AS createdTimeAt
FROM
`dataset.usr`;
'
以上的指令執行完了之後就會產生新的分區資料表 usr_new, 並且 usrType 的欄位資訊會被改成 INT64 的資料型別
留言
張貼留言