0

我有一个 bigQuery 表,其中包含从 JSON 文件加载的大约 2M 行。JSON 文件中的实际字段为 10,但根据初始 DDL,表有 7 列。现在我更改了表格并添加了剩余的三列。更改后,新添加的列中的值用 NULL 填充。

现在我想回填现有 2M 行中的数据,但只有这三个新添加的列包含来自 json 文件的实际数据。我如何批量更新表,以便现有的列值保持不变并且只更新新的列值。

注意:表启用了流缓冲区,并且表未分区。

4

1 回答 1

1

现在我想回填现有 2M 行中的数据,但只有这三个新添加的列包含来自 json 文件的实际数据。

由于加载数据是免费的,我会重新加载整个表并WRITE_TRUNCATE选择覆盖现有数据。

你说的让我很困惑,因为:

  • 如果您在 BQ 表中的 2M 行与 JSON 文件中的数据相同,您为什么要关心它们是否被触摸?
  • 如果 BQ 表中的 2M 行已以某种方式更改,您如何期望 JSON 文件中的行在每行的基础上匹配更改的数据(以回填缺失的列)?

-- 更新:根据评论,加载的行似乎已以某种方式更改。然后:

  • 对于您现有的数据,如果没有(逻辑)主键供您用于匹配行,那么从技术上讲,“匹配和更新”是不可能的。
  • 如果您现有的数据确实具有逻辑主键,并且您不介意成本,则可以将完整表加载到临时表中,然后使用 DML 回填缺失的列。

对于您未来的数据加载,如果您希望加载是增量的(无论是在行上还是在列上),最好让您加载的表保持不变,以便它代表“完整事实”并将“更改的行”单独保存表,假设您有一个逻辑主键来匹配它们。

于 2021-08-28T21:24:09.537 回答