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

时间:2014-06-26 19:05:25

标签: ruby postgresql amazon-web-services amazon-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

1 个答案:

答案 0 :(得分:6)

这里你应该做的是在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 - Append content at the end of the existing s3 file using fog

修改的 所以我在没有阅读答案的情况下跳过这个问题.... 所以更正,你需要在本地创建文件,一旦达到一定的大小,将其上传到s3,然后redshift load命令。

这里是加载到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,用于启动,调整大小和管理。应该通过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)

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