2017-12-28 20 views
0

Redshiftデータウェアハウスの各テーブルの内容を毎晩S3にダンプする必要があります。夜間にすべてのテーブルをS3に簡単に取得できますか?

私が達成したい結果は、各テーブルに対して手動でUNLOADコマンドを発行した場合と同じ結果になります。

これは単純ですが、私はデータパイプラインや接着剤のようなものを使うことができると思っていましたが、これは簡単ではないようです。

この問題は間違っていますか?これは単純なはずです。

+0

あなたのアプローチは異なります。1つはDatapipelineで、SQLスクリプトを実行するスクリプトを作成できます(blablaをアンロード)。 ruby/python/sqlを実行するスクリプトを作成し、crontabまたはlambdaとcloudwatchを実行してsqlを実行することができますが、おそらくデータパイプラインが簡単です。 – MiloBellano

答えて

0

私はこのプロセスを持っていましたが、最近は逆でした。私の解決策:pg_schemaを照会して(適格なテーブル名を取得する)Pythonスクリプトを作成し、INSERTクエリでテーブル名をパラメータとして使用して結果をループしました。私はEC2のスクリプトをcronジョブとして実行しました。

理論的には、LambdaまたはPipelineのShellCommandを使用してスクリプトを設定できます。しかし、私はそれを働かせることはできませんでしたが、cronの仕事は非常に簡単でした。

0

S3へのデータを明示的にUNLOAD送信する特定のユースケースがありますか? Spark/Hiveでそのデータを使用できるようにしますか?

そうでなければ、Redshiftクラスタのスナップショットを毎日S3にスケジューリングする必要があります。これは、デフォルトではとにかく起こります。 スナップショットはS3にも格納されます。 スナップショットはインクリメンタルで高速です。スナップショットを使用してクラスタ全体を復元できます。

スナップショットから個々のテーブルを復元することもできます。ここで

はそれについてのドキュメントです:https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-snapshots.html

0

これは、スクリプト(シェル/パイソン/ ...)を作成するのと同じくらい簡単で、crontabの中でそれを置きます。どこか(シェルスクリプトからの抜粋)の行で:

psql -U$username -p $port -h $hostname $database -f path/to/your/unload_file.psql 

とあなたのunload_file.psqlは、標準の赤方偏移のアンロード文が含まれます

unload ('select * from schema.tablename') to 's3://scratchpad_bucket/filename.extension' credentials 'aws_access_key_id=XXXXXXXXXX;aws_secret_access_key=XXXXXXXXXX' [options];

crontabの中で、あなたのシェルスクリプトを入れて、それを実行あなたがバックアップを取るときに毎日。しかし

、覚えている:

  1. をバックアップを取ることは不可欠ですが、毎日フルバックアップはS3のための巨大な法案を生成します。 する必要がありますバックアップ/ ログファイルをローテーションする、つまり定期的に削除するか、ローカルにs3と ストアからバックアップを取ってください。
  2. 毎日完全バックアップは、最善の方法ではない可能性があります。インクリメンタルに行うことができるかどうかを確認してください。
  3. ファイルをタールしてgzipしてから、ExcelまたはCSVを保存するのではなく、s3に送信する方がよいでしょう。