我在大查询中有一个分区表,我想更改该表的架构。 在通过Web UI使用以下sql之前,我已经更改了表的架构
df['New']=df.set_index(['dt']).groupby('item')['s'].shift(2, 'M').\
reindex(pd.MultiIndex.from_frame(df[['item','dt']])).values
df
item dt s r t New
0 red 2018-01-31 3.2 1 7 NaN
1 red 2018-02-28 4.8 2 8 NaN
2 red 2018-03-31 5.1 3 9 3.2
3 blue 2018-01-31 5.3 4 10 NaN
4 blue 2018-03-31 5.8 5 11 5.3
但这会导致所有先前的分区丢失,并且当我使用以下命令查找此新创建的表的分区时,它会给我今天的日期
'SELECT * REPLACE ((SELECT AS STRUCT whatever.* EXCEPT (columnName)) AS whatever) FROM `a:b.c`'
是否可以更改表的架构并将其分区保留在BigQuery中?
答案 0 :(得分:0)
当前,在文档(link 1和link 2中已声明所有可用的可能修改,并且未将分区表更改为非分区表。但是,有一种解决方法。
为了将分区表更改为非分区表,可以使用控制台查询数据并覆盖当前表或将其复制到新表。举例来说,我在BigQuery中有一个按 _PARTITIONTIME 分区的表。我使用以下查询创建了未分区表
SELECT *, _PARTITIONTIME as pt FROM `project.dataset.table`
使用上面的代码,您将查询所有表分区中的数据,并创建一个额外的列以显示其来自哪个分区。然后,在执行之前,有两个选项,将视图保存在新的未分区表中或覆盖当前表:
创建新表,请转到:更多(在查询编辑器下)> 查询设置> 选中复选框“ < strong>为查询结果设置目标表“>> 选择项目,数据集并输入新表的名称> 下 目标表写入首选项< / strong> 检查 写为空。
覆盖当前表:更多(在查询编辑器下)> 查询设置> 选中该框“ 为查询结果设置目标表“> 为当前表选择相同的项目和数据集> 为要覆盖的表写相同的表名 > 下 目标表写入首选项 检查 覆盖表。