我的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']
}
答案 0 :(得分:1)
您使用的table.scan()
不保证任何订购。您可以使用时间戳作为sort/range
键来创建新的二级索引。之后,在该二级索引上使用query
(而不是扫描)来检索按范围键排序的结果。