我有一个现有的日期分区表,我想创建一个新的日期分区表,并且只保留原始表中的一列,同时保持原始分区。
我尝试过: 创建一个空的分区表并从查询中复制结果,但是分区丢失了。
如果我也将分区日期作为新表中的一列包含在内,则下面的Create语句应该可以使用。从查询结果加载数据时,有没有办法使用part_date列作为分区装饰器?
CREATE TABLE
cat_dataset.cats_names(cat_name string)
PARTITION BY
part_date AS
SELECT
cat_name,
_PARTITIONDATE AS part_date
FROM
`myproject.cat_dataset.cats`
我想避免循环所有日期并将该日期的数据写到新表中。从查询结果加载数据时,有没有办法使用part_date列作为分区装饰器?
答案 0 :(得分:2)
INSERT INTO
允许您将_PARTITIONTIME
指定为一列,请参见link。下面的代码应该可以工作:
CREATE TABLE cat_dataset.cats_names(cat_name string)
PARTITION BY DATE(_PARTITIONTIME);
INSERT INTO cat_dataset.cats_names (_PARTITIONTIME, cat_name)
SELECT _PARTITIONTIME, cat_name
FROM `myproject.cat_dataset.cats`