【问题标题】: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 中没有此选项是否有任何合乎逻辑的原因?

【问题讨论】:

    标签: google-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 [, ...]
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多