![](/img/trans.png)
[英]Using query IndexName, GSI in DynamoDB and not available begins_with in python
[英]Querying a DynamoDb table using a combination of `begins_with` and `between` conditions
如何使用BETWEEN
和BEGINS_WITH
的组合查询 DynamoDb 表?
我的表分区和排序键的简化示例如下所示:
PK |SK
my_pk |2022-05-13T08:30:00Z#tag0
my_pk |2022-05-13T08:45:00Z#tag0
my_pk |2022-05-13T08:45:00Z#tag1
my_pk |2022-05-13T08:45:00Z#tag2
my_pk |2022-05-13T09:00:00Z#tag0
my_pk |2022-05-13T09:00:00Z#tag1
如果我的SK
不包含...#tag
后缀,我可以使用这样的KeyConditionExpression
:
"KeyConditionExpression": "#pk = :pk AND #sk BETWEEN :start AND :end"
其中start
和end
分别是2022-05-13T08:45:00Z
和2022-05-13T09:00:00Z
,但是当后缀存在时我不确定该怎么做。
注意:我从不需要使用tag
进行查询,它只是为了确保复合主键是唯一的。
注2:我使用python和boto3来执行查询。
您可以在 where :end
= 2022-05-13T09:00:00Z$
之间使用。 美元符号是 ASCII 中哈希后的下一个值,因此这将捕获以2022-05-13T09:00:00Z#
开头的所有值。
LSI 或 GSI 中的分区键和排序键不需要是唯一的。 所以你可以创建一个 LSI,并在那里使用日期列作为排序键。
这篇文章正是在谈论这个 - 本地二级索引。
为了确保复合主键的唯一性,您可以在
sort key
列中存储一些随机字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.