赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 表格存储
  4. 操作指南
  5. 宽表模型
  6. 基础数据操作
  7. 删除数据

删除数据

  • 基础数据操作
  • 发布于 2025-04-22
  • 0 次阅读
文档编辑
文档编辑

表格存储提供了DeleteRow接口用于删除单行数据以及BatchWriteRow接口用于批量删除数据。

说明

组成表的基本单位为行,行由主键和属性列组成。其中主键是必须的,且每一行的主键列的名称和类型相同;属性不是必须的,且每一行的属性可以不同。更多信息,请参见宽表模型介绍。

注意事项

  • 删除数据时,设置的主键个数和类型必须与数据表的主键个数和类型一致。

  • 删除表数据,将导致数据不可恢复,请谨慎操作。

删除单行数据

调用DeleteRow接口删除一行数据。如果删除的行不存在,则不会发生任何变化。

删除单行数据时,您可以使用条件更新功能限制在满足指定条件时删除数据。更多信息,请参见条件更新。

批量删除数据

获取到要删除数据的主键信息后,调用BatchWriteRow接口根据主键信息批量删除数据。

说明

如果要删除指定时间之前的数据,您可以使用数据生命周期功能进行数据删除。更多信息,请参见数据生命周期(TTL)。

批量删除数据时,您可以进行如下配置。

  • 一次请求中支持删除多张表中的数据。

  • 使用条件更新功能限制在满足指定条件时才能删除数据。更多信息,请参见条件更新。

使用方式

使用控制台

您可以使用控制台删除单行数据或者批量删除数据。

  1. 登录表格存储控制台。

  2. 在概览页面,单击实例操作列的实例管理。

  3. 在实例详情页签的数据表列表区域,单击数据表名称。

  4. 在数据管理页签,选择单行或者多行要删除的数据后,单击页面下方的批量删除。

  5. 在批量删除对话框,单击确定。

使用命令行工具CLI

您可以使用命令行工具执行delete命令删除一行数据。

以下示例用于删除第一主键列值为"86",第二主键列值为6771的行数据。

delete --pk '["86", 6771]'

使用SDK

您可以使用Java SDK、Go SDK、Python SDK、Node.js SDK、.NET SDK和PHP SDK删除数据。此处以Java SDK为例介绍删除数据的使用。

删除单行数据

  • 删除一行数据

    以下示例用于删除数据表中的指定行数据。

    private static void deleteRow(SyncClient client, String pkValue) {
        //构造主键。
        PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(pkValue));
        PrimaryKey primaryKey = primaryKeyBuilder.build();
        //设置数据表名称。
        RowDeleteChange rowDeleteChange = new RowDeleteChange("<TABLE_NAME>", primaryKey);
    
        client.deleteRow(new DeleteRowRequest(rowDeleteChange));
    }                    
  • 删除数据时使用条件

    以下示例用于当原行存在且Col0列的值大于100时删除数据表中的指定行。

    private static void deleteRow(SyncClient client, String pkValue) {
        //构造主键。
        PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(pkValue));
        PrimaryKey primaryKey = primaryKeyBuilder.build();
        //设置数据表名称。
        RowDeleteChange rowDeleteChange = new RowDeleteChange("<TABLE_NAME>", primaryKey);
    
        //设置条件更新,期望原行存在且Col0列的值大于100时删除该行。
        Condition condition = new Condition(RowExistenceExpectation.EXPECT_EXIST);
        condition.setColumnCondition(new SingleColumnValueCondition("Col0",
                SingleColumnValueCondition.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100)));
        rowDeleteChange.setCondition(condition);
    
        client.deleteRow(new DeleteRowRequest(rowDeleteChange));
    }                   

