是否可以从Google BigQuery中的分区表中删除列?

时间:2018-02-16 15:38:13

标签: google-cloud-platform google-bigquery

我尝试使用此命令从BigQuery中的分区表中删除列

bq query --destination_table [DATASET].[TABLE_NAME] --replace --use_legacy_sql=false 'SELECT * EXCEPT(column) FROM [DATASET].[TABLE_NAME]'

因此,删除了不需要的列,更改了架构,但不再对数据进行分区。

有关如何在删除列后保持数据分区的任何建议?文档仅对非分区表清晰。

2 个答案:

答案 0 :(得分:3)

您可以使用两种解决方法:

  1. 使用列分区表,这意味着它在表中的常规列的值上进行分区。您可以创建新的列分区表并复制删除列的数据:

    bq mk --time_partitioning_field = pt --schema = ... [DATASET]。[TABLE_NAME2]

    bq query --destination_table = [DATASET]。[TABLE_NAME2]“从[DATASET]中选择_PARTITIONTIME作为pt,* EXCEPT(列)。[TABLE_NAME]”

  2. 您仍然可以使用日分区表,但使用DML复制数据。您可以在DML INSERT语句中设置或复制_PARTITIONTIME列,这对于常规SELECT是不可能的。这是一个例子:

    INSERT INTO   dataset1.table1(_partitiontime,     一个,     b) 选择   TIMESTAMP(日期“2008-12-25”)AS _partitiontime,   “a”AS a,   “b”AS b

  3. 这需要DML优于分区表,目前处于alpha:https://issuetracker.google.com/issues/36383555

答案 1 :(得分:0)

BigQuery 现在支持分区表中的 DROP COLUMN

ALTER TABLE mydataset.mytable
DROP COLUMN column

在撰写本文时它处于测试阶段,但对我有用。