需要将分区列更改为另一列并将数据重新加载到新分区中

问题描述 投票:0回答:1

我正在尝试将已存在的分区列更改为另一列。

我正在使用的当前工作流程:

  1. 备份现有数据
  2. 使用新分区列创建新表
  3. 将数据重新加载到新分区中

我的问题: 由于我们现有的分区表中存在大量数据,因此这种方式成本很高

有没有办法我们可以做Alter表并将分区列名更改为另一个?

google-bigquery
1个回答
1
投票

从这个CREATE OR REPLACE DML命令生成的错误消息中可以看到,您无法避免一次性扫描表的成本

#standardSQL
 CREATE OR REPLACE TABLE `project.dataset.table`
 PARTITION BY DATE(ts)
 AS 
 SELECT * FROM `project.dataset.table`

无法使用不同的分区规范替换表。相反,DROP表,然后重新创建它。新的分区规范是interval(类型: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

enter image description here

如果要保留原始表名,可以在复制后使用新分区字段删除/创建它,并使用webUI中的免费复制选项

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.