使用Node.js将数据加载到Redshift

6

如何使用node.js向Amazon Redshift插入数据?

这应该很简单,但我找不到任何有效加载的具体示例。

1个回答

18

一种方法是使用AWS node.js SDK(文档中有一个示例),将数据加载到S3中,然后使用node-pg将数据COPY到Redshift中:

var pg = require('pg');

var conString = "postgres://user:password@db-endpoint: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();
      });
    });

请注意,您无需任何特殊驱动程序即可运行此内容。


已接受自己的答案,因为问题已解决并且足够时间已经过去。但是如果有更好的答案出现,我很乐意进行更改。 - etov
你有使用pg的pool模块发出COPY命令的经验吗? - jdelman
@js87 - 不,我没有尝试使用池模块。如果你尝试了并且发现它比普通的pg更好,请发布一个额外的答案! - etov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接