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

时间:2018-04-09 18:40:50

标签: database google-cloud-platform scalability google-cloud-spanner

我的目标是在我有条件查询的批处理中删除recrods:

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,因此是扳手java客户端)

2 个答案:

答案 0 :(得分:1)

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

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

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

中返回的主键

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

答案 1 :(得分:0)

我发现可以像这样合并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