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

Google bigquery BigQuery-从架构中删除未使用的列,google-bigquery,Google Bigquery,我不小心在我的BigQuery表架构中添加了一个错误的列 我不想重新加载整个表的百万行,而是想知道是否有以下可能: 通过使用某种筛选器对表运行select*查询,并将结果保存到同一个表中,删除包含错误列的值为的坏行。 删除现在未使用的列。 是否支持此功能或类似功能? “将结果保存到表”功能可能有一个紧凑的模式选项。将结果保存到表是您的选择。用你感兴趣的选定列在大表上试试,你可以应用一个限制使它变小 如果您的表不包含记录/重复类型字段-您的简单选项是: 选择有效列,同时将坏记录过滤到新临时表中 选

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

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

通过使用某种筛选器对表运行select*查询,并将结果保存到同一个表中,删除包含错误列的值为的坏行。 删除现在未使用的列。 是否支持此功能或类似功能?
“将结果保存到表”功能可能有一个紧凑的模式选项。

将结果保存到表是您的选择。用你感兴趣的选定列在大表上试试,你可以应用一个限制使它变小

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

选择有效列,同时将坏记录过滤到新临时表中

选择<原始列列表> 从你的桌子上 其中

将上述内容写入临时表-您的临时表

对损坏的表进行备份-您的表\u备份

删除您的表 将表格复制到表格中 检查所有内容是否符合预期,如果符合,请删除临时表和备份表 请注意:以上1的成本与您问题中第一个项目中的行动完全相同。其余的复制操作都是免费的

在这种情况下,若您有重复/记录字段,您仍然可以执行上述计划,但在1中,您将需要使用一些来在输出中具有适当的模式 您可以在下面看到示例—当然,这需要一些额外的开发—但如果您处于危急情况—这应该适合您


我希望Google BigQuery团队能在某个时候为您这样的案例提供更好的支持,当您需要操作和输出重复/记录数据时,但目前这是我发现的最好的解决方法-至少对我自己来说,下面是代码。假设c是要删除的列

CREATE OR REPLACE TABLE transactions.test_table AS
SELECT * EXCEPT (c) FROM  transactions.test_table;
或者第二种方法,我最喜欢的是以下步骤

使用要排除的列编写Select查询。 转到查询设置 在“目标设置”“为查询结果设置目标表”中,输入与步骤1中输入的完全相同的项目名称、数据集名称和表名称。 在目标表写入首选项中,选择覆盖表。 保存查询设置并运行查询。
根据文档,从大查询中删除列是最省时的方法


ALTER TABLE[TABLE_name]DROP COLUMN(如果存在)[COLUMN_name]

限制如何有助于使架构变小而不是表大小?限制将有助于测试它。您可以在“选择”中列出要保留的列。我有许多重复/记录字段。这就是为什么我使用select*并避免使用展平结果,以在保存到新表时保持准确的模式。在我的答案中添加了更多与重复/记录内容相关的内容。如果您觉得它很有用,但在实施过程中需要帮助,请发布另一个问题以及所有相关的详细信息,我很乐意提供帮助。我想补充的是,您甚至可以将所有数据复制到临时表,并在将数据复制回原始表时使用筛选选项。这样,您可以在必要时还原操作,而不会丢失这些删除列中的数据。请尝试GCP文档中描述的方法之一:在代码部分之间加一个“`”。@Xenikh补充道,感谢您的建议。