如何通过Lambda函数删除DynamoDB中属性名为时间戳的旧数据?
解决方案建议
1. 设备ID过滤+排除30天以上数据
SQL数据库查询场景
假设数据表包含device_id(设备ID)、record_time(记录时间)字段,直接用SQL语句添加过滤条件:
SELECT * FROM your_table WHERE device_id = '指定设备ID' AND record_time >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY);
若记录时间是UNIX时间戳格式,调整为:
SELECT * FROM your_table WHERE device_id = '指定设备ID' AND record_time >= UNIX_TIMESTAMP(DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY));
Python Pandas处理场景
假设数据已读取为DataFrame,执行以下过滤操作:
import pandas as pd from datetime import datetime, timedelta # 替换为你的目标设备ID target_device = "指定设备ID" # 计算30天前的时间节点 cutoff_time = datetime.now() - timedelta(days=30) # 先确保时间列是datetime类型(如果是字符串格式) df["record_time"] = pd.to_datetime(df["record_time"]) # 双条件过滤 filtered_data = df[(df["device_id"] == target_device) & (df["record_time"] >= cutoff_time)]
2. 按属性名过滤数据的方法
SQL(属性存储为JSON字段)
如果属性存在JSON类型字段(如attributes),用JSON函数筛选:
-- MySQL示例:保留包含"humidity"属性的记录 SELECT * FROM your_table WHERE JSON_EXTRACT(attributes, '$.humidity') IS NOT NULL;
Python Pandas(属性为字典/JSON列)
若DataFrame的attributes列是字典类型,通过以下方式筛选:
# 筛选包含指定属性名的记录 has_target_attr = df[df["attributes"].apply(lambda x: "目标属性名" in x)] # 筛选该属性值满足特定条件的记录(例如属性值大于30) attr_value_filter = df[df["attributes"].apply(lambda x: x.get("目标属性名", 0) > 30)]
内容的提问来源于stack exchange,提问作者Alifher Silva
相关产品推荐
相关产品推荐

