在大查询中更改分区表架构

时间:2020-06-11 00:30:39

标签: google-bigquery

我在大查询中有一个分区表,我想更改该表的架构。 在通过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中?

1 个答案:

答案 0 :(得分:0)

当前,在文档(link 1link 2中已声明所有可用的可能修改,并且未将分区表更改为非分区表。但是,有一种解决方法。

为了将分区表更改为非分区表,可以使用控制台查询数据并覆盖当前表或将其复制到新表。举例来说,我在BigQuery中有一个按 _PARTITIONTIME 分区的表。我使用以下查询创建了未分区表

SELECT *, _PARTITIONTIME as pt FROM `project.dataset.table` 

使用上面的代码,您将查询所有表分区中的数据,并创建一个额外的列以显示其来自哪个分区。然后,在执行之前,有两个选项,将视图保存在新的未分区表中或覆盖当前表:

  1. 创建新表,请转到:更多(在查询编辑器下)> 查询设置> 选中复选框“ < strong>为查询结果设置目标表“>> 选择项目,数据集并输入新表的名称> 目标表写入首选项< / strong> 检查 写为空

  2. 覆盖当前表:更多(在查询编辑器下)> 查询设置> 选中该框为查询结果设置目标表“> 为当前表选择相同的项目和数据集> 为要覆盖的表写相同的表名 > 目标表写入首选项 检查 覆盖表