将 LIMIT <chunk_size> 放入 google 云扳手删除查询

put LIMIT <chunk_size> in google cloud spanner delete query

我的目标是批量删除有条件查询的记录:

while(select * from <table_name> where <condition_1> limit 1;)存在,

delete from <table_name> where <condition_1> limit <chunk_size>;

使用 chunk_size 避免在一次调用中删除大量行。

因为 spanner 使用 Mutation.delete(tableName, keySet) 而不是像 delete from <table_name> where . . . limit <chunk_size> 这样的 DML 查询来删除。我想知道是否有扳手方式来放置 limit <chunk_size> 或替代方式来实现我上面提到的目标。

(我使用的是 scala,因此是 spanner java 客户端)

要根据非关键条件删除行,您目前需要分两步执行此操作。

首先运行一个查询:Select <PK columns> FROM <table_name> WHERE <condition_1> LIMIT <return_qualifying_rows_count>;

然后在第二步中,您在 Mutation.delete(tableName, keySet) 函数

中使用返回的主键

如果要批量删除,请将<return_qualifying_rows_count>设置为要批量删除的行数。一次调用可以删除的行数没有限制。

我发现可以将 select ... limit ...delete from 组合起来,像这样

delete from TABLE where PK in (select PK from TABLE where CONDITION=VALUE limit COUNT)

例如:

delete from actor where id in (select id from actor where gender = "man" limit 99)

请记住,在此方法中 COUNT 不应大于 10000,因为此方法的扳手配额为 20000,参考此处:https://cloud.google.com/spanner/quotas#limits_for_creating_reading_updating_and_deleting_data