【问题标题】:Using AWS Pipeline for incremental copy of on premises postgres to Redshift使用 AWS Pipeline 将本地 postgres 增量复制到 Redshift
【发布时间】:2017-01-09 03:05:12
【问题描述】:

我们正在探索将 Redshift 用于我们的仓库,我们需要每晚将新数据从我们现有的本地 postgres 数据库移动到 Redshift。如果您的主数据库在 RDS 中,您可以使用 Pipeline 和模板执行此操作,但如果您的数据库在本地,您可以使用 Pipeline 执行此操作吗?

【问题讨论】:

  • 你可以这样做,但管道不是为那个目的而设计的......

标签: amazon-web-services amazon-redshift pipeline


【解决方案1】:

由于您定期进行批量同步,您可能需要考虑将数据推送到 S3,这很容易从本地完成,然后通过 COPY 命令将其加载到 redshift。它既快速又可靠,而且作为副作用,您可以在 s3 中免费(便宜)获得备份。

您可以使用awscli python 工具中的aws s3 cp 来推送您的CSV postgres 转储(在将您的访问密钥放入.aws/config 之后),例如:

aws s3 cp current_dump.csv.gz s3://yourbucket/20170108/dump.csv.gz

然后使用常规的 postgres psql 实用程序在 redshift 上执行 COPY,如下所示:

PGPASSWORD='YOURPASS' psql -h your.redshift.end.point.com -U youruser -d yourdb -p 5439 -c "COPY yourtable FROM 's3://yourbucket/20170108/dump.csv.gz' CREDENTIALS 'aws_access_key_id=[YOURKEY];aws_secret_access_key=[YOURSECRET]' DELIMITER ',' NULL 'NULL' IGNOREBLANKLINES EMPTYASNULL BLANKSASNULL TIMEFORMAT 'auto' FILLRECORD MAXERROR 1 CSV GZIP;"

您可以将您的 postgres 转储和这些命令放在一个带有一点时间值脚本的 shell 脚本中,并将其作为 cron 作业运行。

为了获得最佳实践,您希望将upload to a staging table and then merge 发送到您的主表,以便在需要时支持更新并防止重复。

【讨论】:

  • 谢谢@systemjack!我们一定会研究这个工作流程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-13
  • 2021-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多