如何使用ruby将单个记录写入Redshift数据库?

目前,我们有一个脚本可以解析数据并将其一次上传到mysql数据库。 最近,我们决定改用aws redshift。

有没有办法可以使用我的亚马逊登录凭据和我的红移群集信息将这些记录直接上传到redshift数据库?

我在网上找到的所有指南都建议从S3存储桶导入文本或csv文件,但这对我的用例来说不太实用。

谢谢你的帮助

我想做这样的事情:

require 'aws-sdk' require 'pg' AWS.config(access_key_id: 'my_access_key_id', secret_access_key: 'my_secret_access_key', region: 'us-west-2') redshift = AWS::Redshift.new credentials = { driver: "org.postresql.Driver" url: "my_connect_url" username: "my_username" password: "my_password" database: "my_db" } db = redshift.connect(credentials) # **NOT A REAL LINE OF CODE, I WISH IT WAS** sql_query = "INSERT INTO my_table (my_column) VALUES ('hello world'); " db.query(sql_query) db.close 

你真的要做的就是在S3中一次插入一条记录。 然后定期加载该文件。 Redshift在加载100,000行文件时效率更高,然后逐个输入100行数据(粗略估计我的经验……)。 如果你真的想按记录插入东西,你可以使用任何标准的PSQL连接器来执行ruby。 可以使用jdbc / odbc psql驱动程序连接Redshift。 有点像你写的示例程序。

我不建议这样做……但这里是插入http://docs.aws.amazon.com/redshift/latest/dg/r_INSERT_30.html的文档

我会查看关于附加到s3文件的这个问题。 这真的是你想做的……

Ruby – 使用雾将内容附加到现有s3文件的末尾

编辑所以我有点跳过这个问题而没有阅读答案….所以更正,你需要在本地创建文件,一旦达到一定的大小上传到s3,然后redshift加载命令。

在这里加载到redshift http://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-S3.html

或者….你可以尝试从远程主机加载数据…我以前从未这样做过,但它基本上会跳过s3加载部分,但你仍然希望移动一个大文件。 http://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-remote-hosts.html

最后,如果你真的想要通过记录插入记录,你可能应该使用RDS而不是Redshift,除非数据集很大,否则你将获得更好的性能。

好吧,这是我对ruby的尝试,但说实话我以前从未做过RUBY,但实际上它只是与PSQL数据库的连接。 您正尝试通过AWS SDK连接到redshift,用于启动,resize和管理。 应该通过JDBC / ODBC驱动程序sqlworkbench,psql linux cli等连接到redshift。

 require 'pg' host = 'redshift-xxxx.aws.com' port = 5439 options = '' tty = '' dbname = 'myDB' login = 'master' password = 'M@st3rP@ssw0rd' conn = PGconn.new(host, port, options, tty, dbname, login, password) 

其中主机,端口,dbname,登录名和密码都在redshift的午餐期间设置。 DBname是一个psql的东西,你对psql了解多少?