使用AWS Lambda写入Timestream时TIMESTAMP类型度量值报错
问题原因与解决方案
报错根源
AWS Timestream对TIMESTAMP类型的度量值格式有严格要求:必须传入毫秒级Unix时间戳的字符串,而非ISO 8601格式的日期字符串。你传入的"2022-10-03 06:55:38.175000000"属于ISO格式,不符合规则,因此触发ValidationException。
修复步骤
1. 直接修改负载格式
将EventDate的ISO日期字符串替换为对应的毫秒级Unix时间戳字符串。示例中日期对应的时间戳为1664770538175,修改后的负载如下:
{ "DatabaseName": "mydbname", "TableName": "mytable", "Records": [{ "MeasureName": "m", "MeasureValueType": "MULTI", "Time": "1665042286800", "Dimensions": [{ "Name": "d", "Value": "v" }], "MeasureValues": [{ "Name": "EventName", "Value": "PhotoTaken", "Type": "VARCHAR" }, { "Name": "EventDate", "Value": "1664770538175", "Type": "TIMESTAMP" } ] }] }
2. 代码中动态转换(可选)
如果需要在JavaScript代码中自动转换ISO日期字符串,可使用Date.parse()处理(注意时区一致性,确保时间戳准确):
// 示例:将ISO日期字符串转为毫秒级时间戳字符串 const eventDateStr = "2022-10-03 06:55:38.175000000"; const timestampStr = Date.parse(eventDateStr).toString(); // 构造写入记录时使用转换后的值 const records = [{ MeasureName: "m", MeasureValueType: "MULTI", Time: "1665042286800", Dimensions: [{ Name: "d", Value: "v" }], MeasureValues: [ { Name: "EventName", Value: "PhotoTaken", Type: "VARCHAR" }, { Name: "EventDate", Value: timestampStr, Type: "TIMESTAMP" } ] }];
关于数据保留设置
当前Memory Store和Magnetic Store的保留时长设置与本次报错无关,保留时长仅控制数据的存储周期,不会影响写入数据的格式验证逻辑。
内容的提问来源于stack exchange,提问作者Levon Shirakyan
相关产品推荐
相关产品推荐

