2013-03-15 40 views
11

有沒有辦法從Amazon Redshift執行SQL轉儲?有沒有辦法從Amazon Redshift執行SQL轉儲

您可以使用SQL工作臺/ J客戶端嗎?

+0

以下是亞馬遜的評論主題:https://forums.aws.amazon.com/message.jspa?messageID = 428466#428466 – 2013-05-22 16:38:16

回答

2

我們目前正在使用Workbench/J成功搭配Redshift。

關於轉儲,當時在Redshift中沒有可用的模式導出工具(pg_dump不起作用),儘管數據總是可以通過查詢提取。

希望能提供幫助。

編輯:請記住,排序和分配鍵之類的東西不反映在由Workbench/J生成的代碼上。看看系統表pg_table_def以查看每個字段的信息。它指出,如果一個字段是sortkey或distkey,以及這樣的信息。文檔該表:

http://docs.aws.amazon.com/redshift/latest/dg/r_PG_TABLE_DEF.html

+1

我成功使用Workbench/J並可以確認它的工作。 – 2013-05-14 22:12:43

+0

不確定你爲什麼說pg_dump不起作用;它對我來說工作得很好,雖然正如你所說的Workbench/J,distkey/sortkey也不包括在內。 – congusbongus 2014-08-01 06:39:08

23

模式的pg_dump可能不會在過去的工作,但現在這樣。

pg_dump -Cs -h my.redshift.server.com -p 5439 database_name > database_name.sql

買者自負:pg_dump仍然會產生一些Postgres的特定的語法,也忽略了紅移SORTKEYDISTSTYLE定義爲你的表。

另一個不錯的選擇是use the published AWS admin script views生成您的DDL。它處理SORTKEY/DISTSTYLE,但是我發現它在捕獲所有FOREIGN KEY時會出錯,並且不處理表權限/所有者。你的milage可能會有所不同。

爲了獲得數據本身的轉儲,不幸的是您仍然需要在每個表上使用UNLOAD command

這是一種生成它的方法。要知道,select *語法會失敗,如果你的目標表不具有相同的列順序爲您的源表:

select 
    ist.table_schema, 
    ist.table_name, 
    'unload (''select col1,col2,etc from "' || ist.table_schema || '"."' || ist.table_name || '"'') 
to ''s3://SOME/FOLDER/STRUCTURE/' || ist.table_schema || '.' || ist.table_name || '__'' 
credentials ''aws_access_key_id=KEY;aws_secret_access_key=SECRET'' 
delimiter as '','' 
gzip 
escape 
addquotes 
null as '''' 
--encrypted 
--parallel off 
--allowoverwrite 
;' 
from information_schema.tables ist 
where ist.table_schema not in ('pg_catalog') 
order by ist.table_schema, ist.table_name 
; 
+0

確實,pg_dump現在可以工作 – gauravphoenix 2016-02-05 00:59:44

0

如果您使用的是Mac,我使用Postico和它的偉大工程。只需右鍵單擊表格並單擊導出。

1

是的,你可以通過幾種方式來做到這一點。

  1. UNLOAD()到S3桶 - 這是最好的。您幾乎可以在任何其他機器上獲得您的數據。 (更多信息在這裏:http://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html

  2. 使用您擁有的Linux實例將表中的內容傳輸到數據文件。 因此,運行:

    $> PSQL -t -a -f 'your_delimiter' -h '主機名' -D '數據庫' -U '用戶' 「SELECT * FROM myTable的」 -c >> /家庭/用戶A/tableDataFile 將爲你做的伎倆。

相關問題