我已经看过 PartiQL 语法的 dynamoDB 文档:
SELECT expression [, ...]
FROM table[.index]
[ WHERE condition ] [ [ORDER BY key [DESC|ASC] , ...]
Run Code Online (Sandbox Code Playgroud)
但在实践中:
select * from dev .pk-all-index
where "pk" = 'config' AND ("brand" = 'tesla' OR contains("aliases", 'tesla.com'))
Run Code Online (Sandbox Code Playgroud)
给我错误:
执行命令期间发生错误。ValidationException:语句格式不正确,无法处理:意外的关键字
amazon-dynamodb dynamodb-queries amazon-dynamodb-index partiql
我们在我们的应用程序中不断收到此异常,该应用程序有一个计划作业要读取全局二级索引。看起来它会定期回填,即使桌子上没有任何变化。我们桌子上的音量很低,所以每天看到几次有点惊讶。这不是一个新索引,所以想知道它是否应该仅在插入/更新记录时回填。有人见过这个吗?
DynamoDB 中有一个包含数十亿条记录的现有表,我想向其中添加全局二级索引 (GSI)。这是否会消耗表容量中的任何读取请求单元 (RRU) 或索引的写入请求单元 (WRU)。我有兴趣了解与此操作相关的任何成本核算。
我了解 GSI(创建后)涉及的存储成本。
我来自SQL和MongoDB背景,并且确实想将DynamoDB用于新项目。到目前为止,这是可以忍受的。我将数据写入DynamoDB,并使用流神奇地将我的数据摄取到Elastic Search中进行搜索。它完成了我需要做的所有事情。
但是,现在我的位置是我想要直接从DynamoDB进行查询的数据。
受影响的实体是:
我正在使用我的付款服务,通过该服务可以发起,更新,审核和查询付款。使用以下属性创建付款:
使用DynamoDB,我希望能够进行以下查询:
以上各项的某种组合(例如“来自供应商aaaa-bbbb的拒绝付款”)。
遵循DynamoDB官方文档之后,我正试图设置Overloaded Global Secondary Indexs以解决该问题。
我现在还没有开始设置“付款”,因为这感觉很奇怪,但是我确实开始设计用于reportPeriods的键和索引,以便于掌握。这是我现在所拥有的:
主键是id,sort。我的计划是将相同的表用于报告期和付款,因为DynamoDB文档说您可以为整个应用程序使用定义明确的表(我将数据比这保持了一点隔离,并且每个微服务使用一个表)。
我承认保持冗余行的最新状态并通过许多字段进行查询会有开销,但是假设我可以进行维护(我仍然在质疑自己)...我的真正问题是...我我做对了吗?
我假设要查询的任何内容,都需要添加带有ID和正确的“ sort”字段的新行。例如,假设我们有一个ID为dddd-eeee的付款,属于供应商aaaaa-bbbb,状态为1。我假设要按供应商和状态查询此付款,我应该添加一个包含以下字段的附加项目:
那是对的吗?如果要按vendorId +状态IN(1,3)查询怎么办?
如果您有过载GSI的经验,请查看我到目前为止所做的一切,并让我知道我是否处在正确的轨道上,或者我是wayyyyy,wayyyyy,wayyyy并最好进行一些更改(快速),或者我要被搞砸了。您建议进行哪些更改?
amazon-web-services nosql amazon-dynamodb dynamodb-queries amazon-dynamodb-index
当主表具有按需容量模式时,GSI容量模式将是按需容量模式吗?
我无法在 AWS 文档中找到此信息。虽然我能找到的是:对于 GSI,RCU 和 WCU(预配置容量模式)应该相同(或更多),否则它可以备份“主”表上的写入,从而限制请求。
我从文档中发现的是:
全局二级索引从基表继承读/写容量模式
(复制自https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html)
我是否可以假设 GSI 将继承表的容量模式(因此,如果表是按需的,那么 GSI 将是按需的)?
我一直在删除 dynamodb 表中的排序键。我需要通过 AWS 控制台 UI 或命令行了解。
谢谢!
Entity Model:
I've read AWS Guide about create a Modeling Relational Data in DynamoDB. It's so confusing in my access pattern.
Access Pattern
+-------------------------------------------+------------+------------+
| Access Pattern | Params | Conditions |
+-------------------------------------------+------------+------------+
| Get TEST SUITE detail and check that |TestSuiteID | |
| USER_ID belongs to project has test suite | &UserId | |
+-------------------------------------------+------------+------------+
| Get TEST CASE detail and check that | TestCaseID | |
| USER_ID belongs to project has test case | &UserId …
Run Code Online (Sandbox Code Playgroud) hierarchical-data amazon-dynamodb dynamodb-queries amazon-dynamodb-index amazon-dynamodb-data-modeling
我的主键是一个名为“id”的字段
我在“group_number”字段上的表中添加了二级索引
我通过二级索引查询,如下所示:
// Query the secondary index
queryInput := &dynamodb.QueryInput{
TableName: aws.String(c.GetDynamoDBTableName()),
KeyConditions: map[string]*dynamodb.Condition{
"group_number": {
ComparisonOperator: aws.String("EQ"),
AttributeValueList: []*dynamodb.AttributeValue{
{
S: aws.String(c.GroupNumber),
},
},
},
},
}
Run Code Online (Sandbox Code Playgroud)
然而; 我收到错误“validationexception:查询条件缺少关键架构元素:id”
DynamoDB 是否只允许查询主键?我的印象是您使用“GetItem”作为主键,因为如果您使用主键,则只有一条记录可以返回。要通过二级索引进行搜索,请使用“查询”,要通过非索引键进行搜索,请使用“扫描”。
请让我知道我在这里做错了什么。
我一直在四处走动,但不清楚该怎么做。
我有一个简单的表,我想在其中对几列进行查询。据我了解,这意味着为要查询的每一列创建二级索引。我已经使用Serverless框架定义了表,serverless.yml
并且收到了各种奇怪的错误消息。
当前的serverless.yml
定义是:
resources:
Resources:
MessagesDynamoDBTable:
Type: 'AWS::DynamoDB::Table'
Properties:
AttributeDefinitions:
- AttributeName: messageId
AttributeType: S
- AttributeName: room
AttributeType: S
- AttributeName: userId
AttributeType: S
KeySchema:
- AttributeName: messageId
KeyType: HASH
- AttributeName: userId
KeyType: RANGE
LocalSecondaryIndexes:
- IndexName: roomIndex
KeySchema:
- AttributeName: room
KeyType: HASH
Projection:
ProjectionType: "KEYS_ONLY"
- IndexName: userId
KeySchema:
- AttributeName: userId
KeyType: HASH
Projection:
ProjectionType: "KEYS_ONLY"
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
TableName: ${self:custom.tableName}
Run Code Online (Sandbox Code Playgroud)
它的意思是类似于Slack服务-因此我想查询房间,用户等的条目。
根据我已经找到的文档,此定义很有意义。一个应该为索引中使用的列声明属性,而我已经这样做了。KeySchema-我确实只需要messageId字段,但是一条错误消息表明它需要RANGE索引,因此我将userId字段添加到KeySchema中只是为了关闭它。根据我已经找到的文档,二级索引字段看起来正确。
有了这个定义,当尝试使用 serverless deploy
An error occurred: …
Run Code Online (Sandbox Code Playgroud) amazon-dynamodb serverless-framework dynamodb-queries amazon-dynamodb-index
amazon-dynamodb ×10
amazon-dynamodb-data-modeling ×1
dynamodb-gsi ×1
go ×1
nosql ×1
partiql ×1