【发布时间】:2020-04-20 08:30:40
【问题描述】:
我对 DynamoDB 非常陌生。我想查询一定时间范围内的所有数据。
column = "timerange" 是主排序键
column = "name" 是主分区键。
我想在 2 个时间范围内获取所有数据。
这是我的查询。
from decimal import *
from boto3.dynamodb.conditions import Key, Attr
import boto3
import time
from datetime import datetime
dynamo = boto3.resource('dynamodb')
table = dynamo.Table('tablename')
a = time.mktime(datetime.strptime('2020-03-26 14:29:10','%Y-%m-%d %H:%M:%S').timetuple())
b = time.mktime(datetime.strptime('2020-03-26 14:30:10','%Y-%m-%d %H:%M:%S').timetuple())
response = table.query(
KeyConditionExpression =
Key('timerange').between(Decimal(a), Decimal(b)))
这给了我一个错误ClientError: An error occurred (ValidationException) when calling the Query operation: Query condition missed key schema element: 在搜索互联网后,我发现您需要在查询中包含主分区键
所以我尝试了 https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html 的 Contains 方法
response = table.query(
KeyConditionExpression =
Key('name').contains('a', 'b') &
Key('timerange').between(Decimal(a), Decimal(b)))
我显然不完全理解。
如何获取给定时间范围 [a,b] 内的所有数据?
【问题讨论】:
-
我建议您观看一些来自 AWS 的 NoSQL DynamoDB 视频,了解这一切是如何在 DynamoDB 中完成的。
-
在您的第一个查询中,您缺少分区键 (
name)。在第二个查询中,您不能在单个查询中查询多个分区键值——分区键条件始终为equals,但排序键可以是一个范围。推荐阅读:dynamodbguide.com/querying -
@jarmod 是的,我知道分区键需要相等。但我想得到所有的名字我怎么能 eq([all names]) ?
标签: python amazon-dynamodb boto3 amazon-dynamodb-data-modeling