如何从 Azure 表存储中查询最近的 n 条记录?

Posted

技术标签:

【中文标题】如何从 Azure 表存储中查询最近的 n 条记录?【英文标题】:How to query the most recent n records from Azure Table Storage? 【发布时间】:2021-12-25 19:44:34 【问题描述】:

我在 c# .net 中使用以下查询:

TableQuery<MyType> query = new TableQuery<MyType>().Take(50);

这适用于获取 50 条记录,但我想从表中获取最新(降序)记录。我查看了其他答案,但没有一个是简洁或有效的。

从 Azure 表存储实体中获取 n 条最新记录的最有效方法是什么?请提供一个简洁的答案和一个有效的代码示例。

编辑:我对 Azure 存储资源管理器如何导航“缓存项目”特别感兴趣。通过单击该列,我可以轻松地在 Azure 存储资源管理器中对我的结果(数百万行)进行排序。这将返回我想要的,但是,我没有看到任何关于如何访问这些“缓存项目”的文档。

【问题讨论】:

【参考方案1】:

不幸的是,没有简单的方法可以从 Azure 表存储中获取最新记录,因为它不允许您根据属性对记录进行排序。 Azure 表存储中的记录始终按PartitionKey 排序,然后在分区内按RowKey 排序。

解决此问题的一种方法是将PartitionKey 值指定为反向时间刻度(类似于(DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks).ToString("d20")),这样每当您添加实体时,它就会被添加到前面(即添加到表格顶部) .现在,当您进行查询并获取“x”条记录时,您将始终是最新的记录。

其他选项是获取所有实体并在客户端进行排序。这是非常低效的,一般不推荐。如果您的表中的实体数量非常少(例如少于 1000 个),此解决方案可能会起作用。

【讨论】:

我以前读过这个答案,但它没有回答我的问题,因为它不适用于表中已经存在的数据。 在 Azure 存储资源管理器中,我可以按我们称为“时间戳”的列进行排序。该表有数百万行,但它在一秒钟内按“时间戳”排序。一定有办法在代码中复制它? Azure 存储资源管理器对获取的数据进行排序(最多 1000 个实体)。 它如何如此快速地抓取和排序这些内容?我将如何在代码中复制?

以上是关于如何从 Azure 表存储中查询最近的 n 条记录?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 azure 表存储中编写组合查询?

从 Azure Blob 存储中获取记录时在服务器端 (Java) 进行分页

如何识别 Oracle 中最近更新的记录?

从 blob 存储到 azure 表存储的增量负载

mysql 联合查询 如何查询从表的最后一条记录

删除所有 Azure 表记录