BigQuery在向表中添加新列后,从json文件批量更新现有的表行



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

现在我想在现有的2M行中填充数据,但只有这三个新添加的列具有来自json文件的实际数据。如何批量更新表,使现有列值保持不变,只更新新列值?

注意:表已经启用了流缓冲并且表没有被分区。

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

由于加载数据是免费的,我将使用WRITE_TRUNCATE选项重新加载整个表以覆盖现有数据。

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

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

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

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

对于你未来的数据加载,如果你希望加载是增量的(无论是对行还是对列),最好你可以不动你的加载表,这样它就代表了"完整的事实",并保持"改变的行"在一个单独的表中,假设你有一个逻辑主键来匹配它们。

最新更新