我尝试使用此命令从BigQuery中的分区表中删除列
bq query --destination_table [DATASET].[TABLE_NAME] --replace --use_legacy_sql=false 'SELECT * EXCEPT(column) FROM [DATASET].[TABLE_NAME]'
因此,删除了不需要的列,更改了架构,但不再对数据进行分区。
有关如何在删除列后保持数据分区的任何建议?文档仅对非分区表清晰。
答案 0 :(得分:3)
您可以使用两种解决方法:
使用列分区表,这意味着它在表中的常规列的值上进行分区。您可以创建新的列分区表并复制删除列的数据:
bq mk --time_partitioning_field = pt --schema = ... [DATASET]。[TABLE_NAME2]
bq query --destination_table = [DATASET]。[TABLE_NAME2]“从[DATASET]中选择_PARTITIONTIME作为pt,* EXCEPT(列)。[TABLE_NAME]”
您仍然可以使用日分区表,但使用DML复制数据。您可以在DML INSERT语句中设置或复制_PARTITIONTIME列,这对于常规SELECT是不可能的。这是一个例子:
INSERT INTO dataset1.table1(_partitiontime, 一个, b) 选择 TIMESTAMP(日期“2008-12-25”)AS _partitiontime, “a”AS a, “b”AS b
这需要DML优于分区表,目前处于alpha:https://issuetracker.google.com/issues/36383555
答案 1 :(得分:0)
BigQuery 现在支持分区表中的 DROP COLUMN:
ALTER TABLE mydataset.mytable
DROP COLUMN column
在撰写本文时它处于测试阶段,但对我有用。