3

Рассмотрим следующий пример:Как следует отформатировать записи для AWS Kinesis Firehose для Redshift?

  • таблица в Redshift называется «народ», который имеет поля ID, имя и возраст
  • кинезис Firehose поток называется «народ», который настроен на запись в таблице «народ» и значение для столбцов таблицы Redshift равно '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); 
}); 

Вот некоторые из докторов я проверяемые:

ответ

4

Ответ здесь:

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); 
}); 
2

Вы также можете отправить прямой JSON до тех пор, как вы правильно избежать вещи и использовать правильные параметры копирования. См. COPY FROM JSON и JSON AS. Если вы используете опцию «auto» для JSON AS, тогда она довольно гибкая. Если вы отправляете несколько словарей в один putRecordBatch, НЕ разделяйте их пробелом или символом перевода строки, вы можете просто отправить

{ key1: "value1", key2: 34 }{ key1: "value2", key2: 45 } 
Смежные вопросы