如何检索Azure表中的最新行?

时间:2015-12-03 01:50:52

标签: c# azure nosql

我正在尝试检索由Azure自动创建的主要分钟度量表中创建的最新行。有没有办法这样做而不扫描整个表?分区键基本上是不同格式的时间戳。例如:

20150811T1250

但是,我无法告诉最新的分区键是什么,所以我不能只按分区查询。此外,行键无用,因为所有行都具有相同的rowkey。尽管看起来这是一件非常基本的事情,但我完全不知道自己会怎么做。有什么想法吗?

表中行的几个分区键的示例:

20150813T0623 20150813T0629 20150813T0632 20150813T0637 20150813T0641 20150813T0646 20150813T0650 20150813T0654

编辑:作为后续问题。有办法向后扫描桌子吗?这将允许我只扫描第一行,因为这将是最新一行。

1 个答案:

答案 0 :(得分:0)

在查询数据时,Azure Tables提供的选择非常有限。鉴于您知道如何分配PartitionKey(YYYYMMDDTHHmm格式),一种可能的解决方案是从当前日期/时间(以UTC为单位)查询减去某个偏移量到当前日期/时间并从那里开始。

例如,假设开始时间是2015年12月3日00:00:00。你可以做的是尝试从02-Dec-2015 23:00:00到03-Dec-2015 00:00:00获取数据,看看是否有任何记录被返回。如果返回记录,您可以简单地获取结果集中的最后一个条目,这将是您的最新条目。如果没有找到记录,则返回1小时(即从2015年12月2日22:00:00到2015年12月2日23:00:00)并再次获取记录并重复此操作直到找到匹配结果。

另一个想法(虽然有点复杂)是创建另一个表并定期将数据从主表复制到这个新表。复制数据时,您需要执行的操作是获取PartitionKey值,从中创建日期/时间对象,从DateTime.MaxValue中减去该值。计算此新值的刻度并将其用作新实体的PartitionKey(您需要将该刻度转换为字符串并执行一些字符串预处理以使所有值具有相同的长度)。现在最新的条目将始终位于顶部。