我正在使用 Google BigQuery,并面临着维护现有表的实时分区版本而不产生与计划查询相关的成本的挑战。我的目标是克隆一个表并同时对其应用新的分区方案,最好是在单个操作或模仿实时复制的无缝过程中。
这是我尝试过的,希望一步完成克隆和分区,但是没有成功
CREATE TABLE `temp.tables.Call2`
CLONE `temp.tables.Call`
PARTITION BY (DATE_TRUNC(LastModification, DAY));
此方法没有成功,因为 BigQuery 似乎不支持直接在
PARTITION BY
语句中添加 CREATE TABLE ... CLONE
子句。
是否有原生 BigQuery 功能或功能组合可以实现此目的? 任何指导、示例或文档指示将不胜感激。
一旦表已经存在,BigQuery 就不允许添加或更改表的集群/分区策略,即使您尝试“创建或替换”该表也是如此。
我也遇到过类似的情况,我想采用一个已经存在的流表并向其添加分区(永久)。 如果这种情况与您当前需要的类似,我发现的最简单的解决方案是:
CREATE OR REPLACE TABLE my_copy_table PARTITION BY ... AS SELECT * FROM my_table
DROP TABLE my_table
ALTER TABLE my_copy_table RENAME TO my_table
所以基本上我们正在创建表的副本,但具有所需的分区。然后,我们删除原始表并将复制的表重命名为原始名称。
如果您在现有表上添加分区没有问题,这将起作用。
有关分区的更多信息,请参阅根据查询结果创建分区表的文档: https://cloud.google.com/bigquery/docs/creating-partitioned-tables#create_a_partitioned_table_from_a_query_result
如果此解决方案不适合您,请提供有关目标的更多信息,我也会尽力提供帮助