全部产品
阿里云办公

单行数据操作

更新时间:2018-03-08 20:37:51

Table Store提供了PutRow,GetRow,UpdateRow和DeleteRow等单行操作的接口。

说明:以下操作为同步接口的示例,异步接口的操作请参见异步接口

插入一行数据(PutRow)

PutRow 接口用于插入一行数据。若该行不存在则插入,如果该行已经存在则覆盖(即原行的所有列以及所有版本的列值都被删除)。

示例

  1. PutRowRequest req;
  2. {
  3. RowPutChange& chg = req.mutableRowChange();
  4. chg.mutableTable() = "YourTable";
  5. {
  6. // set primary key of the row to put
  7. PrimaryKey& pkey = chg.mutablePrimaryKey();
  8. pkey.append() = PrimaryKeyColumn(
  9. "pkey",
  10. PrimaryKeyValue::toStr("pkey-value"));
  11. }
  12. {
  13. // set attributes of the row to put
  14. IVector<Attribute>& attrs = chg.mutableAttributes();
  15. attrs.append() = Attribute(
  16. "attr",
  17. AttributeValue::toInteger(123));
  18. }
  19. }
  20. PutRowResponse resp;
  21. Optional<OTSError> res = client.putRow(resp, req);

读取一行数据(GetRow)

单行读 GetRow 接口用于读取一行数据。

指定表名和一行的主键,读取的结果可能有两种:

  • 若该行存在,则GetRowResponse对象返回该行的各主键列以及属性列。

  • 若该行不存在,则GetRowResponse对象不含有行,并且不会报错。

示例

  1. GetRowRequest req;
  2. {
  3. PointQueryCriterion& query = req.mutableQueryCriterion();
  4. query.mutableTable() = YourTable”;
  5. {
  6. PrimaryKey& pkey = query.mutablePrimaryKey();
  7. pkey.append() = PrimaryKeyColumn(
  8. "pkey",
  9. PrimaryKeyValue::toStr("some_key")); // 假设主键只有一列,并且类型为字符串
  10. }
  11. query.mutableMaxVersions().reset(1);
  12. }
  13. GetRowResponse resp;
  14. Optional<OTSError> res = client.getRow(resp, req);

更新一行数据(UpdateRow)

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

更新操作有以下四种情况:

  • 不指定版本写入一个列值,表格存储服务端会自动补上一个版本号,保证此种情况下版本号的递增。

  • 指定版本写入一个列值,若该列原先没有该版本列值,则插入数据,否则覆盖原值。

  • 删除指定版本的列值。

  • 删除整个列的所有版本列值。

示例

  1. UpdateRowRequest req;
  2. {
  3. RowUpdateChange& chg = req.mutableRowChange();
  4. chg.mutableTable() = "YourTable";
  5. {
  6. // set primary key of the row to put
  7. PrimaryKey& pkey = chg.mutablePrimaryKey();
  8. pkey.append() = PrimaryKeyColumn(
  9. "pkey",
  10. PrimaryKeyValue::toStr("pkey"));
  11. }
  12. {
  13. // insert a value without specifying version
  14. RowUpdateChange::Update& up = chg.mutableUpdates().append();
  15. up.mutableType() = RowUpdateChange::Update::kPut;
  16. up.mutableAttrName() = "attr0";
  17. up.mutableAttrValue().reset(AttributeValue::toStr("new value without specifying version"));
  18. }
  19. {
  20. // insert a value with version
  21. RowUpdateChange::Update& up = chg.mutableUpdates().append();
  22. up.mutableType() = RowUpdateChange::Update::kPut;
  23. up.mutableAttrName() = "attr1";
  24. up.mutableAttrValue().reset(AttributeValue::toStr("new value with version"));
  25. up.mutableTimestamp().reset(UtcTime::now());
  26. }
  27. {
  28. // delete a value with specific version
  29. RowUpdateChange::Update& up = chg.mutableUpdates().append();
  30. up.mutableType() = RowUpdateChange::Update::kDelete;
  31. up.mutableAttrName() = "attr2";
  32. up.mutableTimestamp().reset(UtcTime::now());
  33. }
  34. {
  35. // delete all values of a attribute column
  36. RowUpdateChange::Update& up = chg.mutableUpdates().append();
  37. up.mutableType() = RowUpdateChange::Update::kDeleteAll;
  38. up.mutableAttrName() = "attr3";
  39. }
  40. }
  41. UpdateRowResponse resp;
  42. Optional<OTSError> res = client.updateRow(resp, req);

删除一行数据(DeleteRow)

DeleteRow 接口用于删除一行。无论该行存在与否都不会报错。

示例

  1. DeleteRowRequest req;
  2. {
  3. RowDeleteChange& chg = req.mutableRowChange();
  4. chg.mutableTable() = "YourTable";
  5. {
  6. // set primary key of the row to delete
  7. PrimaryKey& pkey = chg.mutablePrimaryKey();
  8. pkey.append() = PrimaryKeyColumn(
  9. "pkey",
  10. PrimaryKeyValue::toInteger(1));
  11. }
  12. }
  13. DeleteRowResponse resp;
  14. Optional<OTSError> res = client.deleteRow(resp, req);
本文导读目录