Azure表存储-检索与部分行键匹配的所有实体

Azure表存储-检索与部分行键匹配的所有实体,azure,azure-storage,Azure,Azure Storage,我正在学习Azure表存储,我能够毫无问题地保存和检索实体。但是,我想做以下几点。假设我有行键(都具有相同的分区键),如下所示: KJV-C1-V1 KJV-C1-V2 KJV-C1-V3 KJV-C2-V1 KJV-C2-V2 KJV-C2-V3 我希望能够在.NET C#中执行两种类型的查询: 检索行键以“KJV-C1”开头的所有实体 检索行键中包含“-C1-”的所有实体 我更希望能够做到这一点,而不必读取分区中的所有实体并过滤那些与我正在寻找的模式不匹配的实体。Azure表存储查询是否可

我正在学习Azure表存储,我能够毫无问题地保存和检索实体。但是,我想做以下几点。假设我有行键(都具有相同的分区键),如下所示:

KJV-C1-V1
KJV-C1-V2
KJV-C1-V3
KJV-C2-V1
KJV-C2-V2
KJV-C2-V3
我希望能够在.NET C#中执行两种类型的查询:

  • 检索行键以“KJV-C1”开头的所有实体
  • 检索行键中包含“-C1-”的所有实体
  • 我更希望能够做到这一点,而不必读取分区中的所有实体并过滤那些与我正在寻找的模式不匹配的实体。Azure表存储查询是否可能做到这一点

    检索行键以“KJV-C1”开头的所有实体

    这是可能的。OData查询示例:

    PartitionKey eq 'your partition key' and (RowKey ge 'KJV-C1' and RowKey lt 'KJV-C2')
    
    检索行键中包含“-C1-”的所有实体

    不幸的是,这是不可能的。您必须在客户端获取所有实体并过滤数据

    检索行键以“KJV-C1”开头的所有实体

    这是可能的。OData查询示例:

    PartitionKey eq 'your partition key' and (RowKey ge 'KJV-C1' and RowKey lt 'KJV-C2')
    
    检索行键中包含“-C1-”的所有实体


    不幸的是,这是不可能的。您必须在客户端获取所有实体并过滤数据。

    您不能在键上执行类似contains()的操作。但由于它支持CompareTo(“”)方法,您需要稍微修改表设计

    维护多个分区键,而不是单个分区键。您可以简单地将行键的“KJV”部分推送到分区键。然后以C1-V1、C1-V2作为行键开始

    那么,如果你愿意

  • KJV的所有条目-查询分区键“KJV”
  • KJV的所有“C1”项-查询分区键“KJV”和以“C1-”开头的行键
  • C1的所有条目-查询以“C1-”开头的行键
  • 或者在表中没有设计变更的情况下,您需要循环浏览您的主要产品,如“KJV”,并构建多个查询,每个查询以“KJV-C1-”开头,然后将所有查询合并以获得最终结果


    请注意,表存储不允许所有LINQ操作,有时您需要在设计表键时牢记大多数查询。

    您不能在键上执行类似contains()的操作。但由于它支持CompareTo(“”)方法,您需要稍微修改表设计

    维护多个分区键,而不是单个分区键。您可以简单地将行键的“KJV”部分推送到分区键。然后以C1-V1、C1-V2作为行键开始

    那么,如果你愿意

  • KJV的所有条目-查询分区键“KJV”
  • KJV的所有“C1”项-查询分区键“KJV”和以“C1-”开头的行键
  • C1的所有条目-查询以“C1-”开头的行键
  • 或者在表中没有设计变更的情况下,您需要循环浏览您的主要产品,如“KJV”,并构建多个查询,每个查询以“KJV-C1-”开头,然后将所有查询合并以获得最终结果


    请注意,表存储不允许所有LINQ操作,有时您需要在设计表键时牢记大多数查询。

    Azure表和查询不会混合太多。我的意思是你可以做一些查询,但最终,它是一个键值存储。你在查询中尝试过使用
    entity.RowKey.StartsWith(“KJV-C1”)
    ?请注意,与rdbms相比,所有这些类型的查询都比较慢。Azure表和查询不会混合太多。我的意思是你可以做一些查询,但最终,它是一个键值存储。你在查询中尝试过使用
    entity.RowKey.StartsWith(“KJV-C1”)
    ?请注意,与rdbms相比,所有这些类型的查询都比较慢。