如何将AWS Kinesis Firehose格式的记录格式化为Redshift?

时间:2015-12-27 21:29:29

标签: amazon-web-services amazon-redshift amazon-kinesis-firehose

请考虑以下事项:

  • Redshift中的一个名为“people”的表,其中包含字段ID,名称和年龄
  • 名为'people'的kinesis firehose流,配置为写入'people'表,'Redshift table columns'的值为'id,name,age'

目前尚不清楚如何格式化'数据'blob。以下是使用制表符分隔数据的代码示例:

let AWS = require('aws-sdk');
let firehose = new AWS.Firehose();
let params = {
  DeliveryStreamName: 'people',
  // id,name,age
  Records: [{Data: '4ccf6d3a-acdf-11e5-ad54-28cfe91fa8f1\tBob\tSmith'}]
};
firehose.putRecordBatch(params, (err, result) => {
  console.log(err || result);
});

以下是我检查过的一些文档:

2 个答案:

答案 0 :(得分:6)

答案在这里:

http://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-format.html

字段必须是管道'|'默认分开。行应该用新行分隔。

更新了更正后的代码:

let AWS = require('aws-sdk');
let firehose = new AWS.Firehose();
let params = {
  DeliveryStreamName: 'people',
  // id,name,age
  Records: [{Data: '4ccf6d3a-acdf-11e5-ad54-28cfe91fa8f1|Bob|Smith\n'}]
};
firehose.putRecordBatch(params, (err, result) => {
  console.log(err || result);
});

答案 1 :(得分:3)

只要您正确地逃避并使用正确的COPY选项,您也可以直接发送JSON。请参阅COPY FROM JSONJSON AS。如果你使用JSON AS的'auto'选项,那么它非常灵活。如果你在一个putRecordBatch中发送多个词典,不要用空格或换行符分隔它们,你可以发送

{ key1: "value1", key2: 34 }{ key1: "value2", key2: 45 }