我正在尝试将已经存在的分区列更改为另一列。
我正在使用的当前工作流程:
我的问题:
由于我们现有的分区表中有大量数据,这种方式成本很高
有没有办法我们可以做 Alter table 并将分区列名称更改为另一个?
从这个 CREATE OR REPLACE DML 命令生成的错误消息中可以看出,您无法避免扫描表的 1 次成本
#standardSQL
CREATE OR REPLACE TABLE `project.dataset.table`
PARTITION BY DATE(ts)
AS
SELECT * FROM `project.dataset.table`
Run Code Online (Sandbox Code Playgroud)
不能用不同的分区规范替换表。相反,DROP 表,然后重新创建它。新的分区规范是 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'
Run Code Online (Sandbox Code Playgroud)
例如,您可以考虑不移动您的长期存储,即您在过去 90 天内没有访问过的数据(有关更多详细信息,请参阅此链接)
如果你想保留你的原始表名,你可以在复制后使用新的分区字段删除/创建它,并使用 webUI 中的复制选项,这将是免费的
| 归档时间: |
|
| 查看次数: |
1715 次 |
| 最近记录: |