【问题标题】:Does Cloud Spanner support a TRUNCATE TABLE command?Cloud Spanner 是否支持 TRUNCATE TABLE 命令?
【发布时间】:2017-09-02 03:46:57
【问题描述】:
我想清除表中的所有值。它有一些二级索引。我尝试通过使用Mutation.delete("MyTable", KeySet.all()) 提交事务来做到这一点(请参阅文档here)。但我得到一个错误:
错误:INVALID_ARGUMENT:io.grpc.StatusRuntimeException:INVALID_ARGUMENT:事务包含太多突变。
如何有效清除表格内容?
【问题讨论】:
标签:
google-cloud-platform
google-cloud-spanner
【解决方案1】:
Cloud Spanner 不支持这样的截断命令。如果你的表没有二级索引,那么你可以在 Delete 中指定 KeySet.all() ,但如果你的表有二级索引并且很大,这可能会失败。
做你想做的最好的方法是发出一个updateDdl RPC,包括以下语句:
1) 对于 MyTable 上的每个二级索引,包含相应的 DROP INDEX 语句
2)DROP TABLE MyTable
3) 如有必要,分别通过CREATE TABLE 和CREATE INDEX 语句重新创建表和索引。
请注意,允许并鼓励您将所有这些语句包含在单个 updateDdl RPC 中。这样做的好处是它为您提供了原子(“全有或全无”)语义。