为什么在从 AWS RDS 导出到 parquet 时对表进行分段

Why are tables segmented when exporting to parquet from AWS RDS

我们使用Python的boto3库来执行start_export_task to trigger a RDS snapshot export (to S3). This successfully generates a directory in S3 that has a predicable, expected结构。通过该目录向下遍历到任何特定的 table 目录(如 export_identifier/database_name/schema_name.table_name/),我看到几个 .parquet 文件。 我下载了其中几个文件并将它们转换为 pandas 数据帧,以便我可以查看它们。它们的结构都相同,而且显然是相同 table 的一部分。但它们的大小从 100KB 到 8MB 不等,大小看似不可预测 table。 table 的这些文件/'pieces' 是否包含其所有行?他们 repeat/overlap 吗?为什么它们被如此(看似)随机地分割?哪些参数控制此分段?

最终我正在寻找有关这部分镶木地板 folder/file 结构的文档。我找到了很多关于如何 individual files are structured and partitioning 的信息。但我认为这略微超出了这些主题。

你不会喜欢这个,但从 AWS 的角度来看,这是一个实施细节,根据文档:

The file naming convention is subject to change. Therefore, when reading target tables we recommend that you read everything inside the base prefix for the table.

docs

大多数使用 Parquet 的工具并不真正关心 parquet 文件的数量或文件名。您只需将 Spark 或 Athena 之类的东西指向 table 的前缀,它就会读取所有文件并弄清楚它们是如何组合在一起的。

在 API 中也没有影响此行为的参数。如果您出于审美原因或其他原因更喜欢单个文件,您可以使用 Glue Job 之类的东西来读取 table 前缀,将每个 table 的数据合并到一个文件中并将其写入 S3。