我们有一个用例,我们在 Redshift 中处理数据。但我想在 S3 中创建这些表的备份,以便我可以使用 Spectrum 查询这些表。
为了将表从 Redshift 移动到 S3,我使用的是 Glue ETL。我为 AWS Redshift 创建了一个爬虫。Glue 作业将数据转换为 parquet 并将其存储在 S3 中,按日期分区。然后,另一个爬虫爬取 S3 文件以再次对数据进行编目。
我怎样才能消除第二个爬虫并在工作本身中做到这一点?
我们有一个用例,我们在 Redshift 中处理数据。但我想在 S3 中创建这些表的备份,以便我可以使用 Spectrum 查询这些表。
为了将表从 Redshift 移动到 S3,我使用的是 Glue ETL。我为 AWS Redshift 创建了一个爬虫。Glue 作业将数据转换为 parquet 并将其存储在 S3 中,按日期分区。然后,另一个爬虫爬取 S3 文件以再次对数据进行编目。
我怎样才能消除第二个爬虫并在工作本身中做到这一点?
无需使用 AWS Glue 或 Athena 将 Redshift 数据以 Parquet 格式卸载到 S3。Redshift 现在支持以 Parquet 格式卸载数据的功能:
UNLOAD ('select-statement')
TO 's3://object-path/name-prefix'
FORMAT PARQUET
是的,您可以消除第二个爬虫,但不能在工作中,或者,如果您使用 create external table DDL 语句知道 s3 中存在的文件的架构,您可以直接在 Athena 中创建一个表。然后对表执行 MSCK 修复以填充所有分区中存在的数据,一旦完成,您可以使用胶水更新分区 API 调用将新分区更新到胶水目录。
无需创建另一个爬虫来更新胶水目录,而是在 AWS Athena 上创建一个外部表。有关创建外部表命令的更多详细信息,请参阅 AWS 的以下文档:
由于您的数据是分区的,因此您需要在每次运行后更新粘合目录中的分区信息。为此,您可以使用 MSCK 修复命令,如下所示:
MSCK REPAIR TABLE table_name
要使用代码自动执行此操作,您可以使用以下链接中的任何 AWS 开发工具包,具体取决于您选择的语言:AWS 开发工具包。