我正在构建一个DynamoDB表,并且遇到了如何最好地构建索引的问题。我需要执行3个查询。
我的桌子:
AttributeDefinitions:
# This is large groups that can have many events
- AttributeName: groupId
AttributeType: S
# An event can have many actions
- AttributeName: eventId
AttributeType: S
# Each item has a unique actionId
- AttributeName: actionId
AttributeType: S
# Each item has a creation date
- AttributeName: createdAt
AttributeType: S
# Some type I need to filter by (enum: trigger|task for example)
- AttributeName: actionType
AttributeType: S
# Main query to return items by action ID - that works fine
KeySchema:
- AttributeName: groupId
KeyType: HASH
- AttributeName: actionId
KeyType: RANGE
以下是我需要实现的3个查询:
现在我做一个getItem
Key: {
groupId,
actionId
}
作品伟大。
SQL:
SELECT * FROM theTable WHERE eventId = 123
如果我做这个本地索引,那么效果很好:
KeySchema:
- AttributeName: groupId
KeyType: HASH
- AttributeName: eventId
KeyType: RANGE
SQL:
SELECT * FROM theTable WHERE actionType = 'trigger' AND groupId = 123 SORT BY createdAt
这是一个给我带来麻烦的问题。我想查询我的数据,并将其按日期排序返回。但是,我需要使用另一个字段作为范围进行查询。因此,如果我添加createdAt作为我的范围,我就不能使用actionType进行过滤。如果我使用actionType,那么就没有排序。
如何最好地构建这个表?就数据数量而言。可以有很多组(groupId)。每个组可以有很多事件(eventId)。但是每个事件很可能只有
为了在DynamoDB中实现像SELECT*From theTable WHERE actionType='触发器'AND groupId=123 SORT BY createdAt
这样的查询,您需要有一个具有groupId
哈希键的索引和一个复合排序键actionTypeCreatedAt
(可以预见,它是actionType、分隔符,然后是createdAt日期)。
在索引中,数据如下所示(假定排序键中的分隔符为“\”):
groupId | actionTypeCreatedAt
--------|------------------------------
123 | trigger_2019-06-30T08:30:00Z
123 | trigger_2019-07-05T23:00:00Z
123 | trigger_2019-07-20T10:15:00Z
123 | action2_2019-06-25T15:10:00Z
123 | action2_2019-07-08T02:45:00Z
现在,要实现您想要的查询,您需要使用groupId=123 ANDbegins_with(actionTypeCreatedAt,"trigger_")
的关键条件表达式。DynamoDB将自动按排序键对结果进行排序,并且由于所有查询结果都具有相同的actionType
前缀,因此结果将仅按createdAt
日期排序。
我有一个具有两个属性的dynamoDB表: A: 主分区键 B: 主排序键 我想使用属性B查询这个表,因为我不知道A的值。可以这样做吗? 是否可以将B设为GSI(全局二级索引),如何使用B查询表,因为B已经是排序键。
如有任何帮助,不胜感激
我正在使用AWS DynamoDB来存储Web应用程序的用户会话记录。 每条记录的格式如下: 在哪里 uuid是一个用户id和分区键 在我们的管理员仪表板中,我想显示一个包含最新XX个会话的表,首先显示最新会话。 问:使用AWS DynamoDB,如何按排序顺序和定义的限制查询所有? 需要使用查询指定分区键 扫描不会按排序顺序返回结果 我看到的所有解决方案似乎都有点“黑客”,我怀疑我误解了什么,因
问题内容: 为了掌握AngularJS,我决定使用其中一个示例,特别是在Todo示例中简单地添加一个“ complete”屏幕,当用户输入5个todo时,它会使用一个切换案例切换到另一个div。 。如果有任何用处,可以在这里找到代码http://jsfiddle.net/FWCHU/1/。 但是,似乎每个开关盒都有其自己的作用域($ scope.todoText不可用),但是在这种情况下,可以使用
我有一个DynamoDB表,其中包含主键:userID、排序键:sesionID和另一列,该列名为示例ID。 我想返回一个列表,该列表返回所有包含我发送的userID和examID的记录。这是我的代码: 这就是我得到的错误:{“statusCode”:500,“body”:“{”error“:“查询条件缺少关键架构元素:sessionId”}”, ... 我想也许我应该包括一个过滤器表达式,或者不
我在使用AWS Boto3使用推荐的KeyConditionExpression同时使用哈希键和范围键查询DynamoDB时遇到问题。我附上了一个查询示例: 当我对具有以下方案的表运行此操作时: 我发现以下错误,我无法理解原因: 根据我的理解,类型M是映射或字典类型,我使用的类型N是数字类型,与我的范围键表方案相匹配。如果有人能解释为什么会发生这个错误,或者我也愿意用不同的方式完成相同的查询,即使