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

BigQuery bulk update existing table rows from json file after adding new columns to the table

我有一个 bigQuery table,它有大约 200 万行,这些行是从 JSON 文件加载的。 JSON 文件中的实际字段为 10,但 table 根据初始 DDL 有 7 列。现在我更改了 table 并添加了剩余的三列。修改后,新添加的列中的值填充为NULL。

现在我想用 json 文件中的实际数据回填现有 2M 行中的数据,但仅针对这三个新添加的列。我如何批量更新 table 以便现有列值保持不变并且仅更新新列值。

注意:Table 启用了流缓冲区并且 table 未分区。

Now I want to backfill the data in existing 2M rows but for only those three newly added columns with actual data from json file.

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

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

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

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

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

对于您未来的数据加载,如果您希望加载是增量的(在行上或在列上),最好让您加载的 table 保持不变,这样它代表 'full fact'并将 'altered rows' 保存在单独的 table 中,假设您有一个逻辑主键来匹配它们。