我想清除表中的所有值。它有几个二级索引。我试图通过提交与Mutation.delete("MyTable", KeySet.all())
的交易来做到这一点(请参阅此处的文档(。但是我得到了一个错误:
error:INVALID_ARGUMENT: io.grpc.StatusRuntimeException: INVALID_ARGUMENT: 事务包含太多突变。
如何有效地清除表内容?
Cloud Spanner 不支持这样的截断命令。如果您的表没有二级索引,则可以在删除中指定 KeySet.all((,如上文所述,但如果表具有二级索引并且很大,则此操作可能会失败。
执行所需操作的最佳方法是发出包含以下语句的 updateDdl RPC:
1( 对于 MyTable 上的每个二级索引,包含相应的 DROP INDEX
语句
2( DROP TABLE MyTable
3( 如有必要,分别通过 CREATE TABLE
和 CREATE INDEX
语句重新创建表和索引。
请注意,允许并鼓励您将所有这些语句包含在单个 updateDdl
RPC 中。这样做的好处是它为您提供了原子("全有或全无"(语义。