DynamoDB 主键时间戳
DynamoDB primarykey timestamp
我正在尝试查询 dynamodb 中的数据集,其中主键是时间戳。
首先,我想获取特定 sensorId 的所有数据。
我尝试扫描 (scan.json):
{
"sensorId": {
"AttributeValueList": [{
"S": "1234"
}],
"ComparisonOperator": "EQ"
}
}
这个 Json 是通过 CLI 命令使用的:
aws dynamodb scan --table-name sensorData --scan-filter file://scan.json
成功并为我提供了指定传感器 ID 的所有数据。
现在,如果我只想得到时间戳和 sensorId 作为结果,我阅读了有关 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"
给我:
An error occurred (ValidationException) when calling the Query
operation: Invalid ProjectionExpression: Attribute name is a reserved
keyword; reserved keyword: timestamp
但是为了测试目的用“sensorId 替换 "timestamp" 给了我:
An error occurred (ValidationException) when calling the Query
operation: Query condition missed key schema element: timestamp
我知道 sensorId 对键表达式无效..
KeyConditionExpression 只接受键属性、散列键和范围键。
但是如何得到结果呢?
我只想要 sensorId 的时间戳。
我的主键错了吗?应该更好地使用 sensorId 作为主键和时间戳作为范围键?
根据你的情况,换个密钥比较好。使用 SensorID 作为分区键,使用时间戳作为排序键。
通过这种方式,您可以查询(无需扫描所有项目)给定 SensorID 的项目。也可以按照时间戳的顺序对它们进行排序。
如果您有更大的数据集(超过几 Killobytes),创建 LSI 或 GSI 来投影给定查询所需的属性会很有效。
注意:时间戳是reserved word in DynamoDB. You can use Expression Attribute Names以避免在查询表达式中使用保留属性时出现的错误。
我正在尝试查询 dynamodb 中的数据集,其中主键是时间戳。 首先,我想获取特定 sensorId 的所有数据。 我尝试扫描 (scan.json):
{
"sensorId": {
"AttributeValueList": [{
"S": "1234"
}],
"ComparisonOperator": "EQ"
}
}
这个 Json 是通过 CLI 命令使用的:
aws dynamodb scan --table-name sensorData --scan-filter file://scan.json
成功并为我提供了指定传感器 ID 的所有数据。
现在,如果我只想得到时间戳和 sensorId 作为结果,我阅读了有关 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"
给我:
An error occurred (ValidationException) when calling the Query operation: Invalid ProjectionExpression: Attribute name is a reserved keyword; reserved keyword: timestamp
但是为了测试目的用“sensorId 替换 "timestamp" 给了我:
An error occurred (ValidationException) when calling the Query operation: Query condition missed key schema element: timestamp
我知道 sensorId 对键表达式无效.. KeyConditionExpression 只接受键属性、散列键和范围键。 但是如何得到结果呢?
我只想要 sensorId 的时间戳。 我的主键错了吗?应该更好地使用 sensorId 作为主键和时间戳作为范围键?
根据你的情况,换个密钥比较好。使用 SensorID 作为分区键,使用时间戳作为排序键。
通过这种方式,您可以查询(无需扫描所有项目)给定 SensorID 的项目。也可以按照时间戳的顺序对它们进行排序。
如果您有更大的数据集(超过几 Killobytes),创建 LSI 或 GSI 来投影给定查询所需的属性会很有效。
注意:时间戳是reserved word in DynamoDB. You can use Expression Attribute Names以避免在查询表达式中使用保留属性时出现的错误。