对于不断增加的数据库来说,Arrow 的数据集功能是一个很好的工具,即使数据被分区和压缩,人们也希望不断向其中添加更多数据。我已经能够成功地将数据分区到列中,从而使过滤和查询速度更快。但是 Arrow 是否允许按行组进行分区?
文档没有详细解释这一点,我的目标是按行分区,然后能够查询这些分区的元数据[最高值,最低值]。箭允许这样做吗?
到目前为止我已经尝试过片段
fragments = list(dataset.get_fragments())
fragments[0].split_by_row_group()
Run Code Online (Sandbox Code Playgroud)
然而,这只是给我返回由列分区创建的文件夹结构中的文件。
Parquet 元数据支持存储文件和行组统计信息,其中包含您想要的“最高值”和“最低值”字段。支持类似 IPC 文件的想法已经被讨论过,但目前还没有任何进展。
您可以使用read_metadata查询单个文件的 parquet 元数据。关于返回的元数据的文档不是很广泛,但是您可以很容易地尝试并找到行组统计信息。
数据集功能不会向用户公开这些统计信息。但是,数据集功能确实会自动为您使用这些统计数据。有时您会看到此功能被称为“谓词下推”,这里(非常)简要地提到了它。
为了使用该功能,您需要提供一个过滤器(此处描述)。例如,假设您进行以下调用。
dataset.to_table(filter=ds.field('c') == 2).to_pandas()
Run Code Online (Sandbox Code Playgroud)
c
那么它将用于过滤读取哪些文件。c
(例如镶木地板),那么它将用于过滤读取哪些行组。注意:除了行组之外,parquet 中还有一个称为“数据页”的概念。每个行组的每列可以有多个数据页。这些数据页还可能包含统计信息(取决于作者)。Arrow 在过滤时(尚未)利用数据页统计信息(请参阅ARROW-13998)。
注意:除了上述统计数据之外,还完成了向 parquet 文件添加布隆过滤器的工作。Arrow 尚不支持使用这些(请参阅ARROW-11384)。
归档时间: |
|
查看次数: |
436 次 |
最近记录: |