表格存储提供了PutRow、GetRow、UpdateRow和DeleteRow等单行操作的接口。

如需了解表格存储各场景的应用案例,请参见适用场景

插入一行数据(PutRow)

PutRow接口用于插入一行数据,如果原来该行已经存在,会覆盖原来的一行。

PutRow写入时支持条件更新(Conditional Update),可以设置原行的存在性条件或者原行中某列的列值条件,详情请参见条件更新

  • 示例1

    写入10列属性列,每列写入1个版本,由服务端指定版本号(时间戳)。

    private static void putRow(SyncClient client, String pkValue) {
        //构造主键。
        PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
        PrimaryKey primaryKey = primaryKeyBuilder.build();
    
        RowPutChange rowPutChange = new RowPutChange(TABLE_NAME, primaryKey);
    
        //加入一些属性列。
        for (int i = 0; i < 10; i++) {
            rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(i)));
        }
    
        client.putRow(new PutRowRequest(rowPutChange));
    }
    					
  • 示例2

    写入10列属性列,每列写入3个版本,由客户端指定版本号(时间戳)。

    private static void putRow(SyncClient client, String pkValue) {
        //构造主键。
        PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
        PrimaryKey primaryKey = primaryKeyBuilder.build();
    
        RowPutChange rowPutChange = new RowPutChange(TABLE_NAME, primaryKey);
    
        //加入一些属性列。
        long ts = System.currentTimeMillis();
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 3; j++) {
                rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(j), ts + j));
            }
        }
    
        client.putRow(new PutRowRequest(rowPutChange));
    }
    					
  • 示例3

    期望原行不存在时写入。

    private static void putRow(SyncClient client, String pkValue) {
        //构造主键。
        PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
        PrimaryKey primaryKey = primaryKeyBuilder.build();
    
        RowPutChange rowPutChange = new RowPutChange(TABLE_NAME, primaryKey);
    
        //期望原行不存在。
        rowPutChange.setCondition(new Condition(RowExistenceExpectation.EXPECT_NOT_EXIST));
    
        //加入一些属性列。
        long ts = System.currentTimeMillis();
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 3; j++) {
                rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(j), ts + j));
            }
        }
    
        client.putRow(new PutRowRequest(rowPutChange));
    }
    					
  • 示例4

    期望原行存在,且Col0的值大于100时写入。

    private static void putRow(SyncClient client, String pkValue) {
        //构造主键。
        PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
        PrimaryKey primaryKey = primaryKeyBuilder.build();
    
        RowPutChange rowPutChange = new RowPutChange(TABLE_NAME, primaryKey);
    
        //期望原行存在,且Col0的值大于100时写入数据。
        Condition condition = new Condition(RowExistenceExpectation.EXPECT_EXIST);
        condition.setColumnCondition(new SingleColumnValueCondition("Col0",
                SingleColumnValueCondition.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100)));
        rowPutChange.setCondition(condition);
    
        //加入一些属性列。
        long ts = System.currentTimeMillis();
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 3; j++) {
                rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(j), ts + j));
            }
        }
    
        client.putRow(new PutRowRequest(rowPutChange));
    }
    					

读取一行数据(GetRow)

单行读GetRow接口用于读取一行数据,参数说明请参见下表。

