为什么在从 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。
我们使用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
文件。
最终我正在寻找有关这部分镶木地板 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。