相当于 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 存储表与 SQL

如何在 Azure Blob 存储中备份和还原 Azure SQL 表,反之亦然

什么时候应该使用 Sql Azure,什么时候应该使用表存储?

在 Azure 存储中创建文件列表并使用 ADF 将其发送到 sql 表

Azure SQL、聚集列存储索引、“TOP”性能

获取两个表的差异以及重复记录并存储在 Azure SQL DB 的第三个表中