Azure 表查询

标签 azure azure-storage azure-table-storage

总体而言,我对 Azure 表和 NOSQL 还不熟悉。

我目前在 Azure 表中拥有一个大约有 60,000 行的表。其中包含职位空缺,列有 ID(RowKey)、雇主(PartitionKey)、职位、地区、类别等列。

当网站上的某人执行搜索时,请求将发送到外部匹配系统。然后匹配系统将返回适用的职位。匹配引擎返回每个职位的 ID 和雇主。

搜索可能包含 10 个不同的雇主,涵盖 300 个职位。如果我使用的是 SQL Server 数据库,我只需在 ID 上创建一个“IN”子句,该 ID 将成为主键,以便从我的表中选择这些作业。

对于 Azure 表,推荐的方法是使用 PartitionKey(我已在其上创建了雇主),因此我的计划是向表中的每个雇主发出查询,然后合并结果,最后在传递到之前进行排序用户界面。

我的问题是我无法运行诸如“WHERE Employer =”MyEmployer”AND ID IN (1,2,3,4,5,6)之类的查询。

实现这一目标的最佳方法是什么?我不希望雇主的所有工作都返回,因为我可能不会全部使用它们。我希望根据我收到的 ID 从某个雇主处获得某些工作。

我认为这应该很简单,但到目前为止事实证明很棘手!

最佳答案

My problem here is that I can't run a query such as "WHERE Employer = "MyEmployer" AND ID IN (1,2,3,4,5,6).

您当然可以执行 IN 查询,尽管语法会有点不同。假设您使用 REST API 并使用 ODATA 语法编写查询,您将使用以下内容:

(PartitionKey eq 'MyEmployer' and (RowKey eq '1' or RowKey eq '2' or RowKey eq '3' or RowKey eq '4' or RowKey eq '5' or RowKey eq '6')

您需要考虑的一些事项:

  • 这将导致完整的分区扫描。如果分区中的实体数量较少,这可能不是问题,但随着实体数量的增加,这可能会成为问题。
  • 由于查询在请求中作为查询字符串传递到表服务,因此查询中可以包含的 or 子句数量有限。如果我没记错的话,查询字符串的最大长度是 1024 个字符。
  • 您可能需要考虑并行触发许多单个查询,其中每个查询将针对单个实体,例如PartitionKey eq 'MyEmployer' 和 RowKey eq '1'

最后,您可能想阅读存储团队的这篇博文:http://blogs.msdn.com/b/windowsazurestorage/archive/2010/11/06/how-to-get-most-out-of-windows-azure-tables.aspx 。这将为您提供非常好的见解。

关于Azure 表查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26323283/

相关文章:

azure - 多个 Azure 函数应用程序指向一个 Blob 容器(触发器)

适用于云服务的 Azure 流量管理器 - 存储访问怎么样?

Azure 存储资源管理器 - 未显示 "failed"队列项目?

group-by - windows azure 存储表上的聚合函数

Azure 功能 - 从 IoT 中心保存到表存储

azure - 使用 SDK 在 Blazor 服务器应用程序中运行 Office 365 图形 API 查询

c# - 维护网站的在线 (Azure) 和离线版本

sql-server - Azure Sql Server V12 合并语句上出现批量加载错误

已过期 MSDN 订阅的 Azure 积分仍然有效

c# - 将多个 Azure 表查询封装在一个 HTTP Shot 中