我需要能够每晚将我的redshift数据仓库中每个表的内容转储到S3。
我想要实现的结果与我为每个表手动发出UNLOAD命令的结果相同。
对于这么简单的事情,我假设我可以使用像数据管道或胶水这样的东西,但这些似乎并不容易。
我看这个问题错了吗?这似乎应该很简单。
答案 0 :(得分:0)
我有这个过程,但最近反过来。我的解决方案:一个python脚本,它查询pg_schema(以获取符合条件的表名),然后使用表名作为INSERT
查询中的参数循环结果。我在EC2中将脚本作为cron作业运行。
理论上,您可以通过Lambda或Pipeline中的ShellCommand设置脚本。但我永远无法让它工作,而cron的工作非常简单。
答案 1 :(得分:0)
您是否有明确UNLOAD
数据到S3的特定用例?就像能够将这些数据用于Spark / Hive一样?
如果没有,您应该每天将Redshift群集的快照安排到S3。无论如何,这默认发生。 快照也存储在S3中。 快照是增量和快速的。您可以使用快照还原整个群集。
您还可以从快照中恢复单个表。
以下是有关它的文档:https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-snapshots.html
答案 2 :(得分:0)
这就像创建脚本(shell / python / ...)并将其放在crontab中一样简单。在某些地方(来自shell脚本的片段):
psql -U$username -p $port -h $hostname $database -f path/to/your/unload_file.psql
并且您的unload_file.psql
将包含标准的Redshift卸载语句:
unload ('select * from schema.tablename') to 's3://scratchpad_bucket/filename.extension'
credentials 'aws_access_key_id=XXXXXXXXXX;aws_secret_access_key=XXXXXXXXXX'
[options];
将您的shell脚本放在crontab中,并在您想要进行备份时每天执行它。
但请记住:
- 虽然备份是必不可少的,但每日完整备份将为s3生成庞大的账单。您应该轮换备份/ 日志文件,即定期删除它们或从s3和备份 在当地存储。
- 完整的每日备份可能不是最好的选择。检查您是否可以逐步进行。
- 最好是tar和gzip文件然后将它们发送到s3而不是存储Excel或csv。
醇>