Azure 入门基础:Table storage(2)

TableBatchOperation batchOperation = new TableBatchOperation(); for (int i = 0; i < 10; i++) { DateTime now = DateTime.Now; string partitionKey = now.ToString("yyyyMM"); string rowKey = now.ToString("ddHHmmssffff"); MyLogEntity logEntity = new MyLogEntity(partitionKey, rowKey); logEntity.LogDate = now; logEntity.LogMessage = "test message" + i.ToString(); logEntity.ErrorType = (i%2) == 0 ? "error" : "warning"; batchOperation.Insert(logEntity); Thread.Sleep(10); } logTable.ExecuteBatch(batchOperation);

这次我们把 TableOperation 类换成了 TableBatchOperation 类,然后一次插入十条数据。去检查一下结果,OK 十条数据全部插入成功!
下面让我们把循环中的 10 改成 200 试试:

Azure 入门基础:Table storage

怎么收到一个 InvalidOperationException 呢?看看红框中的内容,原来批量操作是有一些限制的:
1.   每个批量操作的数据上限是 100 条记录。
2.   每个批量操作中的数据都必须保持相同的 partition key。
请大家在使用批量操作时务必注意这些限制条件!

查询操作

对于日志数据的操作,最重要的就是查询。我们通过几个具体的用例来介绍 Table storage 的查询操作。

查询所有的记录

这是最简单的查询方法,一般是想要导出全部数据时才会这么干:

TableQuery<MyLogEntity> query = new TableQuery<MyLogEntity>(); foreach (MyLogEntity entity in logTable.ExecuteQuery(query)) { Console.WriteLine("{0}\t{1}\t{2}\t{3}", entity.PartitionKey, entity.RowKey, entity.LogMessage, entity.ErrorType); }

查询某年的某个月的记录

要查询某个月的所有记录也是比较容易的,因为我们设计的 PartitionKey 就代表了某个月份:

TableQuery<MyLogEntity> query = new TableQuery<MyLogEntity>().Where( TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "201607")); foreach (MyLogEntity entity in logTable.ExecuteQuery(query)) { //... }

请注意 TableQuery.GenerateFilterCondition 方法,我们创建了一个过滤条件:PartitionKey 等于 "201607"。这个查询会把所有 PartitionKey 为 "201607" 的记录都找到!

查询某一条记录

如果我们已经知道了一条记录的 PartitionKey 和 RowKey,就可以通过这两个条件直接查询到这条记录的详情:

TableQuery<MyLogEntity> query = new TableQuery<MyLogEntity>().Where( TableQuery.CombineFilters( TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "201607"), TableOperators.And, TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, "161148372454"))); foreach (MyLogEntity entity in logTable.ExecuteQuery(query)) { //... }

这次我们使用了组合条件。虽然这里只使用了条件运算操作 TableOperators.And 和 QueryComparisons.Equal,你完全可以尝试其它的条件类型。唯一要注意的是:对于 PartitionKey 和 RowKey,QueryComparisons 的操作对象都是字符串。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/13828.html