如何使用 Step Functions 中 Lambda 的输出在 DynamoDB 中插入空字符串?
How to insert empty string in DynamoDB using the output of a Lambda in Step Functions?
我正在尝试使用 Step Functions 将调用 Lex 的 Lambda 的输出保存到 DynamoDB。
Lex 响应中的 intentName
有时是 null(未知)。问题是在将响应保存到 DynamoDB 的状态(任务)中,由于这个空字符串,我从 DynamoDB 收到错误。
是否有任何解决方法,可能使用 JsonPath 或 Step Function 的状态机图,以便插入 null 或者可能不插入特定的 属性 DynamoDB?
这是状态机的JSON:
{
"StartAt": "ProcessLex",
"States": {
"ProcessLex": {
"Type": "Task",
"Resource": "arn:aws:lambda:<Region>:<Account Id>:function:getIntent",
"ResultPath": "$.lexResult",
"Next": "ChoiceIfIntent"
},
"SaveToDynamo": {
"Type": "Task",
"Resource": "arn:aws:states:::dynamodb:putItem",
"Parameters": {
"TableName": "MyTable",
"Item": {
"dateTime": {
"S.$": "$.dateTime"
},
"intentName": {
"S.$": "$.lexResult.intentName"
},
"analysis": {
"M.$": "$.lexResult.sentimentResponse"
}
}
},
"End": true
},
"Comprehend": {
"Comment": "To be implemented later",
"Type": "Pass",
"End": true
},
"ChoiceIfIntent": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.lexResult.intentName",
"StringGreaterThanEquals": "",
"Next": "SaveToDynamo"
}
],
"Default": "Comprehend"
}
}
}
问题不是 null 值,问题是在带有 PutItem Api 的 DynamoDB 中,您 不能 插入空字符串。
我知道这很令人沮丧,但最快的解决方案是将 """ 替换为 NULL。
我更喜欢的解决方案是在您的 DynamoDb 客户端设置中将 convertEmptyValue 设置为 true。
const dynamodb = new AWS.DynamoDB.DocumentClient({ convertEmptyValues: true })
更新
从昨天开始,DynamoDB 支持字符串为空值!
看看here.
我正在尝试使用 Step Functions 将调用 Lex 的 Lambda 的输出保存到 DynamoDB。
Lex 响应中的 intentName
有时是 null(未知)。问题是在将响应保存到 DynamoDB 的状态(任务)中,由于这个空字符串,我从 DynamoDB 收到错误。
是否有任何解决方法,可能使用 JsonPath 或 Step Function 的状态机图,以便插入 null 或者可能不插入特定的 属性 DynamoDB?
这是状态机的JSON:
{
"StartAt": "ProcessLex",
"States": {
"ProcessLex": {
"Type": "Task",
"Resource": "arn:aws:lambda:<Region>:<Account Id>:function:getIntent",
"ResultPath": "$.lexResult",
"Next": "ChoiceIfIntent"
},
"SaveToDynamo": {
"Type": "Task",
"Resource": "arn:aws:states:::dynamodb:putItem",
"Parameters": {
"TableName": "MyTable",
"Item": {
"dateTime": {
"S.$": "$.dateTime"
},
"intentName": {
"S.$": "$.lexResult.intentName"
},
"analysis": {
"M.$": "$.lexResult.sentimentResponse"
}
}
},
"End": true
},
"Comprehend": {
"Comment": "To be implemented later",
"Type": "Pass",
"End": true
},
"ChoiceIfIntent": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.lexResult.intentName",
"StringGreaterThanEquals": "",
"Next": "SaveToDynamo"
}
],
"Default": "Comprehend"
}
}
}
问题不是 null 值,问题是在带有 PutItem Api 的 DynamoDB 中,您 不能 插入空字符串。
我知道这很令人沮丧,但最快的解决方案是将 """ 替换为 NULL。
我更喜欢的解决方案是在您的 DynamoDb 客户端设置中将 convertEmptyValue 设置为 true。
const dynamodb = new AWS.DynamoDB.DocumentClient({ convertEmptyValues: true })
更新
从昨天开始,DynamoDB 支持字符串为空值! 看看here.