2014-06-26 84 views
4

目前,我們有一個腳本可以解析數據並將其一次上傳到mysql數據庫。最近,我們決定切換到aws redshift。如何使用ruby將單個記錄寫入Redshift數據庫?

有沒有一種方法可以使用我的amazon登錄憑證和我的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 

回答

6

真的是你應該做的是在這裏你插入一條記錄在S3的時間。然後定期執行該文件的加載。 Redshift在加載100,000行文件時效率更高,然後說一個一個地輸入100行數據(粗略估計我的經驗......)。如果你真的想通過記錄插入東西記錄,你可以用任何標準的PSQL連接器來做到這一點的紅寶石。可以使用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,然後紅移加載命令。

而且這裏裝入紅移 http://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-S3.html

OR ....你可以嘗試從遠程主機此加載數據...我從來沒有這樣做過,但它基本上跳過S3負載的一部分,但你仍然想要一個大文件移動。最後,如果你真的想通過記錄插入記錄,你應該使用RDS而不是Redshift,除非你的數據集很大,否則你將獲得更好的性能。

好吧,這是我的紅寶石嘗試,但說實話,我從來沒有做過RUBY,但它真的只是一個連接到PSQL數據庫。您正試圖通過AWS SDK連接到redshift,這是用來啓動,調整大小和管理的。連接到紅移爲這應該通過JDBC/ODBC驅動程序sqlworkbench,PSQL的Linux命令行,等來完成...

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

凡紅移的午餐期間主機,端口,DBNAME,登錄名和口令都成立。 DBname是一個psql的東西,你知道很多關於psql的嗎?

+0

你可以通過任何機會分享一段可以通過ruby編寫任意查詢的ruby代碼片段嗎?在redshift api中沒有看到任何「連接」或「查詢」功能。 否則,與示例插入語句的第一個鏈接將不相關。 謝謝! – johncorser

+0

我試圖寫紅寶石,如果有必要請清理,但我希望我的觀點清楚,不要使用AWS sdk,使用Ruby PSQL連接器 –

+0

最後一個問題,什麼是「主機」?這與紅移控制檯上給出的端點是否相同? – johncorser

相關問題