我正在尝试将现有分区列更改为另一列。
我正在使用的当前工作流程:
我的问题:
由于我们现有的分区表中有大量数据,因此这种方式成本很高
有没有办法做Alter table并将分区列名更改为另一个?
答案 0 :(得分:1)
如从此CREATE或REPLACE DML命令生成的错误消息中所看到的,您无法避免一次扫描表的花费
#standardSQL
CREATE OR REPLACE TABLE `project.dataset.table`
PARTITION BY DATE(ts)
AS
SELECT * FROM `project.dataset.table`
无法用其他分区规范替换表。而是,删除表,然后重新创建它。新的分区规范为interval(type:day,field:ts),现有的分区规范为none
为节省成本,您可以使用WHERE
命令来限制从现有表移动到新表的分区数量
CREATE TABLE project.mydataset.newPartitionTable
PARTITION BY date
OPTIONS (
partition_expiration_days=365,
description="Table with a new partition"
) AS
SELECT * from `project.dataset.table` WHERE
PARTITIONTIME >= '2019-01-23 00:00:00'
AND _PARTITIONTIME <= '2019-01-23 00:00:00'
例如,您可以考虑不要移动您的长期存储,这是过去90天内无法访问的数据(有关更多详细信息,请参见此link)
如果要保留原始表名,可以在复制后使用新的分区字段删除/创建它,并使用来自webUI的复制选项,这将是免费的