gpt4 book ai didi

amazon-dynamodb - DynamoDB 主键时间戳

转载 作者:行者123 更新时间:2023-12-04 06:55:59 26 4
gpt4 key购买 nike

我正在尝试在 dynamodb 中查询主键是时间戳的数据集。首先,我想获取特定 sensorId 的所有数据。我试过扫描(scan.json):

{
"sensorId": {
"AttributeValueList": [{
"S": "1234"
}],
"ComparisonOperator": "EQ"
}
}

这个 Json 是通过 CLI 命令使用的:

aws dynamodb scan --table-name sensorData --scan-filter file://scan.json 

这很成功,并为我提供了指定 sensorid 的所有数据。

现在,如果我只想获得时间戳和 sensorId 作为结果,我阅读了有关投影表达式并尝试进行查询 (query.json):

{
":Id":{"S":"1234"}
}

aws cli 命令

aws dynamodb query --table-name sensorData --key-condition-expression "sensorId= :Id" --expression-attribute-values file://query2.json --projection-expression "timestamp"

给我:

An error occurred (ValidationException) when calling the Query operation: Invalid ProjectionExpression: Attribute name is a reserved keyword; reserved keyword: timestamp

但是出于测试目的将“时间戳”替换为“sensorId”给了我:

An error occurred (ValidationException) when calling the Query operation: Query condition missed key schema element: timestamp

而且我知道该 sensorId 对于键表达式无效..KeyConditionExpression 只接受键属性、散列键和范围键。但是如何得到结果呢?

我只想要 sensorId 的时间戳。 我的主键错了吗?应该更好地使用 sensorId 作为主键和时间戳作为范围键?

最佳答案

根据您的情况,最好更改您的 key 。使用 SensorID 作为分区键,使用时间戳作为排序键。

通过这种方式,您可以查询(无需扫描所有项目)给定 SensorID 的项目。也可以按时间戳的顺序对它们进行排序。

如果您有一个更大的数据集(超过几个 Killobytes),那么创建 LSI 或 GS​​I 来投影给定查询所需的属性会很有效。

注意:时间戳是 reserved word在 DynamoDB 中。您可以使用Expression Attribute Names避免在查询表达式中使用保留属性时出现错误。

关于amazon-dynamodb - DynamoDB 主键时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49481571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com