【问题标题】:BigQuery insert (not append) a new column into schemaBigQuery 将新列插入(不附加)到架构中
【发布时间】:2020-06-10 11:48:00
【问题描述】:

是否有方便的方法(Python、Web UI 或 CLI)将新列插入现有 BigQuery 表(已经有 100 列左右)并相应地更新架构?

假设我想在第 49 列之后插入它。如果我通过查询执行此操作,我将不得不输入每个列名,不是吗?

更新:建议的答案没有明确说明这如何适用于 BigQuery。此外,documentation 似乎没有覆盖

ALTER TABLE `tablename` ADD `column_name1` TEXT NOT NULL AFTER `column_name2`;

语法。一项测试证实 AFTER 标识符不适用于 BigQuery。

【问题讨论】:

  • 这能回答你的问题吗? Inserting new columns in the middle of a table?
  • @FernandoCid 不,它没有
  • BigQuery 目前不允许您在中间插入列。您必须重新创建表并迁移数据。 `CREATE OR REPLACE TABLE ... AS SELECT ..." 允许您在一个操作中完成此操作。
  • @FabianBosler,您介意解释一下为什么需要在特定列之后插入一列吗?这是为了支持SELECT * FROM ...,而不需要手动调整列的顺序,还是你有更复杂的场景需要支持?
  • @YunZhang 真的只是为了美观。我重视描述和结构。有问题的表是一个基表,我确实希望人们查看模式并阅读列描述,并且我希望将列放在一起,这些列在逻辑上应该彼此接近。我猜SELECT * EXCEPT (cols_after), new col, cols after 至少会减少要键入的列名称的数量。

标签: google-bigquery


【解决方案1】:

我认为不可能以简单的方式执行此操作,我想通过一些解决方法来达到此目的,例如:

  1. Create a view 添加您的专栏后。
  2. Creating a table from a query result 添加您的专栏后。

另一方面,我不知道这有什么用处,我认为满足此要求的唯一方案是,如果您使用的是 SELECT *,则在根据 Bigquery best practices 使用 BigQuery 时不建议这样做。如果不是这样,请分享您的使用案例以更好地了解它。

由于这不是 BigQuery 的当前功能,您可以提交feature request 请求此功能。

【讨论】:

  • 这真的只是为了美观。我重视描述和结构。有问题的表是一个基表,我确实希望人们查看架构并阅读列描述,并且我希望将列放在一起,这些列在逻辑上应该彼此接近。我猜一个 SELECT * EXCEPT (cols_after), new col, cols after 至少减少了要输入的 col 名称的数量
  • SELECT * EXCEPT (col) 是从查询结果创建表后的好方法,尤其是如果您想为您的用户获取schema information
猜你喜欢
  • 2013-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-22
  • 2017-07-12
  • 2017-01-03
相关资源
最近更新 更多