我有一个用例,在 S3 上存储了大约 100M 个文件。根据我的数据模型,我有一个清单文件分别用于这些文件的位置。我想了解 Apache Iceberg 是否适合为我的 S3 文件提供索引。
阅读Iceberg Documentation,似乎它谈到了创建一个表,其中一列是目标 S3 位置。如果是这种情况,它与我存储 S3 路径和与我的模型相关的其他列的普通关系表有何不同。
人们在 Iceberg 中使用 S3 索引的任何指针或示例都会有所帮助。
我有一个用例,在 S3 上存储了大约 100M 个文件。根据我的数据模型,我有一个清单文件分别用于这些文件的位置。我想了解 Apache Iceberg 是否适合为我的 S3 文件提供索引。
阅读Iceberg Documentation,似乎它谈到了创建一个表,其中一列是目标 S3 位置。如果是这种情况,它与我存储 S3 路径和与我的模型相关的其他列的普通关系表有何不同。
人们在 Iceberg 中使用 S3 索引的任何指针或示例都会有所帮助。
这与正在发生的事情有点不同。Iceberg 所做的是创建与实际表数据分开的二级元数据。此元数据实际上具有特定行的“路径”字段。
路径信息与该特定文件的任何指标一起存储在“清单文件”中。这意味着当您执行读取时,查询可以确定实际读取哪些文件,而无需触及底层数据文件。
例如,如果您有 3 个包含 A 列的文件,则清单文件将大致如下所示
path/to/file1 | Max Value of ColA in File1 | Min Value of ColA in File1
path/to/file2 | Max Value of ColA in File2 | Min Value of ColA in File2
path/to/file3 | Max Value of ColA in File3 | Min Value of ColA in File3
因此,当我阅读该文件时,我会评估 ColA 上的任何谓词,而无需触及 file1、file2 或 file3。
这个“元数据”可以从 Iceberg 中的“元数据表”中读取,但这只是特定快照的元数据文件的 SQL 视图。