【问题标题】:Lambda Python Dynamodb order by not working on specific field通过不在特定领域工作的 Lambda Python Dynamodb 订单
【发布时间】:2021-10-20 05:08:47
【问题描述】:

我正在使用 Lambda Python 并使用查询 KeyConditionExpression 从 DynamodDB 获取记录。 我想按特定字段(createdAt(时间戳))排序,但不工作。 这是我的代码:

import json
import boto3
from boto3.dynamodb.conditions import Key

def lambda_handler(event, context):    
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('mytable')
    resp = table.query(
         IndexName='empid-template_for-index',
         KeyConditionExpression=
             Key('template_for').eq('mytemplate') & Key('empid').eq('myempid'),
         Limit=10,
         ScanIndexForward=False,
     )
     print(resp)

你能帮我吗,我怎样才能按字段 createdAt 的降序获得前 10 条记录?

【问题讨论】:

  • 可以分享一下你表的分区键和排序键吗?
  • @stijndepestel 表的分区键是“query_id”并且未定义排序键。对于上述查询创建的索引,分区键为“empid”,排序键为“template_for”,我想要相同的键条件,但想使用创建的字段进行排序。

标签: python-3.x aws-lambda amazon-dynamodb


【解决方案1】:

如果您想对 DynamoDB 查询的结果进行排序,则始终需要将此属性作为排序键。这可以是表索引的排序键、全局二级索引或本地二级索引,但无法检索以任何其他方式排序的结果。

对另一个属性进行排序的另一种可能性是在客户端对它们进行排序,这具有明显的缺点,即必须将所有数据加载到内存中并对整个数据集执行排序算法。这对于大型数据集显然是不可行的,并且可能会增加您需要检索的数据量。

来自the documentation

查询结果始终按排序键值排序。如果排序键的数据类型是数字,则以数字顺序返回结果。否则,按 UTF-8 字节顺序返回结果。默认情况下,排序顺序是升序。要反转顺序,请将 ScanIndexForward 参数设置为 false。

【讨论】:

    猜你喜欢
    • 2017-12-08
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 2019-01-05
    • 2010-09-06
    • 2012-07-02
    相关资源
    最近更新 更多