有没有一种方法可以写一批记录,并期望某些记录会失败?

时间:2019-11-13 05:06:26

标签: google-cloud-spanner

说系统中断了;由于某些原因,每100页访问1页的记录未进入您的Spanner实例。可能是质量检查人员的错。无论如何,您拥有不同的数据存储,可以从中存储到Spanner。大!假设您有大量记录,可以将它们分批处理,也许一次发送1000条。但是,这1000个扳手中可能已有990个,因此您的插入操作将失败。您可以一个接一个地上传,但是为此您付出了巨大的努力。您甚至可以尝试一些自适应的批处理大小,但是最终变得更加复杂。

有没有简单的方法可以解决此问题?我想要dbClient.writeAtLeastOnceIgnoreErrors(Iterable<Mutation>),但我认为没有这种可用的东西。我错了吗?

1 个答案:

答案 0 :(得分:2)

如果我正确理解了您的问题,那么您希望能够将1000个突变(插入)发送给Spanner,同时知道这1000条记录中有许多已经存在于Spanner中。最简单的方法是使用像这样的InsertOrUpdate突变:

Mutation m = Mutation.newInsertOrUpdateBuilder("YOUR_TABLE").set("COL1").to("some_val").build();
dbClient.writeAtLeastOnce(m);

InsertOrUpdate将完全按照您的期望进行操作,即仅插入不存在的记录,并更新已经存在的记录而不会返回任何错误。您必须为表中的所有NOT NULL列提供一个值。