从Bigquery中的查询复制表

时间:2016-10-04 08:40:45

标签: google-bigquery

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

问题在于:

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

是否有比使用所有列可空/重复创建新表或手动转换所有数据更好的解决方案?

1 个答案:

答案 0 :(得分:0)

更新(2018-06-20): BigQuery现在支持标准SQL中查询输出的必填字段,并且自2017年中期开始实施。

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

<强>过时:

您有几种选择:

  1. 将字段类型更改为可为空。标准SQL只返回可空字段,这是预期的行为,因此,根据需要标记字段可能没那么有用。

  2. 您可以使用旧版SQL,它将保留必填字段。您无法使用except,但您可以明确选择所有其他字段。

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

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