使用“begins_with”和“between”条件的组合查询 DynamoDb table
Querying a DynamoDb table using a combination of `begins_with` and `between` conditions
如何结合使用 BETWEEN
和 BEGINS_WITH
来查询 DynamoDb table?
我的 table 分区和排序键的简化示例如下所示:
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,并在那里使用日期列作为排序键。
这个 post 正是在谈论这个 - Local Secondary Indexes。
这是该页面的屏幕截图。
To ensure uniqueness in composite primary key, you can store some random string in sort key
column.
如何结合使用 BETWEEN
和 BEGINS_WITH
来查询 DynamoDb table?
我的 table 分区和排序键的简化示例如下所示:
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,并在那里使用日期列作为排序键。
这个 post 正是在谈论这个 - Local Secondary Indexes。
这是该页面的屏幕截图。
To ensure uniqueness in composite primary key, you can store some random string in
sort key
column.