可能是CSV存储的最佳替代方案:Parquet数据
Apache Parquet提供了与传统方法(如CSV)相比,在数据存储和检索方面的几个优势。
Parquet格式设计用于处理复杂类型的更快数据处理。在本文中,我们将讨论Parquet格式如何适用于当今不断增长的数据需求。
在深入了解Parquet格式的细节之前,让我们了解一下CSV数据是什么以及它对数据存储的挑战。
什么是CSV存储?
我们都听说过CSV(逗号分隔值)- 这是一种组织和格式化数据的最常见方法之一。CSV数据存储是基于行的。CSV文件以 .csv 扩展名存储。我们可以使用Excel,Google Sheets或任何文本编辑器存储和打开CSV数据。一旦打开文件,数据就可以立即查看。
嗯,这不好 – 绝对不适合数据库格式。
此外,随着数据量的增长,查询、管理和检索变得困难。
下面是存储在 .CSV 文件中的数据示例:
EmpId,First name,Last name, Division
2012011,Sam,Butcher,IT
2013031,Mike,Johnson,Human Resource
2010052,Bill,Matthew,Architect
2010079,Jose,Brian,IT
2012120,Adam,James,Solutions
如果在Excel中查看,可以看到行-列结构如下:
CSV存储的挑战
像CSV这样的基于行的存储适用于创建、更新和删除操作。
那么,CRUD中的读操作呢?
想象一下在上述 .csv 文件中有一百万行。打开文件并搜索您要查找的数据将需要相当长的时间。并不好。大多数云提供商(如AWS)根据扫描或存储的数据量收费 – 再次提醒,CSV文件占用很多空间。
CSV存储没有独占的选项来存储元数据,使得数据扫描变得繁琐。
那么,执行所有CRUD操作的成本效益和最佳解决方案是什么?让我们来探讨一下。
什么是Parquet数据存储?
Parquet 是一种用于存储数据的开源格式。它在Hadoop和Spark生态系统中被广泛使用。Parquet文件以 .parquet 扩展名存储。
Parquet是一种高度结构化的格式。它还可以用于优化数据湖中大量存在的复杂原始数据。这可以显着减少查询时间。
Parquet使数据存储高效,检索速度更快,因为它采用了行和列的混合存储格式(混合格式)。在这种格式中,数据在水平和垂直方向上被分区。Parquet格式还在很大程度上消除了解析开销。
该格式限制了总的I/O操作次数,从而降低了成本。
Parquet还存储元数据,其中存储有关数据的信息,例如数据模式、值的数量、列的位置、最小值、最大值、行组的数量、编码类型等。元数据存储在文件的不同级别,使得数据访问更快。
在像CSV这样的基于行的访问中,数据检索需要时间,因为查询必须在每一行中进行导航并获取特定的列值。使用Parquet存储,可以一次访问所有所需的列。
总之,
- Parquet基于列式结构进行数据存储
- 它是一种优化的数据格式,用于在存储系统中批量存储复杂数据
- Parquet格式包括多种数据压缩和编码方法
- 与其他存储格式(如CSV)相比,它显著减少了数据扫描时间和查询时间,并且占用更少的磁盘空间
- 最小化IO操作的数量,降低存储和查询执行的成本
- 包含元数据,使查找数据更容易
- 提供开源支持
Parquet数据格式
在进入示例之前,让我们更详细地了解Parquet格式中的数据存储方式:
一个文件中可以有多个水平分区,也称为行组。在每个行组内,应用垂直分区。列被分成多个列块。数据存储为列块内的页。每个页包含编码的数据值和元数据。正如我们之前提到的,整个文件的元数据也存储在文件的页组级别的页脚中。
由于数据被分割为列块,通过将新值编码到新块和文件中添加新数据也很容易。然后,更新受影响文件和行组的元数据。因此,我们可以说Parquet是一种灵活的格式。
Parquet原生支持使用页面压缩和字典编码技术对数据进行压缩。让我们看一个字典压缩的简单示例:
请注意,在上面的示例中,我们看到IT部门出现了4次。因此,在存储在字典中时,格式使用另一个易于存储的值(0,1,2…)对数据进行编码,同时还记录连续重复的次数 – IT, IT被改为0,2以节省更多的空间。查询压缩数据所需的时间更少。
面对面的比较
现在我们对CSV和Parquet格式的外观有了一个公正的了解,是时候进行一些统计数据来比较这两种格式了:
CSV | Parquet |
基于行的存储格式。 | 行列混合的存储格式。 |
由于没有默认压缩选项,所以占用了大量空间。例如,将1TB文件存储在Amazon S3或任何其他云上,都将占用相同的空间。 | 在存储时对数据进行压缩,从而占用更少的空间。以Parquet格式存储的1TB文件只占用130GB的空间。 |
由于基于行的搜索,查询运行时间较慢。对于每一列,需要检索每一行的数据。 | 由于基于列的存储和元数据的存在,查询时间大约快34倍。 |
每次查询需要扫描更多的数据。 | 执行查询时只需扫描约99%的数据,因此optimizing performance。 |
大多数存储设备根据存储空间收费,所以CSV格式意味着较高的存储成本。 | 由于数据以压缩的编码格式存储,所以存储成本较低。 |
文件模式必须要么推断(导致错误),要么提供(繁琐)。 | 文件模式存储在元数据中。 |
该格式适用于简单的数据类型。 | Parquet格式适用于复杂类型,如嵌套模式、数组、字典。 |
结论 👩💻
通过示例我们可以看到,就成本、灵活性和性能而言,Parquet比CSV更高效。它是一种有效的存储和检索数据的机制,特别是当整个世界都朝着cloud storage和空间优化的方向发展时。所有主要平台如Azure、AWS和BigQuery都支持Parquet格式。