Puffin and Iceberg: 海雀与冰山齐飞

Apache Iceberg 社区推出了一种名为 Puffin 的新文件格式。

Puffin and Iceberg: 海雀与冰山齐飞

等一下。

我们有 Parquet 和 ORC。我们真的需要另一种文件格式吗? 它是否给我们带来了额外的好处?

简短的回答是,是的!

到目前为止,我们有两种方法来收集统计信息,以便进行有效的查询规划。

– 文件格式,如Parquet。它包含文件、列(块)和页头元数据,它允许我们只读取部分列并跳过数据文件中不需要的行

– Iceberg 表的 manifest 文件。它保存列级别指标,里面会有数据列的最大值、最小值、NaN 值计数以及数据大小和分区等信息。它可以帮忙我们只选择有效的数据文件,跳过不必要的读取。

虽然像 Parquet 这样的文件格式可以让我们根据“页脚”跳过行,但它仍然需要我们列出特定分区中存在的所有文件,并寻找根据过滤条件的匹配数据,这需要大量时间。因此,在表的 Manifest 中保留列级度量对于查询优化器也是有利的。分区过滤以及 Manifest 中的列级指标使 Apache Iceberg 能够有效地跳过数据文件,只选择特定查询所需的文件。然后,引擎可以查看该子集文件中的 Parquet 页脚,从而在读取数据时进一步修剪。

Puffin and Iceberg: 海雀与冰山齐飞
Puffin and Iceberg: 海雀与冰山齐飞
    Puffin 登场

根据规范,Puffin 是一种文件格式,旨在保存由 Apache Iceberg 表管理的底层数据文件(例如 Parquet 文件)的统计数据和索引等信息,以进一步提高性能。该文件包含称为 blob 的任意信息片段,以及分析它们所需的元数据。到目前为止,blobs 的类型可以是: apache-datketches-theta-v1。

那么,什么是 blob?

Blob 类型,例如 apache-data ketches-theta-v1,是由随机流算法产生的,通常称为 sketches (草图)。sketches 帮助由于计算资源和时间有限而无法扩展的查询。例如,查询包括计数独立、分位数、矩阵计算、连接等。sketches 算法仅在一次运算过程中从数据流提取信息,它可以产生一种近似结果,而这些近似的结果通常比日常运算要快数个数量级。Apache Iceberg 当前支持的 sketches 类型是使用 Apache DataSketches 生成的。

    为什么我们需要 Puffin

好了,回到重点,为什么我们需要一个新的文件格式?

Puffin 允许我们使用额外的统计数据或次要索引来增加 Apache Iceberg 元数据,这样我们就可以进行额外的工作。例如,Puffin 的第一个用例就是计算表中特定列的不同值 (NDV) 的大致数目,然后将其提供给查询优化器。NDV 是查询引擎可以利用来对 Iceberg 表进行有效查询规划的关键信息。所以,基本上,你可以计算一个列的 NDV,生成一个 sketches ,并以 Puffin 文件格式存储它。

这对于查询引擎的重新排序(shuffle/order)之类的情况特别重要 (请考虑10个不同的值与1000个)。通常,如果没有 sketches,您每次都必须阅读整个表来计算值。然而,使用 Puffin 格式,你可以只读表一次,生成一个 sketches 存储和增量更新它。这些 sketches 的大小可以是相当巨大的,这就是为什么我们不能使用文件格式,如 Parquet 或 Avro 来存储它们。

此外,对于那些希望更快地计算不同值的数量以及使用近似值而不是真值时的用户来说,这可能具有巨大的价值。Puffin 格式 sketches 的其他一些应用包括用户(如数据科学家) 可以在巨大的表格上执行更快的计算,如计算中值、标准差和平均值等。

    Puffin 的格式是什么?

Puffin 格式具有以下规范:

File structure

Magic Blob₁ Blob₂ ... Blobₙ Footer

  • Magic 4个字节 0x50, 0x46, 0x41, 0x31 (简称: 海雀 *北极海鹦*, 第1个版本),

  • Blobᵢ  文件中包含的第i个Blob,由应用程序根据页脚解释,

Footer structure

Magic FooterPayload FooterPayloadSize Flags Magic

where

  • Magic: 4个字节,与文件开头相同

  • FooterPayload:可选,以UTF-8编码的JSON数据,描述文件中的 blobs

  • FooterPayloadSize: 4字节整数, FooterPayload的长度

  • Flags: 尔标志,4字节

更多相关格式的介绍,请前往我们的官网:https://iceberg.apache.org/puffin-spec/

    结论

Puffin 当前是在其开发的非常早期的阶段,它开始于一个 NDV 用例。然而,在未来,我们应该会看到更高级的应用,比如存储二级索引 (例如,Bloom 过滤器) ,这些应用对于单个值 (兆字节的顺序) 来说可能会非常大。最终,Apache Iceberg 的目标是让所有引擎在统计和索引方面使用相同的 “语言”,这对于更好的查询规划是必不可少的,而 Puffin 为我们开辟了这条道路。

END
Puffin and Iceberg: 海雀与冰山齐飞

作者:Dipankar Mazumdar 在 Dremio 的主要工作重点是在 Dremio 的 Open lakehouse 平台和各种开源项目(如 Apache Iceberg、 Apache Arrow)上帮助数据团队进行数据分析,他在机器学习和数据可视化方面有丰富的经验。

原标题:Puffins and Icebergs: Additional Stats for Apache Iceberg Tables

0 0 投票数
文章评分

本文转载自 DipankarMazumdar Apache Iceberg,原文链接:https://mp.weixin.qq.com/s/VrAQHzFevOL2JDjnFM3Low。

(0)
上一篇 2022-11-07 22:10
下一篇 2022-11-08 22:24

相关推荐

订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x