全部产品
表格存储

单行数据操作

更新时间:2017-06-07 13:26:11   分享:   

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

插入一行数据(PutRow)

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

PutRow 写入时支持条件更新(Conditional Update),可以设置原行的存在性条件或者原行中某列的列值条件,条件更新一章对此有专门介绍。

示例 1

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

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

示例 2

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

  1. private static void putRow(SyncClient client, String pkValue) {
  2. // 构造主键
  3. PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
  4. primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
  5. PrimaryKey primaryKey = primaryKeyBuilder.build();
  6. RowPutChange rowPutChange = new RowPutChange(TABLE_NAME, primaryKey);
  7. //加入一些属性列
  8. long ts = System.currentTimeMillis();
  9. for (int i = 0; i < 10; i++) {
  10. for (int j = 0; j < 3; j++) {
  11. rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(j), ts + j));
  12. }
  13. }
  14. client.putRow(new PutRowRequest(rowPutChange));
  15. }

示例 3

期望原行不存在时写入。

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

示例 4

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

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

读取一行数据(GetRow)

单行读 GetRow 接口用于读取一行数据,有以下参数:

  • PrimaryKey:必须设置,为要读取的行的主键。

  • ColumnsToGet:要读取的列的集合,若不设置,则读取所有列。

  • MaxVersions:最多读取多少个版本。MaxVersions 与 TimeRange 必须至少设置一个。

  • TimeRange: 要读取的版本号的范围。MaxVersions 与 TimeRange 必须至少设置一个。

  • Filter:过滤器。过滤器在服务端对读取的结果再进行一次过滤。

示例 1

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

  1. private static void getRow(SyncClient client, String pkValue) {
  2. // 构造主键
  3. PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
  4. primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
  5. PrimaryKey primaryKey = primaryKeyBuilder.build();
  6. // 读一行
  7. SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, primaryKey);
  8. // 设置读取最新版本
  9. criteria.setMaxVersions(1);
  10. GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria));
  11. Row row = getRowResponse.getRow();
  12. System.out.println("读取完毕, 结果为: ");
  13. System.out.println(row);
  14. // 设置读取某些列
  15. criteria.addColumnsToGet("Col0");
  16. getRowResponse = client.getRow(new GetRowRequest(criteria));
  17. row = getRowResponse.getRow();
  18. System.out.println("读取完毕, 结果为: ");
  19. System.out.println(row);
  20. }

示例 2

设置过滤器。

  1. private static void getRow(SyncClient client, String pkValue) {
  2. // 构造主键
  3. PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
  4. primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
  5. PrimaryKey primaryKey = primaryKeyBuilder.build();
  6. // 读一行
  7. SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, primaryKey);
  8. // 设置读取最新版本
  9. criteria.setMaxVersions(1);
  10. // 设置过滤器, 当Col0的值为0时返回该行.
  11. SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("Col0",
  12. SingleColumnValueFilter.CompareOperator.EQUAL, ColumnValue.fromLong(0));
  13. // 如果不存在Col0这一列, 也不返回.
  14. singleColumnValueFilter.setPassIfMissing(false);
  15. criteria.setFilter(singleColumnValueFilter);
  16. GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria));
  17. Row row = getRowResponse.getRow();
  18. System.out.println("读取完毕, 结果为: ");
  19. System.out.println(row);
  20. }

更新一行数据(UpdateRow)

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

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

UpdateRow 接口支持条件更新(Conditional Update),可以设置原行的存在性条件或者原行中某列的列值条件,条件更新一章对此有专门介绍。

示例 1

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

  1. private static void updateRow(SyncClient client, String pkValue) {
  2. // 构造主键
  3. PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
  4. primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
  5. PrimaryKey primaryKey = primaryKeyBuilder.build();
  6. RowUpdateChange rowUpdateChange = new RowUpdateChange(TABLE_NAME, primaryKey);
  7. // 更新一些列
  8. for (int i = 0; i < 10; i++) {
  9. rowUpdateChange.put(new Column("Col" + i, ColumnValue.fromLong(i)));
  10. }
  11. // 删除某列的某一版本
  12. rowUpdateChange.deleteColumn("Col10", 1465373223000L);
  13. // 删除某一列
  14. rowUpdateChange.deleteColumns("Col11");
  15. client.updateRow(new UpdateRowRequest(rowUpdateChange));
  16. }

示例 2

设置更新的条件。

  1. private static void updateRow(SyncClient client, String pkValue) {
  2. // 构造主键
  3. PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
  4. primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
  5. PrimaryKey primaryKey = primaryKeyBuilder.build();
  6. RowUpdateChange rowUpdateChange = new RowUpdateChange(TABLE_NAME, primaryKey);
  7. // 期望原行存在, 且Col0的值大于100时更新
  8. Condition condition = new Condition(RowExistenceExpectation.EXPECT_EXIST);
  9. condition.setColumnCondition(new SingleColumnValueCondition("Col0",
  10. SingleColumnValueCondition.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100)));
  11. rowUpdateChange.setCondition(condition);
  12. // 更新一些列
  13. for (int i = 0; i < 10; i++) {
  14. rowUpdateChange.put(new Column("Col" + i, ColumnValue.fromLong(i)));
  15. }
  16. // 删除某列的某一版本
  17. rowUpdateChange.deleteColumn("Col10", 1465373223000L);
  18. // 删除某一列
  19. rowUpdateChange.deleteColumns("Col11");
  20. client.updateRow(new UpdateRowRequest(rowUpdateChange));
  21. }

删除一行数据(DeleteRow)

DeleteRow 接口用于删除一行。

DeleteRow 接口支持条件更新(Conditional Update),可以设置原行的存在性条件或者原行中某列的列值条件,条件更新一章对此有专门介绍。

示例 1

删除一行。

  1. private static void deleteRow(SyncClient client, String pkValue) {
  2. // 构造主键
  3. PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
  4. primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
  5. PrimaryKey primaryKey = primaryKeyBuilder.build();
  6. RowDeleteChange rowDeleteChange = new RowDeleteChange(TABLE_NAME, primaryKey);
  7. client.deleteRow(new DeleteRowRequest(rowDeleteChange));
  8. }

示例 2

设置删除条件。

  1. private static void deleteRow(SyncClient client, String pkValue) {
  2. // 构造主键
  3. PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
  4. primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
  5. PrimaryKey primaryKey = primaryKeyBuilder.build();
  6. RowDeleteChange rowDeleteChange = new RowDeleteChange(TABLE_NAME, primaryKey);
  7. // 期望原行存在, 且Col0的值大于100时删除
  8. Condition condition = new Condition(RowExistenceExpectation.EXPECT_EXIST);
  9. condition.setColumnCondition(new SingleColumnValueCondition("Col0",
  10. SingleColumnValueCondition.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100)));
  11. rowDeleteChange.setCondition(condition);
  12. client.deleteRow(new DeleteRowRequest(rowDeleteChange));
  13. }
本文导读目录
本文导读目录
以上内容是否对您有帮助?