表格存储的 SDK 提供了 PutRow、GetRow、UpdateRow 和 DeleteRow 等单行操作的接口。
插入一行数据(PutRow)
插入数据到指定的行。
接口/// <summary>
/// 指定表名、主键和属性,写入一行数据。返回本次操作消耗的CapacityUnit。
/// </summary>
/// <param name="request">插入数据的请求</param>
/// <returns>本次操作消耗的CapacityUnit</returns>
public PutRowResponse PutRow(PutRowRequest request);
/// <summary>
/// PutRow的异步形式。
/// </summary>
public Task<PutRowResponse> PutRowAsync(PutRowRequest request);
示例 1
插入一行数据。
// 定义行的主键,必须与创建表时的TableMeta中定义的一致
var primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(0));
primaryKey.Add("pk1", new ColumnValue("abc"));
// 定义要写入该行的属性列
var attribute = new AttributeColumns();
attribute.Add("col0", new ColumnValue(0));
attribute.Add("col1", new ColumnValue("a"));
attribute.Add("col2", new ColumnValue(true));
try
{
// 构造插入数据的请求对象,RowExistenceExpectation.IGNORE表示不管此行是否存在都执行
var request = new PutRowRequest("SampleTable", new Condition(RowExistenceExpectation.IGNORE),
primaryKey, attribute);
// 调用PutRow接口插入数据
otsClient.PutRow(request);
// 如果没有抛出异常,则说明执行成功
Console.WriteLine("Put row succeeded.");
}
catch (Exception ex)
{
// 如果抛出异常,则说明执行失败,打印出错误信息
Console.WriteLine("Put row failed, exception:{0}", ex.Message);
}
提示:
// 定义行的主键,必须与创建表时的TableMeta中定义的一致
var primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(0));
primaryKey.Add("pk1", new ColumnValue("abc"));
// 定义要写入该行的属性列
AttributeColumns attribute = new AttributeColumns();
attribute.Add("col0", new ColumnValue(0));
attribute.Add("col1", new ColumnValue("a"));
attribute.Add("col2", new ColumnValue(true));
var request = new PutRowRequest(tableName, new Condition(RowExistenceExpectation.EXPECT_EXIST),
primaryKey, attribute);
// 当col0列的值大于24的时候,允许再次put row,覆盖掉原值
try
{
request.Condition.ColumnCondition = new RelationalCondition("col0",
RelationalCondition.CompareOperator.GREATER_THAN,
new ColumnValue(24));
otsClient.PutRow(request);
Console.WriteLine("Put row succeeded.");
}
catch (Exception ex)
{
Console.WriteLine("Put row failed. error:{0}", ex.Message);
}
try
{
var putRowTaskList = new List<Task<PutRowResponse>>();
for (int i = 0; i < 100; i++)
{
// 定义行的主键,必须与创建表时的TableMeta中定义的一致
var primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(i));
primaryKey.Add("pk1", new ColumnValue("abc"));
// 定义要写入该行的属性列
var attribute = new AttributeColumns();
attribute.Add("col0", new ColumnValue(i));
attribute.Add("col1", new ColumnValue("a"));
attribute.Add("col2", new ColumnValue(true));
var request = new PutRowRequest(TableName, new Condition(RowExistenceExpectation.IGNORE),
primaryKey, attribute);
putRowTaskList.Add(TabeStoreClient.PutRowAsync(request));
}
// 等待每个异步调用返回,并打印出消耗的CU值
foreach (var task in putRowTaskList)
{
task.Wait();
Console.WriteLine("consumed read:{0}, write:{1}", task.Result.ConsumedCapacityUnit.Read,
task.Result.ConsumedCapacityUnit.Write);
}
// 如果没有抛出异常,则说明插入数据成功
Console.WriteLine("Put row async succeeded.");
}
catch (Exception ex)
{
// 如果抛出异常,则打印出出错信息
Console.WriteLine("Put row async failed. exception:{0}", ex.Message);
}
/// <summary>
/// 根据给定的主键读取单行数据。
/// </summary>
/// <param name="request">查询数据的请求</param>
/// <returns>GetRow的响应</returns>
public GetRowResponse GetRow(GetRowRequest request);
/// <summary>
/// GetRow的异步形式。
/// </summary>
public Task<GetRowResponse> GetRowAsync(GetRowRequest request);
// 定义行的主键,必须与创建表时的TableMeta中定义的一致
PrimaryKey primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(0));
primaryKey.Add("pk1", new ColumnValue("abc"));
try
{
// 构造查询请求对象,这里未指定读哪列,默认读整行
var request = new GetRowRequest(TableName, primaryKey);
// 调用GetRow接口查询数据
var response = otsClient.GetRow(request);
// 输出此行的数据,这里省略,详见下面GitHub的链接
// 如果没有抛出异常,则说明成功
Console.WriteLine("Get row succeeded.");
}
catch (Exception ex)
{
// 如果抛出异常,说明执行失败,打印出错误信息
Console.WriteLine("Update table failed, exception:{0}", ex.Message);
}
// 定义行的主键,必须与创建表时的TableMeta中定义的一致
PrimaryKey primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(0));
primaryKey.Add("pk1", new ColumnValue("abc"));
var rowQueryCriteria = new SingleRowQueryCriteria("SampleTable");
rowQueryCriteria.RowPrimaryKey = primaryKey;
// 条件1:col0的值等于5
var filter1 = new RelationalCondition("col0",
RelationalCondition.CompareOperator.EQUAL,
new ColumnValue(5));
// 条件2:col1不等于ff的行
var filter2 = new RelationalCondition("col1", RelationalCondition.CompareOperator.NOT_EQUAL, new ColumnValue("ff"));
// 构造组合条件,包括条件1和条件2,关系是OR
var filter = new CompositeCondition(CompositeCondition.LogicOperator.OR);
filter.AddCondition(filter1);
filter.AddCondition(filter2);
rowQueryCriteria.Filter = filter;
// 设置要查询和返回的行,查询和过滤的顺序是:先在行[col0,col1]上查询,然后再按条件过滤
rowQueryCriteria.AddColumnsToGet("col0");
rowQueryCriteria.AddColumnsToGet("col1");
// 构造GetRowRequest
var request = new GetRowRequest(rowQueryCriteria);
try
{
// 查询
var response = otsClient.GetRow(request);
// 输出数据或者相关逻辑操作,这里省略
// 如果没有抛出异常,则说明执行成功
Console.WriteLine("Get row with filter succeeded.");
}
catch (Exception ex)
{
// 如果抛出异常,则说明执行失败,打印出错误信息
Console.WriteLine("Get row with filter failed, exception:{0}", ex.Message);
}
/// <summary>
/// 更新指定行的数据,如果该行不存在,则新增一行;若该行存在,则根据请求的内容在这一行中新增、修改或者删除指定列的值。
/// </summary>
/// <param name="request">请求实例</param>
public UpdateRowResponse UpdateRow(UpdateRowRequest request);
/// <summary>
/// UpdateRow的异步形式。
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public Task<UpdateRowResponse> UpdateRowAsync(UpdateRowRequest request);
// 定义行的主键,必须与创建表时的TableMeta中定义的一致
PrimaryKey primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(0));
primaryKey.Add("pk1", new ColumnValue("abc"));
// 定义要写入该行的属性列
UpdateOfAttribute attribute = new UpdateOfAttribute();
attribute.AddAttributeColumnToPut("col0", new ColumnValue(0));
attribute.AddAttributeColumnToPut("col1", new ColumnValue("b")); // 将原先的值'a'改为'b'
attribute.AddAttributeColumnToPut("col2", new ColumnValue(true));
try
{
// 构造更新行的请求对象,RowExistenceExpectation.IGNORE表示不管此行是否存在都执行
var request = new UpdateRowRequest(TableName, new Condition(RowExistenceExpectation.IGNORE),
primaryKey, attribute);
// 调用UpdateRow接口执行
otsClient.UpdateRow(request);
// 如果没有抛出异常,则说明执行成功
Console.Writeline("Update row succeeded.");
}
catch (Exception ex)
{
// 如果抛出异常,说明执行失败,打印异常信息
Console.WriteLine("Update row failed, exception:{0}", ex.Message);
}
/// <summary>
/// 指定表名和主键,删除一行数据。
/// </summary>
/// <param name="request">请求实例</param>
/// <returns>响应实例</returns>
public DeleteRowResponse DeleteRow(DeleteRowRequest request);
/// <summary>
/// DeleteRow的异步形式。
/// </summary>
public Task<DeleteRowResponse> DeleteRowAsync(DeleteRowRequest request);
// 要删除的行的PK列分别为0和"abc"
var primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(0));
primaryKey.Add("pk1", new ColumnValue("abc"));
try
{
// 构造请求,Condition.EXPECT_EXIST表示只有此行存在时才执行
var deleteRowRequest = new DeleteRowRequest("SampleTable", Condition.EXPECT_EXIST, primaryKey);
// 调用DeleteRow接口执行删除
otsClient.DeleteRow(deleteRowRequest);
// 如果没有抛出异常,则表示成功
Console.Writeline("Delete table succeeded.");
}
catch (Exception ex)
{
// 如果抛出异常,说明删除失败,打印粗错误信息
Console.WriteLine("Delete table failed, exception:{0}", ex.Message);
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。