BigQuery架构错误,尽管正在更新架构



我试图同时运行多个作业,以便将大约700K的记录加载到单个BigQuery表中。我的代码(Java)根据is job的记录创建模式,并在需要时更新BigQuery模式。

工作流程如下:

  1. 单个作业创建表并设置(初始)模式
  2. 对于每个装载作业,我们从作业的记录中创建模式。然后,我们从BigQuery中提取现有的表模式,如果它不是与作业相关联的模式的超集,我们将使用新的合并模式更新该模式。最后一部分(从提取现有架构开始)是同步的(使用锁)——一次只有一个作业执行。模式的更新使用update方法,只有在客户端更新方法返回后才会释放锁

我希望使用此工作流避免遇到架构更新错误。我假设,一旦客户端从更新作业返回,那么表就会更新,并且正在进行的作业不会因模式更新而受到损害。

尽管如此,我仍然会时不时地收到模式更新错误。更新方法是原子的吗?我如何知道模式实际更新的时间?

BigQuery中的更新是原子的,但它们在作业结束时应用。当作业完成时,它会确保模式是等效的。如果在作业运行时进行了架构更新,则此检查将失败。

我们可能应该确保模式是兼容的,而不是等效的。如果您使用兼容的模式(即,您有表模式的一个子集)进行追加,则应该会成功,但目前BigQuery不允许这样做。我将提交一个错误。

最新更新