BigQuery中从NULLABLE到REQUIRED的端口字段

时间:2016-07-20 13:10:54

标签: schema google-bigquery data-migration

我正在尝试将一个BigQuery表移动到一个新的模式,该模式具有一些额外的新NULLABLE字段,并且其中一个字段f已经变为REQUIRED(在旧模式中它们是NULLABLE)。

我尝试通过命令

使用新架构更新表

bq update <table> <new_schema>

我收到了错误

BigQuery error in update operation: Provided Schema does not match Table

作为第二次尝试,我使用新字段创建了一个临时空表,然后尝试在其中附加来自查询的数据(来自旧表的SELECT *),但是我收到错误:

Invalid schema update. Field f has changed mode from REQUIRED to NULLABLE

有没有办法轻松完成此迁移?当然,我可以忽略表f实际为NULL的表行。如果BigQuery可以从查询中推断出它会很酷。我试着做

SELECT * FROM old_table WHERE f IS NOT NULL

并使用新架构将结果附加到表中,但这不起作用。

2 个答案:

答案 0 :(得分:2)

尝试使用空字符串,其中f为null。

CASE
    WHEN f IS NULL THEN ""
    ELSE f
END as f

答案 1 :(得分:0)

使用第二种方法 - 创建新表并在那里附加数据。 但请使用StandardSQL dialect。它将避免&#34;改变模式&#34;错误。 如果您尝试插入NULL,则查询仍然会失败。