【发布时间】:2018-11-15 09:15:59
【问题描述】:
我正在尝试创建一个新的聚集表 db.new_table,它与 BigQuery 中的现有表 db.old_table 具有相同的数据和架构。现有表有一个伪列_PARTITIONTIME,我希望新表也有这个_PARTITIONTIME 伪列。
我尝试过使用 DDL,查询如下:
CREATE TABLE `db.new_table`
PARTITION BY DATE(_PARTITIONTIME)
CLUSTER BY field1, field2
AS SELECT * FROM `db.old_table`
WHERE _PARTITIONTIME > '1990-01-01'
但是它失败了,因为我们不能使用PARTITION BY DATE(_PARTITIONTIME) 后跟AS SELECT ...。如https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language中所述
有没有办法做到这一点? (从由伪列 _PARTITIONTIME 分区的旧表中创建一个具有完全相同架构和数据的新聚簇表)
感谢任何回答和评论。
注意事项: 我可以创建一个没有 _PARTITIONTIME 的类似表,查询如下:
CREATE TABLE `db.new_table`
PARTITION BY partition_date
CLUSTER BY field1, field2
AS SELECT DATE(_PARTITIONTIME) AS partition_date, * FROM `db.old_table`
WHERE _PARTITIONTIME > '1990-01-01'
但是由于系统中很多东西都依赖于db.old_table,所以分区字段从_PARTITIONTIME到partition_date的变化会导致很多查询变化......因此如果我们可以创建具有完全相同架构和数据的聚簇表。
【问题讨论】:
标签: google-bigquery ddl