【问题标题】:DynamoDB Table Query Not SortingDynamoDB 表查询未排序
【发布时间】:2020-02-24 15:30:13
【问题描述】:

我在 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 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 是主分区键的名称。

对可能的原因或解决方法有什么想法吗?

【问题讨论】:

  • 看起来它返回的值首先按Key排序,然后是Sort Key
  • 不,它不是按分区键排序的,因为它在执行扫描时不用于此类。

标签: aws-lambda amazon-dynamodb


【解决方案1】:

您需要为Query 操作提供主键。来自Query docs

使用KeyConditionExpression 参数为分区键 提供特定值。 [...]您可以可选地通过指定 排序键值来缩小查询操作的范围 [...]

您不能通过仅提供排序键来使用Query。如果您只想基于course-lesson-id 过滤大于0 进行查询,则使用Scan - 但是,请注意Scans 在资源使用方面“更昂贵”,即对于大它们需要更长的时间来执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-08
    相关资源
    最近更新 更多