【问题标题】:Copying a table from one redshift cluster to another redshift cluster(without using s3)将表从一个红移集群复制到另一个红移集群(不使用 s3)
【发布时间】:2023-03-30 04:27:01
【问题描述】:

我们可以直接将表从一个redshift集群复制到另一个redshift集群吗?

我知道使用 s3 作为临时存储可以实现表复制(即从第一个集群卸载到 s3,然后从 s3 复制到另一个集群)。

【问题讨论】:

标签: amazon-redshift


【解决方案1】:

所以答案是否定的。 以下是我从 AWS Support 得到的回复。

你好, 非常感谢您联系 AWS Support。使用 Amazon RedShift,我们没有将数据从 RedShift 集群中的表直接复制到另一个 RedShift 集群中的另一个表的机制。达到类似结果的正常程序是:

(1) UNLOAD 到 S3,然后从 S3 复制

通过这种方法,您可以使用 S3 作为中间存储。首先,您将源集群中的数据卸载到 S3,然后将 S3 中的数据复制到目标集群上。这是您熟悉的方法,也是我们推荐的方法。 RedShift 旨在与 S3 一起使用,并且可以以相对较低的成本实现高效率。有关 RedShift 中的 UNLOADD 和 COPY 操作的更多信息,请参阅以下 AWS 文档:

http://docs.aws.amazon.com/redshift/latest/dg/t_Unloading_tables.html http://docs.aws.amazon.com/redshift/latest/dg/t_loading-tables-from-s3.html

(2) 使用集群快照

另一种方法是创建源集群的快照,然后将快照恢复为目标集群。之后,从目标集群中删除不必要的表。问题是,如果您只需要目标集群上的一小部分数据(例如,十张表中的一张),那么您可能会为(相对)小的应用程序使用(相对)大的集群。

有关管理 RedShift 集群快照的更多信息,请参阅以下 AWS 文档:

http://docs.aws.amazon.com/redshift/latest/mgmt/managing-snapshots-console.html

总而言之,我们更喜欢 UNLOAD 和 COPY 流程,这非常简单且具有成本效益。

【讨论】:

  • 但是卸载/复制非常简单 - 就像两个命令 - 一个在源集群中,一个在新集群中......
  • 您现在可以从集群快照中恢复单个表。 docs.aws.amazon.com/redshift/latest/mgmt/…这是一个新功能~2016年3月
  • 只能在同一个集群内恢复表。
  • 确保测试您的复制/卸载脚本。例如,默认值不会转义分隔符,您可能会收到错误,例如在文件中找到的额外列。我们现在在卸载命令中包含“addquotes escape”(以及相关副本的“removequotes escape”)。此外,对于在空模式中为复制命令构建 ddl,请从 amazons github redshift 实用程序中查看“admin.v_generate_tbl_ddl”
  • @Prakash 你知道除了你提到的那两个之外是否还有其他(可能更快)的解决方案?
【解决方案2】:

根据您想要复制表的原因,现在最好的解决方案可能是使用 Redshift 数据共享: https://docs.aws.amazon.com/redshift/latest/dg/datashare-overview.html

假设满足先决条件,这将允许您在另一个 Redshift 集群中提供可读取的表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 2014-06-26
    相关资源
    最近更新 更多