3

Considérez ce qui suit:Comment les enregistrements doivent-ils être formatés pour AWS Kinesis Firehose à Redshift?

  • Une table dans Redshift appelé « peuple » qui a id champs, le nom et l'âge
  • Un flux firehose Kinesis appelé « peuple » qui est configuré pour écrire à la table « personnes » et la valeur pour 'Redshift table columns' est 'id, name, age'

Il n'est pas clair comment formater le blob 'Data'. Voici un exemple de ce que le code ressemble avec les données séparées par des onglets:

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

Voici quelques-uns des documents que j'ai vérifié:

Répondre

4

La réponse est:

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

Les champs doivent être pipe '|' séparé par défaut. Les lignes doivent être séparées par de nouvelles lignes.

Mise à jour le code corrigé:

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

Vous pouvez également envoyer JSON droite aussi longtemps que vous échapper correctement les choses et d'utiliser les bonnes options de copie. Voir COPY FROM JSON et JSON AS. Si vous utilisez l'option 'auto' pour JSON AS, c'est assez flexible. Si vous envoyez plusieurs dictionnaires dans un putRecordBatch, ne les séparez PAS avec de l'espace ou des sauts de ligne, vous pouvez simplement envoyer

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