我将尝试查询一个DynamoDB数据集,其中主键是时间戳。首先,我想获取特定sensorId的所有数据。我尝试使用扫描(scan.json):
{
"sensorId": {
"AttributeValueList": [{
"S": "1234"
}],
"ComparisonOperator": "EQ"
}
}
这个Json是通过CLI命令使用的:
aws dynamodb scan --table-name sensorData --scan-filter file://scan.json
操作成功,我获得了指定传感器ID的所有数据。
现在如果我只想要时间戳和传感器ID作为结果,我了解到可以使用投影表达式(projection-expression),并尝试进行查询(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"
给我的信息是:
调用查询操作时发生错误(ValidationException):无效的ProjectionExpression:属性名称是保留关键字;保留关键字:timestamp
但是将“timestamp”替换为“sensorId”以进行测试目的,我得到了以下结果:
调用查询操作时发生错误(ValidationException):查询条件缺少关键模式元素:timestamp
我明白sensorId不适用于关键表达式。 KeyConditionExpression仅接受关键属性、哈希键和范围键。 但是如何获得结果呢?
我只想要一个传感器ID的时间戳。 我的主键是错误的吗?使用sensorId作为主键,同时将时间戳作为范围键更好吗?