You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于AWS Lambda实时处理DynamoDB表:查询及转Pandas DataFrame问题

DynamoDB查询最近96条数据并转换为Pandas DataFrame

1. 查询DynamoDB表获取最近96行数据

要高效获取最近的96条数据,核心是利用时间戳列作为排序键(主表排序键或全局二级索引(GSI)的排序键),避免全表扫描,提升查询效率。

实现步骤:

  • 表结构配置:如果当前表主键未包含时间戳,建议创建GSI:
    • 分区键设为固定标识(比如stream_type,统一赋值为iot_data),确保所有IoT数据归为同一分区;
    • 排序键指定为时间戳列(如timestamp),支持按时间排序。
  • Lambda查询代码:使用boto3的query方法,指定倒序查询并限制返回条数:
import boto3

# 初始化DynamoDB资源
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('你的DynamoDB表名')

# 执行查询:匹配GSI分区键,倒序取最近96条
response = table.query(
    IndexName='你的GSI名称',
    KeyConditionExpression=boto3.dynamodb.conditions.Key('stream_type').eq('iot_data'),
    ScanIndexForward=False,  # 按排序键降序,最新数据在前
    Limit=96
)

# 提取数据条目
latest_items = response['Items']

如果主表主键是「设备ID(分区键)+ 时间戳(排序键)」,直接查询主表即可,只需将KeyConditionExpression替换为对应设备ID的匹配条件。

2. 转换为Pandas DataFrame格式

DynamoDB返回的Items是字典列表,可直接传入Pandas构造函数,同时处理时间戳列的类型转换:

import pandas as pd

# 转换为DataFrame
df = pd.DataFrame(latest_items)

# 处理时间戳列(根据实际格式调整)
# 场景1:时间戳为Unix秒级时间戳
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='s')
# 场景2:时间戳为ISO格式字符串(如"2024-05-20T12:34:56Z")
df['timestamp'] = pd.to_datetime(df['timestamp'])

# 可选:将DataFrame按时间戳正序排列
df = df.sort_values('timestamp', ascending=True)

注意事项:

Lambda默认环境无Pandas依赖,需通过Lambda层打包Pandas,或使用包含Pandas的容器镜像部署函数。

内容的提问来源于stack exchange,提问作者Higor Nunes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 07:15:21