Spanner - 从 table 中删除一行或所有行
Spanner - delete one row or all rows from a table
我想从扳手中删除一行或所有行table。 table 的主键是 int64。我不想删除 table 并重新创建它。我使用 google 提供的 Java 教程作为指南(我不是 Java 程序员 - 自产品首次问世以来一直是 MS SQL 服务器开发人员)。这是我的代码。没有行被删除,也没有抛出错误。
static void perfmonTestDelete(DatabaseClient dbClient) {
LocalDateTime datetimeStart = LocalDateTime.now();
LocalDateTime datetimeEnd;
Mutation.delete("productPerfmon",KeySet.all());
datetimeEnd = LocalDateTime.now();
long diffInSeconds = java.time.Duration.between(datetimeStart, datetimeEnd).getSeconds();
System.out.println("DurationInSeconds:" + diffInSeconds);
}
这是在我要删除的 table 中填充 10 行的代码:
static void perfmonTest(DatabaseClient dbClient) {
LocalDateTime datetimeStart = LocalDateTime.now();
LocalDateTime datetimeEnd;
List<Mutation> mutations = new ArrayList<>();
for (int i = 0; i < 10; i++) {
mutations.add(Mutation.newInsertBuilder("productPerfmon")
.set("product_id")
.to(i)
.set("product_code")
.to("test")
.set("product_code_v")
.to("test_v")
.build());
}
dbClient.write(mutations);
datetimeEnd = LocalDateTime.now();
long diffInSeconds = java.time.Duration.between(datetimeStart, datetimeEnd).getSeconds();
System.out.println("DurationInSeconds:" + diffInSeconds);
}
感谢任何帮助。
要删除一行或多行,您需要使用 singleKey or keyRange 选择器:
SpannerOptions options = SpannerOptions.newBuilder().build();
Spanner spanner = options.getService();
DatabaseClient dbClient = spanner.getDatabaseClient(DatabaseId.of(
options.getProjectId(), "InstanceId", "databaseName"));
List<Mutation> mutations = new ArrayList<>();
// Single row by key
mutations.add(Mutation.delete("tableName",
KeySet.singleKey(Key.newBuilder().append("Key").build())));
// Multiple rows by range
mutations.add(Mutation.delete("tableName",
KeySet.range(
KeyRange.newBuilder()
.setStart(Key.newBuilder().append("StartKeyIncl").build())
.setEnd(Key.newBuilder().append("EndKeyNotIncl").build())
.build())));
dbClient.write(mutations);
要删除 table 中的所有行,您可以执行以下操作:
List<Mutation> mutations = new ArrayList<>();
mutations.add(Mutation.delete("tableName", KeySet.all()));
dbClient.write(mutations);
文档指出 Google Spanner 符合 ANSI SQL-2011。但是我没有在 Cloud Spanner 中找到任何 DELETE、UPDATE 和 INSERT 的示例。
我对 SQL-2011 的理解是,它肯定包括对 DELETE、INSERT 和 UPDATE 的支持。
在这种情况下,添加行或删除行将成为单个 SQL 语句,并且 Java 客户端使用 JDBC 进行连接。
我想从扳手中删除一行或所有行table。 table 的主键是 int64。我不想删除 table 并重新创建它。我使用 google 提供的 Java 教程作为指南(我不是 Java 程序员 - 自产品首次问世以来一直是 MS SQL 服务器开发人员)。这是我的代码。没有行被删除,也没有抛出错误。
static void perfmonTestDelete(DatabaseClient dbClient) {
LocalDateTime datetimeStart = LocalDateTime.now();
LocalDateTime datetimeEnd;
Mutation.delete("productPerfmon",KeySet.all());
datetimeEnd = LocalDateTime.now();
long diffInSeconds = java.time.Duration.between(datetimeStart, datetimeEnd).getSeconds();
System.out.println("DurationInSeconds:" + diffInSeconds);
}
这是在我要删除的 table 中填充 10 行的代码:
static void perfmonTest(DatabaseClient dbClient) {
LocalDateTime datetimeStart = LocalDateTime.now();
LocalDateTime datetimeEnd;
List<Mutation> mutations = new ArrayList<>();
for (int i = 0; i < 10; i++) {
mutations.add(Mutation.newInsertBuilder("productPerfmon")
.set("product_id")
.to(i)
.set("product_code")
.to("test")
.set("product_code_v")
.to("test_v")
.build());
}
dbClient.write(mutations);
datetimeEnd = LocalDateTime.now();
long diffInSeconds = java.time.Duration.between(datetimeStart, datetimeEnd).getSeconds();
System.out.println("DurationInSeconds:" + diffInSeconds);
}
感谢任何帮助。
要删除一行或多行,您需要使用 singleKey or keyRange 选择器:
SpannerOptions options = SpannerOptions.newBuilder().build();
Spanner spanner = options.getService();
DatabaseClient dbClient = spanner.getDatabaseClient(DatabaseId.of(
options.getProjectId(), "InstanceId", "databaseName"));
List<Mutation> mutations = new ArrayList<>();
// Single row by key
mutations.add(Mutation.delete("tableName",
KeySet.singleKey(Key.newBuilder().append("Key").build())));
// Multiple rows by range
mutations.add(Mutation.delete("tableName",
KeySet.range(
KeyRange.newBuilder()
.setStart(Key.newBuilder().append("StartKeyIncl").build())
.setEnd(Key.newBuilder().append("EndKeyNotIncl").build())
.build())));
dbClient.write(mutations);
要删除 table 中的所有行,您可以执行以下操作:
List<Mutation> mutations = new ArrayList<>();
mutations.add(Mutation.delete("tableName", KeySet.all()));
dbClient.write(mutations);
文档指出 Google Spanner 符合 ANSI SQL-2011。但是我没有在 Cloud Spanner 中找到任何 DELETE、UPDATE 和 INSERT 的示例。
我对 SQL-2011 的理解是,它肯定包括对 DELETE、INSERT 和 UPDATE 的支持。
在这种情况下,添加行或删除行将成为单个 SQL 语句,并且 Java 客户端使用 JDBC 进行连接。