如何解决带波浪号的DynamoDB列和使用JPA进行查询
我的表格列具有波浪号,如下所示
vendorAndDate - Column name
Chipotle~08-26-2020 - column value
我想查询月份“ vendorAndPurchaseDate,例如'%〜08%2020'”,而以2020结尾的年份是“ vendorAndPurchaseDate,例如'%2020'”。我正在使用Spring Data JPA查询值。我以前没有使用波浪号的列。请为我指出正确的方向或一些例子
解决方法
您不能。 如果vendorAndPurchaseDate是您的分区键,则需要传递整个值。 如果vendorAndPurchaseDate是范围键,则只能执行 =,>, =,
,DynamoDB不支持这种通配符查询。
让我们考虑一种更DynamoDB的方式来处理这种类型的查询。听起来您想支持2种访问模式:
- 按月获取商品
- 按年份获取商品
您没有描述主键(分区键/排序键),所以我将做一些假设来说明解决这些访问模式的一种方法。
您的属性似乎是一个由<vendor>~<date>
组成的复合键,其中日期由MM-DD-YYYY
表示。我建议您以YYYY-MM-DD
格式存储日期字段,这将使您能够利用日期字段的排序能力。一个例子将使这一点更加清楚。想象一下您的桌子是这样的:
我将您的vendorAndDate
属性称为SK
,因为在此示例中将其用作排序键。通过这种表结构,我可以通过执行以下查询(使用伪代码以保持与语言无关)来实现您的两种访问模式:
访问方式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中执行范围查询。
再次,我对您的数据和访问模式进行了一些假设,目的是说明使用按词典顺序排序的时间戳来实现范围查询的技术。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。