Apache拼花

Apache拼花是一种开源的柱状数据文件格式,出现在Cloudera中,专为复杂数据的快速数据处理而设计。它最初是为Apache Hadoop生态系统处理数据交换而构建的,后来被许多开源项目采用,如Delta Lake、Apache Iceberg和InfluxDB,以及Hive、Drill、Impala、Presto、Spark、Kudu、Redshift、BigQuery、Snowflake、Clickhouse等大数据系统采用。许多这样的项目都是围绕对象存储、Parquet文件和处理这些文件的弹性查询层构建的。

Parquet支持基于每列的不同编码和压缩方案,允许高效的数据存储和批量检索。还支持字典和运行长度编码(RLE)以及各种各样的数据类型,如数值数据、文本数据和结构化数据,如JSON。Parquet是自描述的,允许在每列的基础上包含元数据(例如模式、最小/最大值和Bloom过滤器)。这有助于查询计划器和执行器优化需要从Paquet文件中读取和解码的内容。

类构建的嵌套数据结构记录分割与汇编算法首先在Dremel论文中描述,该论文来自谷歌。

Apache Parquet是Apache Arrow项目的一部分,因此它支持多种语言,包括Java、c++、Python、R、Ruby、JavaScript、Rust和Go。

拼花的优点

性能—I/O和计算减少,因为在执行查询时可以扫描列的子集。每列元数据和压缩有助于实现这一点。

压缩-将同构数据组织成列可以更好地压缩。字典和运行长度编码为重复值提供了有效的存储。

开源-强大的开源生态系统,由充满活力的社区不断改进和维护。

Parquet如何存储数据

让我们使用一个示例来查看Parquet如何将数据存储在列中。下面是3个传感器的简单数据集,其中包含关于id、类型和位置的信息。当你保存为基于行的格式,如csv或Arvo,它看起来像这样:

表图3

当您以Parquet柱状格式存储数据时,您的数据将按照如下所示的列中的每个特定数据类型进行组织:

表关系图

基于行的格式很容易理解,因为它是我们在电子表格中看到的典型格式。但是,对于任何类型的大规模查询,柱状格式都有优势,因为您可以查询回答查询所需的列子集。此外,存储更具有成本效益,因为基于行的存储(如CSV)不能像Parquet那样有效地压缩数据。

InfluxDB和Parquet文件格式

下面是一个示例,我们将使用该示例演示InfluxDB如何以Parquet文件格式存储时间序列数据。

解剖图09.12.2022v1

度量映射到一个或多个Parquet文件,标记、字段和时间戳映射到各个列。这些列使用不同的编码方案来获得可能的最佳压缩。

表图1 09.12.2022v1 .

此外,数据按照不重叠的时间范围进行组织。在这里,我们有3个相同测量的Parquet样本文件,但分为3个不同的时间分组。

表关系图

这样可以执行更快的查询,因为它允许用户收集特定时间范围的数据。此外,如果需要,以这种方式存储时间序列数据可以方便地删除数据以节省空间。

拼花与互操作性

Parquet的开源特性及其在其他技术和生态系统中的广泛采用意味着Parquet用户可以在其他应用程序中利用存储在Parquet文件中的时间序列数据。这允许用户将时间序列数据的价值和有效性扩展到以前不可能实现的领域和应用程序。

Baidu