我的目标是在我有条件查询的批处理中删除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客户端)
答案 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