为啥 BigQuery 没有删除列的选项?
Posted
技术标签:
【中文标题】为啥 BigQuery 没有删除列的选项?【英文标题】:Why BigQuery doesn't have an option to remove column?为什么 BigQuery 没有删除列的选项? 【发布时间】:2017-08-22 11:25:48 【问题描述】:我正在寻找一个选项来从我的 BigQuery 表中删除一列,例如 ALTER TABLE TABLE_NAME DROP COLUMN_NAME
- 但我在网上找到的只是删除旧表并创建一个新表。
我只是想知道,BigQuery 中没有此选项是否有任何合乎逻辑的原因?
【问题讨论】:
【参考方案1】:删除一列意味着从构成表的所有Capacitor files 中删除数据,这是一项昂贵的操作。如果 BigQuery 只是删除与列相关的元数据,您将需要为无法实际查询的虚拟列支付存储费用,这并不理想。
相反,当您添加列时,BigQuery 会将过去文件中缺少的列视为具有所有 NULL
值,因此不需要修改它们。
有几个不同的选项可以删除一列:
从原始表中选择,不包括您不想保留的列。然后复制生成的表并覆盖原始表。 在包含所需列的表上创建逻辑视图。现在查询逻辑视图而不是表——您可以进行其他“修改”,例如强制转换或过滤,而无需触及基础表。缺点是您将需要为不再需要查询的旧列付费。【讨论】:
谢谢。对于使用列式存储模型的数据库来说,这总是令人惊讶,从表面上看,这会使删除列更容易!【参考方案2】:您可以通过重写表格删除列。
CREATE OR REPLACE TABLE
temp.table_name AS
SELECT
* EXCEPT (column_name)
FROM
temp.table_name
【讨论】:
在分区表上运行此命令会出现错误:无法用不同的分区规范替换表。相反,删除表,然后重新创建它。新分区规范为无,现有规范为间隔(类型:天,字段:活动日期)【参考方案3】:BigQuery 现在支持DROP COLUMN
ALTER TABLE [[project_name.]dataset_name.]table_name
DROP COLUMN [IF EXISTS] column_name [, ...]
【讨论】:
请不要对多个问题添加相同的答案。回答最好的一个并将其余的标记为重复。见Is it acceptable to add a duplicate answer to several questions? 谢谢,这将有助于保持网站清洁以上是关于为啥 BigQuery 没有删除列的选项?的主要内容,如果未能解决你的问题,请参考以下文章
Google BigQuery 在加载作业的 ignoreUnknownValues 选项上出现意外行为(收到额外列的错误)