AWS Glue 数据目录,具有 S3 文件上的分区表和分区中的不同架构

Posted

技术标签:

【中文标题】AWS Glue 数据目录,具有 S3 文件上的分区表和分区中的不同架构【英文标题】:AWS Glue Data Catalog with partitioned table over S3 files and different schemas in partitions 【发布时间】:2021-12-15 15:06:30 【问题描述】:

是否可以通过 AWS S3 文件在 AWS Glue 数据目录中创建分区表,并在该表的不同分区中具有不同的数据架构?

如果是这样,我能否在 Redshift Spectrum 的帮助下将此分区表创建为 Redshift 中的外部表并进行查询?

【问题讨论】:

【参考方案1】:

如果文件是 json/parquet 类型,则定义表以使其包含所有列 - 某些列可能存在于某些分区文件中,而其他列可能存在于其他分区文件中。

如果文件是 csv 类型,那么您需要在每个文件中以相同的顺序显示列,但每个文件可能不包括所有可能的列。

【讨论】:

感谢您的回答。我是否需要在 Glue 目录中创建表,在那里手动创建模式,然后通过目录中的元信息在 Redshift 中创建表?或者 Glue 爬虫可以自动发现表的模式,并且即使这些文件具有不同的模式,仍然会将全新的文件(稍后到达)附加到该表?或者在这种情况下(具有不同架构的新文件)Glue 爬虫会尝试在目录中创建一个全新的表? 或者在 Glue 目录中手动创建表的情况下 - Glue 爬虫将不会运行,我将能够手动将具有不同架构的全新文件存储在 AWS 上该表的不同分区中S3?之后我是否需要以某种方式手动刷新 Glue 中的表 - 否则新数据将立即可用于查询.. 假设来自 Redshift Spectrum,以防我之前成功地将此类外部表连接到 Redshift? 您可以使用 CREATE TABLE stmt 在 Athena 控制台中手动创建表。当您将文件复制到相关的 s3 路径时,您需要使用 ALTER TABLE ...ADD PARTITION stmt 添加分区。如果使用分区投影,则不需要使用 ALTER TABLE ADD PARTITION stmt 添加分区。 在 Glue 目录中创建表后,您可以在 Redshift 中创建外部表,指向 Glue 目录中的表,您可以使用 Redshift 谱查询它。

以上是关于AWS Glue 数据目录,具有 S3 文件上的分区表和分区中的不同架构的主要内容,如果未能解决你的问题,请参考以下文章

我可以使用 AWS Glue 将 S3 上的 json 数据转换为列格式并将其推送到 Redshift 吗?

AWS Glue 数据目录的头文件

我可以使用AWS Glue将S3上的json数据转换为柱状格式并将其推送到Redshift吗?

AWS Glue:如何处理具有不同架构的嵌套 JSON

AWS Glue 检查文件内容的正确性

AWS Glue 作业在写入 S3 时被拒绝访问