从DynamoDB获取按时间戳排序的数据

时间:2019-11-27 21:44:05

标签: aws-lambda amazon-dynamodb

我的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']
    }

1 个答案:

答案 0 :(得分:1)

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

相关问题Dynamodb scan in sorted order