2015-06-07 3 views
5

Quali sono alcuni modi per inserire dati in Amazon Redshift usando node.js?Carica i dati in Redshift usando Node.js

Questo dovrebbe essere piuttosto semplice, ma non sono riuscito a trovare alcun esempio concreto per un caricamento efficiente.

risposta

11

Un modo di fare che potrebbe essere quella di caricare i dati nel S3 utilizzando AWS node.js SDK (c'è un example nella documentazione), quindi utilizzare node-pg ai COPY i dati in Redshift:

var pg = require('pg'); 

var conString = "postgres://user:[email protected]:port/schema"; 

var client = new pg.Client(conString); 
    client.connect(function(err) { 
     if(err) { 
     return console.error('could not connect to postgres', err); 
     } 

     //assuming credentials are exported as enviornment variables, 
     //both CLI- and S3cmd-style are supported here. 
     //Also, you may want to specify the file's format (e.g. CSV), 
     //max errors, etc. 
     var copyCmd = 'copy my_redshift_table from \'s3://your_bucket/your_file\' credentials \'aws_access_key_id=' 
     + (process.env.AWS_ACCESS_KEY || process.env.AWS_ACCESS_KEY_ID) 
     + ';aws_secret_access_key=' 
     + (process.env.AWS_SECRET_KEY || process.env.AWS_SECRET_ACCESS_KEY) 
     + '\''; 

     client.query(copyCmd, function(err, result) { 
     if(err) { 
      return console.error('error running query', err); 
     } 
     logger.info("redhshift load: no errors, seem to be successful!"); 
     client.end(); 
     }); 
    }); 

Nota che don' ho bisogno di driver speciali per farlo funzionare.

+0

Risposta accettata perché la domanda è stata risolta e è trascorso abbastanza tempo. Tuttavia, cambierò felicemente a qualsiasi risposta migliore se ne viene visualizzata una. – etov

+0

Hai qualche esperienza con il modulo 'pool' di pg per emettere i comandi di COPY? – jdelman

+0

@ js87 - no, non ho provato a utilizzare il modulo pool. Se lo fai e risulta essere meglio del semplice pg per favore posta una risposta aggiuntiva! – etov