Cloud Spanner 是否支持 TRUNCATE TABLE 命令?

Does Cloud Spanner support a TRUNCATE TABLE command?

我想清除 table 中的所有值。它有一些二级索引。我试图通过使用 Mutation.delete("MyTable", KeySet.all()) 提交事务来做到这一点(参见文档 here)。但是我得到一个错误:

error:INVALID_ARGUMENT: io.grpc.StatusRuntimeException: INVALID_ARGUMENT: The transaction contains too many mutations.

如何有效清除我的 table 内容?

Cloud Spanner 不支持这样的截断命令。如果您的 table 没有二级索引,那么您可以在 Delete 中指定 KeySet.all() 如上所述,但是如果您的 table 有二级索引并且很大,这可能会失败。

做你想做的最好的方法是发出一个 updateDdl RPC,包括以下语句:

1) 对于 MyTable 上的每个二级索引,包含相应的 DROP INDEX 语句

2) DROP TABLE MyTable

3) 如有必要,分别通过 CREATE TABLECREATE INDEX 语句重新创建 table 和索引。

请注意,您被允许并鼓励将所有这些语句包含在单个 updateDdl RPC 中。这样做的好处是它给你原子("all-or-nothing")语义。