【问题标题】:How to use ruby to write individual records to a Redshift database?如何使用 ruby​​ 将单个记录写入 Redshift 数据库?
【发布时间】:2014-06-26 19:05:24
【问题描述】:

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

有没有办法可以使用我的亚马逊登录凭据和我的 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

【问题讨论】:

    标签: ruby postgresql amazon-web-services amazon-redshift


    【解决方案1】:

    实际上,您应该在 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,该 SDK 用于启动、调整大小和管理。为此应通过 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是psql的东西,你对psql了解多少?

    【讨论】:

    • 你能否分享一个可以通过 ruby​​ 编写任意查询的 ruby​​ 代码的 sn-p?我在 redshift api 中看不到任何“连接”或“查询”功能。否则,与示例插入语句的第一个链接将不相关。谢谢!
    • 我已经尝试写 ruby​​,如有必要请清理,但我希望我的意思很清楚,不要使用 AWS sdk,使用 Ruby PSQL 连接器
    • 最后一个问题,什么是“主机”?和 redshift 控制台上给出的端点一样吗?
    • 还需要的 gem 是 'pg' 而不是 'pq' 您可能会为未来的访问者修改答案。在代码中为“主机”使用“端点”就像一个魅力:)
    猜你喜欢
    • 2018-09-27
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多