【问题标题】:Get data from DynamoDB sorted by timestamp从 DynamoDB 中获取按时间戳排序的数据
【发布时间】:2020-03-23 12:29:59
【问题描述】:

我的 DynamoDB 表中有附加的数据结构。 to 是 PartitionKey,from 是排序键。我使用以下 Python Lambda 函数来检索我的所有数据。我目前面临的问题是响应结果没有按时间戳排序(从新到旧)。

def lambda_handler(event, context):
    response = table.scan()

    return {
        'statusCode': 200,
        'body': response['Items']
    }

DynamoDB 表结构

+-----------+-----------+------------+---------------+-----------+
|    to     |   from    |   medium   |  messageBody  | timestamp |
+-----------+-----------+------------+---------------+-----------+
| 123456789 | 1234:4321 | somemedium | Hello World 1 |  23422523 |
| 123456789 | 9876:4321 | somemedium | Hello World 2 |  23432529 |
| 123456789 | 4565:3213 | somemedium | Hello World 3 |  23467839 |
| 123456789 | 4565:3323 | somemedium | Hello World 4 |  23533789 |
+-----------+-----------+------------+---------------+-----------+

更新:

import boto3
from boto3.dynamodb.conditions import Key

import logging
import json
import decimal


## Set logger
logger = logging.getLogger()
logger.setLevel(logging.INFO)

## Set DynamoDB
dynamodb = boto3.resource("dynamodb")
table = dynamodb.Table("MyTable")

logger.info(f"CREATED NEW ITEM IN DYANMODB")

def lambda_handler(event, context):
    response = table.query(
        IndexName='to-timestamp-index',
        KeyConditionExpression=Key('to').eq(12345)
    )

    return {
        'statusCode': 200,
        'body': response['Items']
    }

【问题讨论】:

    标签: aws-lambda amazon-dynamodb


    【解决方案1】:

    您使用的是table.scan(),它不保证任何订购。您可以使用时间戳作为sort/range 键创建一个新的二级索引。之后,在该二级索引上使用query(而不是扫描)来检索按范围键排序的结果。

    相关问题Dynamodb scan in sorted order

    【讨论】:

    • 嗨 Rubbal,我在 Python 中调整了我的代码(见更新)。但是,我总是得到"errorMessage": "Parameter validation failed:\nInvalid type for parameter KeyConditionExpression, value: <boto3.dynamodb.conditions.Key object at 0x7f8fe8dbdaf0>, type: <class 'boto3.dynamodb.conditions.Key'>, valid types: <class 'str'>",。你知道为什么吗?
    • 我相信我现在用KeyConditionExpression=Key('to').eq(12345),解决了它
    猜你喜欢
    • 2022-01-06
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 2017-09-10
    • 2018-02-28
    • 1970-01-01
    相关资源
    最近更新 更多