【问题标题】:Copy tables from query in Bigquery从 Bigquery 中的查询复制表
【发布时间】:2016-10-04 08:40:44
【问题描述】:

我正在尝试修复字段类型错误(但不包含数据)的 Bigquery 表的架构。我想使用 UI (select * except(bad_column) from ...) 将数据从旧模式复制到新模式。

问题是:

  • 如果我选择一个表,Bigquery 将删除所需的列,因此拒绝插入。
  • 通过 json 导出会丢失日期信息。

有没有比创建一个所有列都可以为空/重复的新表或手动转换所有数据更好的解决方案?

【问题讨论】:

标签: google-bigquery


【解决方案1】:

更新(2018 年 6 月 20 日):BigQuery 现在支持标准 SQL 中查询输出的必填字段,并且从 2017 年年中开始支持。

具体来说,如果您将查询结果附加到具有必填字段的架构的表中,则该架构将被保留,并且 BigQuery 将在写入结果时检查它是否包含空值。如果您想将结果写入一个全新的表,您可以创建一个具有所需架构的空表并附加到该表。


过时:

您有多种选择:

  1. 将您的字段类型更改为可为空。标准 SQL 仅返回可为空的字段,这是预期的行为,因此今后将字段标记为必需的可能不太有用。

  2. 您可以使用旧版 SQL,它将保留必填字段。不能使用except,但可以显式选择所有其他字段。

  3. 您可以使用所需的架构导出和重新导入。

您提到通过 JSON 导出会丢失日期信息。你能澄清一下吗?如果您指的是分区日期,那么不幸的是,我认为上述任何解决方案都会将所有数据折叠到今天的分区中,除非您使用 table$yyyymmdd 语法明确插入到命名分区中。 (这可行,但如果您的数据分布在多个日期,则可能需要大量操作。)

【讨论】:

  • 导出到 json 会丢失日期的精度 - 格式是一秒精度的指数。有一些功能可以保持进动。
  • 随着表大小的增加,导出数据将变得越来越困难。
  • 我们最终放弃了非空规范。
  • 更新:BigQuery 现在支持查询输出中的必填字段。
【解决方案2】:

BigQuery 现在支持表克隆功能。表克隆是另一个表的轻量级、可写副本

Copy tables from query in Bigquery

【讨论】:

    猜你喜欢
    • 2021-12-03
    • 1970-01-01
    • 2016-12-25
    • 2021-01-21
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    相关资源
    最近更新 更多