Azure表查询

时间:2014-10-12 08:31:52

标签: azure azure-storage azure-table-storage

我一般都是Azure Tables和NOSQL的新手。

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

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

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

使用Azure Table,推荐的方法是使用PartitionKey(我已经创建了Employer),所以我的计划是为每个雇主发出一个查询表,然后将结果联合起来,最后在传递给用户界面。

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

实现这一目标的最佳方法是什么?我不希望雇主返回所有工作,因为我可能不会全部使用它们。我希望某个雇主根据我回来的身份证明某些工作。

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

1 个答案:

答案 0 :(得分:3)

  

我的问题是我无法运行查询,例如" 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' and RowKey eq '1'

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