我们正在使用Redshift为我们的仓库进行探索,我们需要将现有的内部部署postgres数据库中的新数据转移到Redshift上。如果您的主数据库在RDS中,看起来您可以使用Pipeline和模板执行此操作,但如果您的数据库是本地的,可以使用Pipeline吗?
答案 0 :(得分:0)
由于您定期批量同步,因此您可能需要考虑将数据推送到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到主表以支持更新(如果需要)并防止重复。