将数据从关系数据库传输到 S3 时是否保留了关系?

问题描述

options 用于将数据库快照从关系数据库传输到 AWS 中的 S3。

但是 S3 是一个对象存储,所以它只存储文件(例如 parquet)。

关系数据库中表之间的关系(如键)是否以某种方式转移到 S3?是否仍然可以对 S3 中允许在表之间进行连接的文件进行查询

解决方法

在 S3 中导出的 parquet 文件中没有外键、主键等“键”,但您仍然可以直接通过 Amazon Athena 或 Amazon Redshift Spectrum 等工具查询导出的数据。有关使用 Athena 读取 Parquet 数据的更多信息,请参阅 Amazon Athena 用户指南中的 Parquet SerDe。有关使用 Redshift Spectrum 读取 Parquet 数据的更多信息,请参阅 Amazon Redshift 数据库开发人员指南中的从列数据格式复制。

完成导出所需的时间取决于数据库中存储的数据。例如,具有分布良好的数字主键或索引列的表将导出最快。不包含适合分区的列的表和基于字符串的列上只有一个索引的表将需要更长的时间,因为导出使用较慢的单线程进程。例如,如果一个表得到一个数字 pk 并得到 100,000 行,在导出过程中数据将被“分区”成几个部分,每个部分都是 S3 存储桶中的一个目录,这样当您在 Athena/Redshift 频谱中查询数据时id,AWS 知道要扫描哪些存储桶以获取数据,从而提高性能和速度。

总而言之,在 S3 中将数据导出为 parquet 等列格式后,您可以通过 Athena 进行就地查询,将数据加载到 redshift 或数据存储以进行更多分析等。