BigQuery - 从架构中删除未使用的列

时间:2016-02-15 10:08:53

标签: google-bigquery

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

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

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

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

4 个答案:

答案 0 :(得分:10)

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

  1. 选择有效列,同时将错误记录过滤到新临时表

    SELECT<原始列表列表>
    从你的桌子上 在哪里<过滤以删除不良条目>

    将上述内容写入临时表 - YourTable_Temp

  2. 制作"破坏"的备份副本表 - YourTable_Backup

  3. 删除YourTable
  4. YourTable_Temp复制到YourTable
  5. 检查所有内容是否符合预期,如果是 - 删除临时表和备份表
  6. 请注意:高于#1的费用与您问题中第一个项目符号中的操作完全相同。其余的行动(副本)是免费的

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

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

    我希望,当你需要操作和输出重复/记录数据时,Google BigQuery Team会在某些时候为你的案例添加更好的支持,但是现在这是我找到的最好的解决方法 - 至少对我自己来说

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

第二种方法,而我最喜欢的方法是按照以下步骤操作。

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