删除 BigQuery 列的一种可能方法
Posted
技术标签:
【中文标题】删除 BigQuery 列的一种可能方法【英文标题】:A possible way to remove BigQuery column 【发布时间】:2015-11-20 15:27:09 【问题描述】:我正在寻找更新现有 BigQuery 表的方法。
使用CLI,我可以将表格复制到新表格。现在,我正在寻找一种有效的删除/重命名列的方法。
据说不能删除列。那么在将 table1 复制到 table2 以排除某些列时是否有可能?
谢谢,
【问题讨论】:
【参考方案1】:您可以通过运行将旧表复制到新表的查询来执行此操作。您应该指定allowLargeResults:true
和flattenSchema: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:如何将我的一列的类型从 INTEGER 更改为 STRING?