我有一个bigQuery表,它有大约200万行从JSON文件中加载。JSON文件中的实际字段为10,但表中有7列与初始DDL相同。现在,我修改了表,并添加了其余三列。更改后,新添加的列中的值将被填充为NULL。
现在,我想在现有的200万行中回填数据,但只有这三个新添加的列具有来自json文件的实际数据。如何大容量更新表,使现有列值保持不变,并且只更新新列值。
注意:表启用了流缓冲区,并且表没有分区。
发布于 2021-08-28 21:24:09
现在,我想在现有的200万行中回填数据,但只对这三个新添加的列使用json文件中的实际数据进行回填。
因为加载数据是免费的,所以我会用WRITE_TRUNCATE
选项重新加载整个表,以覆盖现有的数据。
你说的话让我困惑,因为:
表中被以某种方式改变了,你如何期望JSON文件中的行在每行的基础上与修改后的数据匹配(以回填丢失的列)?
-更新:根据注释,似乎已以某种方式修改了加载的行。然后:
对于现有数据,如果没有一个(逻辑)主键可用于匹配行,则从技术上讲,“匹配和更新”是不可能的。如果您的现有数据确实有一个逻辑主键,并且您不介意成本,您可以将完整表加载到一个临时表中,然后使用DML来回填缺少的列。
对于未来的数据加载,如果您希望加载是增量的(无论是在行上还是在列上),最好是让加载的表保持不变,以便它表示“完全事实”,并将“更改后的行”保存在一个单独的表中,前提是您有一个与之匹配的逻辑主键。
https://stackoverflow.com/questions/68955350
复制相似问题