【问题标题】:BigQuery - remove unused column from schemaBigQuery - 从架构中删除未使用的列
【发布时间】:2016-05-26 04:38:47
【问题描述】:

我不小心在我的 BigQuery 表架构中添加了错误的列。

我想知道以下是否可能,而不是重新加载完整的表(百万行):

  • 通过对带有某种过滤器的表运行“select *”查询并将结果保存到同一个表中,删除坏行(具有值的行包含错误的列)。
  • 删除(现在)未使用的列。

是否支持此功能(或类似功能)? 可能“将结果保存到表”功能可以有一个“紧凑模式”选项。

【问题讨论】:

标签: google-bigquery


【解决方案1】:

根据文档从 Big Query 中删除列的最省时的方法。

ALTER TABLE [table_name] DROP COLUMN IF EXISTS [column_name]

【讨论】:

    【解决方案2】:

    以下是执行此操作的代码。假设 c 是您要删除的列。

    CREATE OR REPLACE TABLE transactions.test_table AS
    SELECT * EXCEPT (c) FROM  transactions.test_table;
    

    或者第二种方法,我最喜欢的是按照以下步骤。

    1. 使用要排除的列编写 Select 查询。
    2. 转到查询设置 Query Settings
    3. 在Destination setting设置查询结果的目标表中,输入项目名称、数据集名称和表名称与步骤1中输入的完全相同。
    4. 在目标表写入首选项中选择覆盖表。 Destination table settings
    5. 保存查询设置并运行查询。

    【讨论】:

      【解决方案3】:

      如果您的表不包含记录/重复类型字段 - 您的简单选择是:

      1. 选择有效列,同时将不良记录过滤到新的临时表中

        SELECT
        来自您的餐桌
        WHERE

        将上面的内容写入临时表 - YourTable_Temp

      2. 制作“损坏”表的备份副本 - YourTable_Backup

      3. 删除YourTable
      4. 复制YourTable_TempYourTable
      5. 检查所有内容是否符合预期,如果是 - 删除临时表和备份表

      请注意:上述 #1 的成本与您问题中第一个项目符号中的操作完全相同。其余动作(副本)免费

      如果您有重复/记录字段 - 您仍然可以执行上述计划,但在 #1 中您需要使用一些 BigQuery User-Defined Functions 以在输出中具有正确的架构
      您可以在下面看到示例 - 当然这需要一些额外的开发 - 但如果您处于危急情况 - 这应该适合您

      Create a table with Record type column
      create a table with a column type RECORD

      我希望,当您需要操作和输出重复/记录数据时,Google BigQuery 团队会在某些时候为您的案例添加更好的支持,但目前这是我发现的最佳解决方法 - 至少对我自己而言

      【讨论】:

      • 我有很多重复/记录字段。这就是为什么我使用“select *”并避免使用“flatten results”,以便在保存到新表时保持准确的架构。
      • 在我的回答中添加了更多与重复/记录内容相关的内容。如果您觉得它有用,但在实施时需要帮助 - 请发布另一个包含所有相关详细信息的问题,我很乐意提供帮助。
      • 我要补充一点,您甚至可以将所有数据复制到临时表,并在将数据复制回原始表时使用过滤选项。这样,您可以在必要时恢复操作,而不会丢失那些已删除列中的数据。
      【解决方案4】:

      将结果保存到表格是您的最佳选择。尝试使用您感兴趣的选定列的大表,您可以应用限制以使其变小。

      【讨论】:

      • 如何限制使架构变小(而不是表大小)?
      • Limit 将有助于测试它。您可以在选择列中列出您要保留的列。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-08
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      • 2011-10-08
      相关资源
      最近更新 更多