在 aws redshift 中自动化跨区域复制表
Posted
技术标签:
【中文标题】在 aws redshift 中自动化跨区域复制表【英文标题】:Automate Cross region copying tables in aws redshift 【发布时间】:2016-11-21 07:48:05 【问题描述】:我在 region-1 的集群中有表,我想将其中一些表复制到其他某个区域 (region-2) 的另一个集群中。 到目前为止,我已经使用了 matillion,为此我遵循了以下步骤-
-
将数据从 cluster-a 复制到 s3。
将此数据从 s3 加载到 cluster-b。
由于 matillion 对我来说工作成本有点高,我想为此提供替代解决方案。
虽然我听说过 CLI、Lambda 和 API,但我不知道应该如何使用它们,因为我每周都会经历这个过程,并且我想自动化这个过程。
【问题讨论】:
【参考方案1】:AWS Command-Line Interface (CLI) 与此用例无关,因为它用于控制 AWS 服务(例如启动 Amazon Redshift 数据库、更改安全设置)。将数据导入/导出到 Amazon Redshift 的命令必须通过 SQL 直接发送给 Redshift。
将一些表复制到另一个区域的 Amazon Redshift 实例:
在集群 A 中使用UNLOAD
command 将数据从 Redshift 导出到 Amazon S3 存储桶
在Cluster 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
作业。
【讨论】:
感谢您的回答,虽然您说 CLI 不相关,但如果我可以使用,请告诉我如何通过 CLI 执行此操作 您不能使用 AWS CLI 将数据导入/导出到 Redshift。它仅用于向 AWS CLI 发出的命令。作为比较,AWS CLI 可用于启动 EC2 实例,但如果您希望在实例内使用某些软件,则必须直接与应用程序通信。 Redshift 也是如此。以上是关于在 aws redshift 中自动化跨区域复制表的主要内容,如果未能解决你的问题,请参考以下文章