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 进行连接。