当前位置: 首页 > 知识库问答 >
问题:

DynamoDB列和tilde以及使用JPA的查询

甄鹏云
2023-03-14

我有一个表列,其波浪线值如下所示

             vendorAndDate              - Column name

             Chipotle~08-26-2020        - column value

我想查询月份“vendorAndPurchaseDate,如“%~08 20'”,以及2020年底的“vendorAndPurchaseDate,如'20'”。我使用Spring数据JPA来查询这些值。我以前从未使用过tilde值的列。请给我指出一个正确的方向或一些例子

共有2个答案

鲜于华容
2023-03-14

DynamoDB不支持这种类型的通配符查询。

让我们考虑一种更有力的方法来处理这种类型的查询。听起来你想支持两种访问模式:

  1. 按月获取商品
  2. 按年获取商品

您没有描述主键(分区键/排序键),所以我将做一些假设来说明解决这些访问模式的一种方法
您的属性似乎是一个复合键,由

我将调用您的vendorAndDate属性SK,因为在本例中我将其用作Sort Key。这个表结构允许我通过执行以下查询来实现您的两种访问模式(使用伪代码以保持语言不可知):

访问模式1:获取2020年8月的所有Chipotle记录

  query from MyTable where PK = "Vendors" and SK between Chipotle~2020-08-00 and Chipotle~2020-08-31

访问模式2:获取2020年的所有Chipotle记录

  query from MyTable where PK = "Vendors" and SK between Chipotle~2020-01-01 and Chipotle~2020-12-31

因为以ISO8601格式存储的日期(例如。YYYY-MM-DD...)是按字典排序的,您可以通过这种方式在DynamoDB中执行范围查询。

同样,我对您的数据和访问模式做了一些假设,以说明使用可按字典排序的时间戳实现范围查询的技术。

何宏博
2023-03-14

你不能。如果vendorAndPurchaseDate是您的分区键,则需要传递整个值。如果vendorAndPurchaseDate是范围键,则只能执行=,

参考:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.html

 类似资料:
  • 我在使用AWS Boto3使用推荐的KeyConditionExpression同时使用哈希键和范围键查询DynamoDB时遇到问题。我附上了一个查询示例: 当我对具有以下方案的表运行此操作时: 我发现以下错误,我无法理解原因: 根据我的理解,类型M是映射或字典类型,我使用的类型N是数字类型,与我的范围键表方案相匹配。如果有人能解释为什么会发生这个错误,或者我也愿意用不同的方式完成相同的查询,即使

  • 我已经尝试从DynamoDB查询数据两天了。让我发疯。 我在办公室里有一张桌子。假设有两个办公室,科克和都柏林。我有一个名为“deskName”的列,它的名称有“cork1”、“cork2”、“dub1”、“dub2”。我希望能够查询表中包含“cork”或“dub”的项目,因为它们在同一个表中,但我不想扫描整个表。 代码: YAML: 错误: 当我出现“软木塞-1”的情况时,我设法把一件物品拿了回

  • 我有一个带有哈希键(id)的表(配置文件),我有一个关于名称的GSI,一个关于国家的范围键。我想创建一个DAO方法,它将获取所有具有给定值的name和country的记录,如下所示:List getProfileWithNameAndCountry(name,country);

  • Tilde 是一个用于控制台/终端的文本编辑器,提供直接的类似 GUI 的界面。

  • 我试图使用batchGetItem从表中返回多个项的属性,但似乎它只适用于分区键和范围键的组合,但是如果我只想通过主键识别请求的项,该怎么办?唯一的方法是创建不带范围键的表吗? 根据官方留档: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.Partitions.html 如果表有一个复合主键(分

  • 本文展示了如何使用 JPA 自定义 UserDetailsService 及数据库 的方式来进行认证。在本例,我们将认证信息存储于 H2 数据库中。 在 ldap-authentication项目的基础上,我们构建了一个jpa-userdetailsservice项目。 build.gradle 修改 build.gradle 文件,让我们的jpa-userdetailsservice项目成为一个