简单的方法是每晚将所有表格输出到S3?

时间:2017-12-28 06:12:30

标签: amazon-redshift

我需要能够每晚将我的redshift数据仓库中每个表的内容转储到S3。

我想要实现的结果与我为每个表手动发出UNLOAD命令的结果相同。

对于这么简单的事情,我假设我可以使用像数据管道或胶水这样的东西,但这些似乎并不容易。

我看这个问题错了吗?这似乎应该很简单。

3 个答案:

答案 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中,并在您想要进行备份时每天执行它。

  

但请记住:

     
      
  1. 虽然备份是必不可少的,但每日完整备份将为s3生成庞大的账单。您应该轮换备份/   日志文件,即定期删除它们或从s3和备份   在当地存储。
  2.   
  3. 完整的每日备份可能不是最好的选择。检查您是否可以逐步进行。
  4.   
  5. 最好是tar和gzip文件然后将它们发送到s3而不是存储Excel或csv。
  6.