相当于 SQL“IN”的 Azure 表存储
Posted
技术标签:
【中文标题】相当于 SQL“IN”的 Azure 表存储【英文标题】:Azure Table Storage equivalent of SQL "IN" 【发布时间】:2015-03-08 15:12:30 【问题描述】:在 SQL Server 中,我可以执行如下查询:
SELECT *
FROM Products
WHERE ProductId IN (1, 24, 9224)
我怎样才能对 Azure 表存储做同样的事情?如果不支持IN
-type 运算符,那么基于非连续 ID 值检索数据子集(例如 1,000,000 条中的 100 条记录)的标准方法是什么?
【问题讨论】:
【参考方案1】:我也在为同样的事情苦苦挣扎,但我找到了解决方法。希望它可以帮助其他人。 我们可以使用 join 来实现这个要求。
var a = from prods in products
join pId in productIds on prods.productId equals pId
select prods;
得到了这种方法here
【讨论】:
【参考方案2】:没有。
很遗憾,Table Storage 不支持IN
或其他Contains
类型的查询运算符。
请看Query Operators Supported for the Table Service
【讨论】:
是的,我看到了那篇文章:/。如果您对表存储有任何经验,您会知道处理此问题的典型方法吗? 虽然 Brendan 是正确的,IN
子句本身不受支持,但您可以使用 OR
查询来实现相同的目的。像(ProductId eq 1) or (ProductId eq 24) or (ProductId eq 9224)
这样的东西。如果您没有在查询中使用PartitionKey
,请注意可能的表扫描。 HTH。
重要的是要注意 OR 查询通常会导致表扫描,即使您还有主键也是如此。最好并行触发多个查询。
@Frans 很高兴知道这一点。这部分是我所追求的——是否有最佳实践(在这种情况下似乎是触发多个请求)。谢谢。
“请注意,在 $filter 字符串中不允许超过 15 个离散比较”根据本文https://docs.microsoft.com/en-us/rest/api/storageservices/querying-tables-and-entities#supported-comparison-operators以上是关于相当于 SQL“IN”的 Azure 表存储的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Azure Blob 存储中备份和还原 Azure SQL 表,反之亦然
什么时候应该使用 Sql Azure,什么时候应该使用表存储?