为什么BigQuery没有删除列的选项?

时间:2017-08-22 11:25:48

标签: google-bigquery

我正在寻找一个从我的BigQuery表中删除列的选项,例如ALTER TABLE TABLE_NAME DROP COLUMN_NAME - 但我在网上找到的只是删除旧表并创建一个新表。

我只是想知道,BigQuery中没有这个选项有合理的理由吗?

3 个答案:

答案 0 :(得分:5)

删除列意味着从构成表的所有Capacitor files中删除数据,这是一项昂贵的操作。如果BigQuery只是删除与该列相关的元数据,那么您可能需要为实际查询的幻像列收取存储空间,这不是理想的。

当您添加列时,相反,BigQuery会将过去文件中的缺失列视为具有所有NULL值,并且不需要修改它们。

删除列有两种不同的选项:

  • 从原始表格中选择,不包括您不想保留的列。然后复制生成的表并覆盖原始表。
  • 使用所需的列在表上创建逻辑视图。现在查询逻辑视图而不是表 - 您可以进行其他修改"以及诸如铸造或过滤而不必触及基础表。不利的一点是,您将需要为不再需要查询的旧列付费。

答案 1 :(得分:2)

BigQuery 现在支持 DROP COLUMN

ALTER TABLE [[project_name.]dataset_name.]table_name
DROP COLUMN [IF EXISTS] column_name [, ...]

答案 2 :(得分:1)

您可以通过重写表删除列。

CREATE OR REPLACE TABLE
  temp.table_name AS
SELECT
  * EXCEPT (column_name)
FROM
  temp.table_name