我试图在 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"
给我 :
但是为了测试目的用“sensorId”替换“timestamp”给了我:
而且我知道该 sensorId 对键表达式无效..
KeyConditionExpression 只接受键属性、散列键和范围键。
但是如何得到结果呢?
我只想要sensorId 的时间戳。
我的主键错了吗?应该更好地使用 sensorId 作为主键和时间戳作为范围键?
最佳答案
根据您的情况,最好更改您的 key 。使用 SensorID 作为分区键和时间戳作为排序键。
通过这种方式,您可以查询(不扫描所有项目)给定 SensorID 的项目。也可以按时间戳的顺序对它们进行排序。
如果您有一个更大的数据集(超过几个 Killobytes),创建一个 LSI 或 GSI 来投影给定查询所需的属性会很有效。
注意:TimeStamp 是 DynamoDB 中的 reserved word。在查询表达式中使用保留属性时,您可以使用 Expression Attribute Names 来避免错误。
关于amazon-dynamodb - DynamoDB 主键时间戳,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49481571/