删除 BigQuery 列的一种可能方法

Posted

技术标签:

【中文标题】删除 BigQuery 列的一种可能方法【英文标题】:A possible way to remove BigQuery column 【发布时间】:2015-11-20 15:27:09 【问题描述】:

我正在寻找更新现有 BigQuery 表的方法。

使用CLI,我可以将表格复制到新表格。现在,我正在寻找一种有效的删除/重命名列的方法。

据说不能删除列。那么在将 table1 复制到 table2 以排除某些列时是否有可能?

谢谢,

【问题讨论】:

【参考方案1】:

您可以通过运行将旧表复制到新表的查询来执行此操作。您应该指定allowLargeResults:trueflattenSchema:false。前者允许查询结果大于 128MB,后者防止重复字段在结果中被展平。

您可以将结果写入与源表相同的表,但使用writeDisposition:WRITE_TRUNCATE。这将用结果自动覆盖表。但是,如果您想先测试查询,您总是可以先将结果写入临时表,然后在您满意时将临时表复制到旧表上(使用WRITE_TRUNCATE 原子替换表)。

(注意,我在这里描述的标志是它们在底层 API 中的名称,但它们在 Web UI 和 bq CLI 的查询选项中都有类似的名称。

例如,如果您有一个具有架构 a, b, c, d 的表 t1,并且您想删除字段 c,并将 b 重命名为 b2,您可以运行

SELECT a, b as b2, d FROM t1

【讨论】:

谢谢!听起来不错 :) 现在具有挑战性的事实是从更新的 JSON 模式文件(嵌套和重复字段)生成查询。实际上,每个模式都是版本化的,当创建新版本时,将触发更新作业,以便使用旧版本更新所有表。 我们正在使用 WebUI 执行此操作,但是创建的表在字段上丢失了它的“必需”(它们都变为 NULLABLE)。有什么想法可以将 REQUIRED 放在桌面上吗?

以上是关于删除 BigQuery 列的一种可能方法的主要内容,如果未能解决你的问题,请参考以下文章

查询结果后 BigQuery 导出多个文件

BigQuery 隐藏 UDF 实现

为啥 BigQuery 没有删除列的选项?

BigQuery:如何将我的一列的类型从 INTEGER 更改为 STRING?

如何通过删除基于 8 列中的 2 列的重复项来清理 BigQuery 表?

有没有办法在 bigquery 中删除表列?