批量删除数据

  1. 删除数据前,您需要根据实际选择合适的方式查询要删除数据的主键信息。

    • 如果要删除指定主键范围内的数据,请调用GetRange接口,查询指定主键范围内的数据,并获取待删除数据的主键信息。具体操作,请参见读取数据。

    • 如果要删除满足指定条件的数据,请创建多元索引后,使用多元索引查询满足指定条件的数据,并获取待删除数据的主键信息。具体操作,请参见创建多元索引和使用SDK通过多元索引查询数据。

  2. 获取要删除数据的主键信息后,调用BatchWriteRow接口根据主键信息批量删除数据。具体操作,请参见批量写入数据。

    以下示例用于删除一个数据表中主键列pk值为"pk"的行数据以及删除另一个数据表中第一列主键pk1值为"pk1"且第二列主键pk2值为"pk2"的行数据。

    private static void batchWriteRow(SyncClient client) {    
        BatchWriteRowRequest batchWriteRowRequest = new BatchWriteRowRequest();
    
        //构造rowDeleteChange1。
        PrimaryKeyBuilder pk1Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        pk1Builder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("pk"));
        //设置数据表名称。
        RowDeleteChange rowDeleteChange1 = new RowDeleteChange("<TABLE_NAME1>", pk1Builder.build());
        //添加到batch操作中。
        batchWriteRowRequest.addRowChange(rowDeleteChange1);
    
        //构造rowDeleteChange2。
        PrimaryKeyBuilder pk2Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        pk2Builder.addPrimaryKeyColumn("pk1", PrimaryKeyValue.fromString("pk1"));
        pk2Builder.addPrimaryKeyColumn("pk2", PrimaryKeyValue.fromString("pk2"));
        //设置数据表名称。
        RowDeleteChange rowDeleteChange2 = new RowDeleteChange("<TABLE_NAME2>", pk2Builder.build());
        //添加到batch操作中。
        batchWriteRowRequest.addRowChange(rowDeleteChange2);
    
        BatchWriteRowResponse response = client.batchWriteRow(batchWriteRowRequest);
    
        System.out.println("是否全部成功:" + response.isAllSucceed());
        if (!response.isAllSucceed()) {
            for (BatchWriteRowResponse.RowResult rowResult : response.getFailedRows()) {
                System.out.println("失败的行:" + batchWriteRowRequest.getRowChange(rowResult.getTableName(), rowResult.getIndex()).getPrimaryKey());
                System.out.println("失败原因:" + rowResult.getError());
            }
            /**
             * 可以通过createRequestForRetry方法再构造一个请求对失败的行进行重试。此处只给出构造重试请求的部分。
             * 推荐的重试方法是使用SDK的自定义重试策略功能,支持对batch操作的部分行错误进行重试。设置重试策略后,调用接口处无需增加重试代码。
             */
            BatchWriteRowRequest retryRequest = batchWriteRowRequest.createRequestForRetry(response.getFailedRows());
        }
    }

计费说明

表格存储包括VCU模式(原预留模式)和CU模式(原按量模式)两种计费模式。使用不同的计费模式时,计算部分的计费方式不同。

计费模式

计算部分的计费说明

VCU模式(原预留模式)

以包年包月方式预先购买计算能力。计算能力中涵盖数据删除的计算消耗。

CU模式(原按量模式)

根据实际计算消耗折算成CU进行计费。同时根据实例类型不同,计费时需要区分按量读写CU以及预留读写CU。

说明

关于实例类型和CU的更多信息,请分别参见实例和读写吞吐量。

DeleteRow操作消耗的读CU和写CU说明如下:

  • 消耗的写CU为删除的行主键数据大小除以4 KB向上取整。

  • 如果指定条件检查不为IGNORE,则消耗行主键数据大小除以4 KB向上取整的读CU。

  • 如果操作不满足指定的行存在性检查条件,则操作失败并消耗1单位写CU。

相关文章

写入数据 2025-04-22 14:43

表格存储提供了Pu

读取数据 2025-04-22 14:43

表格存储提供了Ge

删除数据 2025-04-22 14:43

表格存储提供了DeleteRow接口用于删除单行数据以及BatchWriteRow接口用于批量删除数据。

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号