我使用Lambda(Python)查询我的DynamoDB数据库。我正在使用boto3库,我能够进行“等效”查询:
这个脚本的工作原理是:
import boto3
from boto3.dynamodb.conditions import Key, Attr
import json
def create_list(event, context):
resource = boto3.resource('dynamodb')
table = resource.Table('Table_Name')
response = table.query(
TableName='Table_Name',
IndexName='Custom-Index-Name',
KeyConditionExpression=Key('Number_Attribute').eq(0)
)
return response
但是,当我将查询表达式更改为以下内容时:
KeyConditionExpression=Key('Number_Attribute').gt(0)
我得到一个错误:
"errorType": "ClientError",
"errorMessage": "An error occurred (ValidationException) when calling the Query operation: Query key condition not supported"
根据该[1]资源,“gt”是Key()的方法。有人知道这个库是否已经更新,或者除了“eq”之外还有什么其他方法可用吗?
[1] http://boto3.readthedocs.io/en/latest/reference/customizations/dynamodb.html#ref-发电机工况
---------编辑----------
我还尝试了旧方法,使用:
response = client.query(
TableName = 'Table_Name',
IndexName='Custom_Index',
KeyConditions = {
'Custom_Number_Attribute':{
'ComparisonOperator':'EQ',
'AttributeValueList': [{'N': '0'}]
}
}
)
这是有效的,但当我尝试:
response = client.query(
TableName = 'Table_Name',
IndexName='Custom_Index',
KeyConditions = {
'Custom_Number_Attribute':{
'ComparisonOperator':'GT',
'AttributeValueList': [{'N': '0'}]
}
}
)
...它不起作用。
为什么EQ是在这些情况下唯一有效的方法?我不确定我在文档中遗漏了什么。
根据我的想法:您的分区键是Number_属性,因此在执行查询时,您不能执行
gt
(您可以执行eq
,就是这样。)
在执行
查询时,您可以对排序键执行
gt
或between
。它也被称为范围键,因为它“巧妙地”将项目放在彼此相邻的位置,所以它提供了在查询中高效地执行
gt
和之间的
的可能性
现在,如果您想对分区键执行
between
,则必须使用scan
,如下所示:
Key('Number_Attribute').gt(0)
response = table.scan(
FilterExpression=fe
)
请记住以下有关扫描的事项:
scan方法读取整个表中的每个项目,并返回表中的所有数据。您可以提供一个可选的filter_表达式,以便只返回与您的条件匹配的项。但是,请注意,过滤器仅在扫描整个表后应用。
换句话说,与查询相比,这是一个有点昂贵的操作。您可以在这里的留档中看到一个示例。
希望有帮助!
当我在GSI上查询时,我对Amazon DynamoDBv2的Amazon DynamoDBAsync.query异步请求的实现返回代码400“查询条件错过了关键模式元素......”。 我尝试使用DynamoDBAttribute名称(“myAttr”)和GSI的实际索引名称(“idx\u global\u myAttr”),并收到相同的错误代码。这与Docker的图片“amazon/dynam
我有以下序列
我不确定这是否是一个与我没有这台计算机的管理权限有关的问题。任何帮助,以便我可以进一步排除故障,将非常感谢! 谢谢
问题内容: 我正在使用石英进行日程安排。 它接受5个参数。(秒,分钟,小时,daysOfMonth,月份)。 当我通过第四个参数作为“ 09”。Eclipse给我错误“ int类型的文字八进制09(数字9)超出范围”。 但是,当我将第四个参数作为“ 9”而不是“ 09”传递时,它起作用了。 谁能解释这个错误? 问题答案: 在Java中,如果要定义整数,则前导“ 0”将表示您正在以八进制定义数字
我面临的问题是在java中使用hibernate为postgres表执行以下查询。 该查询由使用内部连接从3个表中检索数据组成。 QryJourney=“选择journey.id、journey.operatingday、journey.linename、journey.scheduledeparturestopname、journeydetail.stopname、journeydetail.l
我有一个带有左连接的SELECT语句,连接的表是子查询。Oracle无法识别第二个子查询中第一个子查询的别名。它适用于DB2,但不适用于Oracle。我如何实现它或重写我的查询? Oracle错误消息:ORA-00904:“B”。“C3”:无效标识符