在aws redshift中自动化跨区域复制表

时间:2016-11-21 07:48:06

标签: amazon-s3 copy amazon-redshift

我在区域1的集群中有表,我想在其他区域(区域2)的另一个集群中复制其中一些表。
直到现在我已经使用了matillion,为此我遵循了以下步骤 -

  1. 将数据从cluster-a复制到s3。
  2. 将此数据从s3加载到cluster-b。
  3. 由于matillion对我来说工作的成本有点高,我想为此提供另一种解决方案。

    虽然我听说过CLI,Lambda和API,但我不知道应该如何使用这些,因为我每周都要经历这个程序,我想自动完成这个过程。

1 个答案:

答案 0 :(得分:1)

AWS Command-Line Interface (CLI)与此用例无关,因为它用于控制AWS服务(例如,启动Amazon Redshift数据库,更改安全设置)。从Amazon Redshift导入/导出数据的命令必须直接通过SQL发布到Redshift。

将某些表复制到另一个地区的Amazon Redshift实例:

  • 使用群集A 中的UNLOAD command将数据从Redshift导出到Amazon S3存储桶
  • 使用群集B 中的COPY command将数据从S3加载到Redshift中,使用REGION参数指定源区域

因此,您需要与每个群集分开的SQL连接。任何可以通过 JDBC 连接到Redshift的程序就足够了。例如,您可以使用标准psql工具(最好是版本8.0.2),因为Redshift基于PostgreSQL 8.0.2。

请参阅:Connect to Your Cluster by Using the psql Tool

因此,您的脚本将类似于:

psql -h clusterA -U username -d mydatabase -c 'UNLOAD...'
psql -h clusterB -U username -d mydatabase -c 'COPY...'

您可以从AWS Lambda运行此命令,但Lambda函数最多只运行五分钟,并且您的脚本可能超出该限制。相反,您可以在某台计算机上运行常规cron作业。