Aws lambda DynamoDB表查询未排序
我在DynamoDB中创建了一个表,该表同时具有主键(字符串)和排序键(编号)(课程课程id),我使用以下简单的Lambda函数查询课程id>0的表:Aws lambda DynamoDB表查询未排序,aws-lambda,amazon-dynamodb,Aws Lambda,Amazon Dynamodb,我在DynamoDB中创建了一个表,该表同时具有主键(字符串)和排序键(编号)(课程课程id),我使用以下简单的Lambda函数查询课程id>0的表: import json import boto3 from boto3.dynamodb.conditions import Key, Attr #always start with the lambda_handler def lambda_handler(event, context): # make the connection
import json
import boto3
from boto3.dynamodb.conditions import Key, Attr
#always start with the lambda_handler
def lambda_handler(event, context):
# make the connection to dynamodb
dynamodb = boto3.resource('dynamodb')
# select the table
table = dynamodb.Table("table-name")
response = table.query(
KeyConditionExpression=Key('course-lesson-id').gt(0)
)
items = response['Items']
print(items)
据我所知,结果应该根据排序键以数字顺序返回,但我得到以下错误:
ClientError: An error occurred (ValidationException) when calling the
Query operation: Query condition missed key schema element: course-
lesson
课程是主分区键的名称
关于可能的原因或修复方法有什么想法吗?您需要为
查询操作提供主键。从:
使用KeyConditionExpression
参数为分区键提供特定值。[…]您可以通过指定排序键值[…],选择性地缩小查询操作的范围
您不能仅通过提供排序键来使用查询
。如果您只想根据课程课程id
筛选大于0
,则使用Scan
-但是,请注意Scan
在资源使用方面“更昂贵”,也就是说,对于大型表,它们的执行时间要长得多。您需要为查询操作提供主键。从:
使用KeyConditionExpression
参数为分区键提供特定值。[…]您可以通过指定排序键值[…],选择性地缩小查询操作的范围
您不能仅通过提供排序键来使用查询
。如果您只想根据课程课程id
筛选大于0
,则使用Scan
-但是,请注意Scan
在资源使用方面“更昂贵”,也就是说,对于大表,它们需要更长的时间来执行。它看起来是先返回按键排序的值,然后返回按键排序的值。不,它不是按分区键排序,因为在执行扫描时它不用于此。它看起来是先返回按键排序的值,然后排序键
。不,它不是按分区键排序,因为它在执行扫描时不用于分区键。