参数 说明
PrimaryKey 读取的行的主键,必须设置。
ColumnsToGet 读取的列的集合,如果不设置,则读取所有列。
MaxVersions 最多读取多少个版本。MaxVersions与TimeRange必须至少设置一个。
TimeRange 读取的版本号的范围。MaxVersions与TimeRange必须至少设置一个。
Filter 过滤器在服务端对读取的结果再进行一次过滤。
  • 示例1

    读取一行,设置读取最新版本,设置ColumnsToGet。

            private static void getRow(SyncClient client, String pkValue) {
                //构造主键。
                PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
                primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
                PrimaryKey primaryKey = primaryKeyBuilder.build();
    
                //读取一行数据。
                SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, primaryKey);
                //设置读取最新版本。
                criteria.setMaxVersions(1);
                GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria));
                Row row = getRowResponse.getRow();
    
                System.out.println("读取完毕,结果为: ");
                System.out.println(row);
    
                //设置读取某些列。
                criteria.addColumnsToGet("Col0");
                getRowResponse = client.getRow(new GetRowRequest(criteria));
                row = getRowResponse.getRow();
    
                System.out.println("读取完毕,结果为:");
                System.out.println(row);
            }
    					
  • 示例2

    设置过滤器。

            private static void getRow(SyncClient client, String pkValue) {
                //构造主键。
                PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
                primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
                PrimaryKey primaryKey = primaryKeyBuilder.build();
    
                //读取一行数据。
                SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, primaryKey);
                //设置读取最新版本。
                criteria.setMaxVersions(1);
    
                //设置过滤器,当Col0的值为0时返回该行。
                SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("Col0",
                        SingleColumnValueFilter.CompareOperator.EQUAL, ColumnValue.fromLong(0));
                //如果不存在Col0列,也不返回。
                singleColumnValueFilter.setPassIfMissing(false);
                criteria.setFilter(singleColumnValueFilter);
    
                GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria));
                Row row = getRowResponse.getRow();
    
                System.out.println("读取完毕,结果为: ");
                System.out.println(row);
            }
    					

更新一行数据(UpdateRow)

UpdateRow接口用于更新一行数据,如果原行不存在,会新写入一行。

更新操作包括写入某列、删除某列和删除某列的某一版本。

UpdateRow接口支持条件更新(Conditional Update),可以设置原行的存在性条件或者原行中某列的列值条件,详情请参见条件更新

  • 示例1

    更新一些列,删除某列的某一版本,删除某列。

            private static void updateRow(SyncClient client, String pkValue) {
                //构造主键。
                PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
                primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
                PrimaryKey primaryKey = primaryKeyBuilder.build();
    
                RowUpdateChange rowUpdateChange = new RowUpdateChange(TABLE_NAME, primaryKey);
    
                //更新一些列。
                for (int i = 0; i < 10; i++) {
                    rowUpdateChange.put(new Column("Col" + i, ColumnValue.fromLong(i)));
                }
    
                //删除某列的某一版本。
                rowUpdateChange.deleteColumn("Col10", 1465373223000L);
    
                //删除某一列。
                rowUpdateChange.deleteColumns("Col11");
    
                client.updateRow(new UpdateRowRequest(rowUpdateChange));
            }
    
    					
  • 示例2

    设置更新的条件。

            private static void updateRow(SyncClient client, String pkValue) {
                //构造主键。
                PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
                primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
                PrimaryKey primaryKey = primaryKeyBuilder.build();
    
                RowUpdateChange rowUpdateChange = new RowUpdateChange(TABLE_NAME, primaryKey);
    
                //期望原行存在,且Col0的值大于100时更新数据。
                Condition condition = new Condition(RowExistenceExpectation.EXPECT_EXIST);
                condition.setColumnCondition(new SingleColumnValueCondition("Col0",
                        SingleColumnValueCondition.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100)));
                rowUpdateChange.setCondition(condition);
    
                //更新一些列。
                for (int i = 0; i < 10; i++) {
                    rowUpdateChange.put(new Column("Col" + i, ColumnValue.fromLong(i)));
                }
    
                //删除某列的某一版本。
                rowUpdateChange.deleteColumn("Col10", 1465373223000L);
    
                //删除某一列。
                rowUpdateChange.deleteColumns("Col11");
    
                client.updateRow(new UpdateRowRequest(rowUpdateChange));
            }
    					

删除一行数据(DeleteRow)

DeleteRow接口用于删除一行。

DeleteRow接口支持条件更新(Conditional Update),可以设置原行的存在性条件或者原行中某列的列值条件,详情请参见条件更新

  • 示例1

    删除一行。

            private static void deleteRow(SyncClient client, String pkValue) {
                //构造主键。
                PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
                primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
                PrimaryKey primaryKey = primaryKeyBuilder.build();
    
                RowDeleteChange rowDeleteChange = new RowDeleteChange(TABLE_NAME, primaryKey);
    
                client.deleteRow(new DeleteRowRequest(rowDeleteChange));
            }
    					
  • 示例2

    设置删除条件。

            private static void deleteRow(SyncClient client, String pkValue) {
                //构造主键。
                PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
                primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, 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));
            }