【问题标题】:How to retrieve latest record from Azure table storage using C#?如何使用 C# 从 Azure 表存储中检索最新记录?
【发布时间】:2019-12-06 23:11:44
【问题描述】:

我遇到了 Azure 表存储问题。我需要在存储表中查询数十万条数据。

  1. 第一种方法是检索所有数据,然后按要求进行查询,但耗时太长。

  2. 第二种方法是如果我直接使用查询从表存储中获取过滤数据

因此,根据我的理解,第二种方法是最好的,但我无法正确查询。 如何从 Azure 表存储中检索最后一个条目,在此我也尝试 MAX 并按功能排序,但它对我不起作用。

没有运行代码:

var query2 = new TableQuery().Where(
TableQuery.CombineFilters(
TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, patientId.ToString()),
TableOperators.And,
TableQuery.GenerateFilterConditionForGuid("DeviceID", QueryComparisons.Equal, deviceId))
).OrderByDescending(x=>x.EventDate).Take(1).Select(x=>x.EventDate).ToList();

运行时间过长的代码:

var query = new TableQuery<TherapyEvent>().Where( 
TableQuery.CombineFilters( 
TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, patientId.ToString()), 
TableOperators.And, 
TableQuery.GenerateFilterConditionForGuid("DeviceID", QueryComparisons.Equal, deviceId)) ); 

var resp= _table.ExecuteQuery(query).OrderByDescending(x=>x.EventDate).Take(1).Select(x=>x.EventDate).ToList()

【问题讨论】:

  • 您也可以尝试将 TimeStamp 添加为过滤器的一部分以获得最后一个。
  • 现在无法在行键中添加时间戳,因为数据已经存在,而且数据量很大,我无法更改现有数据,因为它已经被某些软件使用了。
  • TimeStamp 是一个在您添加新数据时自动创建的属性。数据已经存在,只考虑检索最新的

标签: c# azure azure-table-storage azure-tablequery


【解决方案1】:

到目前为止,还没有直接的方法可以使用 RowKey 属性获取最新记录。但是,您可以移动 RowKey 并按时间倒序列出它,然后获取最顶部的条目,这将是最新的。

您可以查看此博客以获取更多详细信息:

http://blog.smarx.com/posts/using-numbers-as-keys-in-windows-azure

补充参考:

How to retrieve latest record using RowKey or Timestamp in Azure Table storage

Note:对行键使用字符串日期时间不是一个好方法,因为表存储根据行键按升序存储实体。

希望对你有帮助。

【讨论】:

  • 嘿mohit,已经看到了该解决方案,但在我的情况下,无法将行键更改为表存储中的日期时间,因为它已经有 lac 的数据,有什么解决方案吗??
猜你喜欢
  • 1970-01-01
  • 2017-03-28
  • 2018-09-15
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
相关资源
最近更新 更多