DynamoDB表查询未排序

时间:2020-02-24 03:03:14

标签: aws-lambda amazon-dynamodb

我在DynamoDB中创建了一个同时具有主键(字符串)和排序键(数字)(course-lesson-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 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

course-lesson是主分区键的名称。

对可能的原因或解决方案有任何想法吗?

1 个答案:

答案 0 :(得分:2)

您需要为Query操作提供主键。在Query docs中:

使用KeyConditionExpression参数为分区键提供特定的值。 [...]您可以可选,通过指定排序键值[...]

来缩小查询操作的范围

不能仅通过提供排序键来使用Query。如果您只想基于course-lesson-id进行查询以查询大于0的情况,则可以使用Scan-但是,请注意Scan在资源使用条件,例如,对于大表,它们需要更长的时间来执行。