每小时 Amazon Redshift table 到 S3 中的外部 table

Amazon Redshift table to external table in S3 every hour

我想将数据从 Amazon Redshift table 导出到存储在 Amazon S3 中的外部 table。每小时,我想将行从 Redshift 源导出到外部 table 目标。

A​​WS 中有哪些选项可以实现这一目标?

我知道 UNLOAD 命令允许我将数据导出到 S3,但我认为将数据存储到外部 table(也已分区)是行不通的).还是 Amazon EMR 可能是实现此功能的唯一方法?

Amazon Redshift Spectrum 外部 table 是只读的。您不能从 Redshift 更新它们(例如通过 INSERT 命令)。

因此,您需要一种直接在 S3 中创建文件的方法。

UNLOAD当然可以做到这一点,但它不能将数据保存在分区结构中。

Amazon EMR 确实是一个不错的选择。现在它是按秒收费的,所以它只需要 运行 足够长的时间来导出数据。您可以使用您喜欢的工具(例如 Hive 或 Spark)从 Redshift 导出数据,然后将其写入分区外部 table.

例如,参见:Powering Amazon Redshift Analytics with Apache Spark and Amazon Machine Learning | AWS Big Data Blog

另一种选择可能 是 AWS Glue。我不太熟悉它,但它可以输出到分区,所以这可能是一个更容易实现你的目标的方法!

参见:Managing Partitions for ETL Output in AWS Glue - AWS Glue

现在可以插入外部 tsble 了,我认为是从 2020 年 6 月开始: https://aws.amazon.com/about-aws/whats-new/2020/06/amazon-redshift-now-supports-writing-to-external-tables-in-amazon-s3/

这是文档: https://docs.aws.amazon.com/redshift/latest/dg/r_INSERT_external_table.html

基本上有两种方法:

  • 插入 external_schema.table_name { select_statement } 或者
  • 创建外部 TABLE 为 { SELECT }

通常您在您的 redshift 外部模式(例如 my_stg)中指定 glu 数据库名称,因此您在 redshift 外部模式中创建的任何外部 table 已经知道胶目录数据库名称。 这是个好消息,因为操作问题来自 2018