从以下问题开始,AWS DynamoDB Stream into Redshift
DynamoDB - > DynamoDBStreams - > Lambda函数 - > Kinesis Firehose - >红移。
如何配置我的Kinesis功能以获取Lambda函数源?
我创建了一个DynamoDB表(Purchase Sales),并添加了DynamoDB Streams。然后我配置了Lambda函数来拾取DynamoDB流。我的问题是如何配置Kinesis来获取Lambda函数Source?我知道如何配置Lambda Transformation,但是想要选择Source。不知道如何配置下面的直接投放来源。
执行以下步骤:
答案 0 :(得分:1)
在您的情况下,您可以将dynamodb传输到redshift
DynamoDB --> DynamoDBStreams --> Lambda Function --> Kinesis Firehose --> Redshift.
首先,您需要一个lambda函数来处理DynamoDBStream。对于每个DynamoDBStream事件,请使用firehose PutRecord
API将数据发送到firehose。来自example
var firehose = new AWS.Firehose();
firehose.putRecord({
DeliveryStreamName: 'STRING_VALUE', /* required */
Record: { /* required */
Data: new Buffer('...') || 'STRING_VALUE' /* Strings will be Base-64 encoded on your behalf */ /* required */
}
}, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
接下来,我们必须知道如何将数据插入到RedShift中。来自firehose document,
对于向Amazon Redshift的数据传送,Kinesis Firehose首先提供 以前面描述的格式将数据传入S3存储桶。 然后,Kinesis Firehose发出要加载的Amazon Redshift COPY命令 从S3存储桶到Amazon Redshift集群的数据。
因此,我们应该知道让COPY
命令将数据映射到RedShift架构的数据格式。我们必须遵循data format requirement for redshift COPY command。
默认情况下,COPY命令需要源数据 字符分隔的UTF-8文本。默认分隔符是管道 字符(|)。
因此,您可以对输入dynamodb流事件的lambda进行编程,将其转换为管道(|)分隔的行记录,并将其写入firehose。
var firehose = new AWS.Firehose();
firehose.putRecord({
DeliveryStreamName: 'YOUR_FIREHOSE_NAME',
Record: { /* required */
Data: "RED_SHIFT_COLUMN_1_DATA|RED_SHIFT_COLUMN_2_DATA\n"
}
}, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
请记得添加\n
,因为firehose不会为您添加新行。