【问题标题】:Spanner - delete one row or all rows from a tableSpanner - 从表中删除一行或所有行
【发布时间】:2018-07-31 08:13:38
【问题描述】:

我想从扳手表中删除一行或所有行。表的主键是 int64。我不想删除表并重新创建它。我使用 google 提供的 Java 教程作为指导(我不是 Java 程序员 - 自产品首次问世以来一直是 MS SQL Server 开发人员)。这是我的代码。没有行被删除,也没有抛出错误。

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);

} 

这是我要从中删除的表中填充 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);

} 

感谢任何帮助。

【问题讨论】:

    标签: google-cloud-platform google-cloud-spanner


    【解决方案1】:

    要删除一行或多行,您需要使用singleKeykeyRange 选择器:

    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);
    

    要删除表中的所有行,您可以这样做:

    List<Mutation> mutations = new ArrayList<>();
    mutations.add(Mutation.delete("tableName", KeySet.all()));
    dbClient.write(mutations);
    

    【讨论】:

      【解决方案2】:

      文档声明 Google Spanner 符合 ANSI SQL-2011。但我没有在 Cloud Spanner 中找到任何 DELETE、UPDATE 和 INSERT 示例。

      我对 SQL-2011 的理解是,它肯定包含对 DELETE、INSERT 和 UPDATE 的支持。

      在这种情况下,添加或删除行将成为一条 SQL 语句,并且 Java 客户端使用 JDBC 进行连接。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      • 2011-12-20
      • 2013-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多