2013-03-15 45 views
11

Amazon RedshiftからSQLダンプを行う方法はありますか?Amazon RedshiftからSQLダンプを行う方法はありますか

SQLワークベンチ/ Jクライアントを使用できますか?

+0

トピックに関するAmazonianのコメントは次のとおりです。https://forums.aws.amazon.com/message.jspa?messageID = 428466#428466 –

答えて

2

現在、RedshiftでWorkbench/J successfulyを使用しています。

ダンプに関しては、Redshiftで利用可能なスキーマエクスポートツールはありませんでしたが(pg_dumpは機能しません)、クエリを使用してデータを抽出することは常に可能です。

希望します。

EDIT:ソートキーとディストリビューションキーのようなものは、Workbench/Jで生成されたコードには反映されません。すべてのフィールドに関する情報を表示するには、システムテーブルpg_table_defをご覧ください。フィールドがsortkeyかdistkeyか、そのような情報かどうかを示します。そのテーブル上のドキュメント:スキーマの

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

+1

私はWorkbench/Jの使用にも成功しており、動作していることを確認できます。 –

+0

なぜpg_dumpがうまくいかないのか分かりません。 Workbench/Jで述べたように、distkey/sortkeyも含まれていませんが、うまく動作します。 – congusbongus

23

pg_dumpは、過去に働いていないかもしれないが、それは今ありません。

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

CAVEATの買い手:pg_dumpはまだいくつかのpostgresに固有の構文を生成し、またあなたのテーブルの赤方偏移SORTKEYDISTSTYLE定義を無視しています。

別の適切なオプションは、use the published AWS admin script viewsにDDLを生成することです。これはSORTKEY/DISTSTYLEを処理しますが、すべてのFOREIGN KEYをキャプチャする場合はバグがあり、テーブルのアクセス許可/所有者は処理されません。あなたの人数は変わるかもしれません。

データ自体のダンプを取得するには、残念ながら各テーブルでUNLOAD commandを使用する必要があります。

これを生成する方法があります。あなたがMacを使用している場合

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

0

、私はPosticoを使用していますし、それは素晴らしい作品:select *構文は、あなたの宛先の表がソース表と同じ列の順序を持​​っていない場合は失敗することに注意してください。テーブルを右クリックし、[エクスポート]をクリックします。

1

はい、いくつかの方法で対応できます。

  1. S3バケットへのUNLOAD()は最高です。ほとんどのマシンでデータを取得できます。 (詳細はこちら:http://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html

  2. あなたが持っているLinuxインスタンスを使用して、テーブルの内容をデータファイルにパイプします。 実行中:

    $> psql -t -A -F 'your_delimiter' -h 'ホスト名' -d 'データベース' -U 'user' -c "select * from myTable" >>/home/userA/tableDataFile あなたのためのトリックを行います。

関連する問題