Parquet文件結構筆記


  Parquet是面向分析型業務的列式存儲格式,由Twitter和Cloudera合作開發,2015年5月從Apache的孵化器里畢業成為Apache頂級項目,那么這里就總結下Parquet數據結構到底是什么樣的呢?

  一個Parquet文件是由一個header以及一個或多個block塊組成,以一個footer結尾。header中只包含一個4個字節的數字PAR1用來識別整個Parquet文件格式。文件中所有的metadata都存在於footer中。footer中的metadata包含了格式的版本信息,schema信息、key-value paris以及所有block中的metadata信息。footer中最后兩個字段為一個以4個字節長度的footer的metadata,以及同header中包含的一樣的PAR1。

  讀取一個Parquet文件時,需要完全讀取Footer的meatadata,Parquet格式文件不需要讀取sync markers這樣的標記分割查找,因為所有block的邊界都存儲於footer的metadata中(因為metadata的寫入是在所有blocks塊寫入完成之后的,所以吸入操作包含的所有block的位置信息都是存在於內存直到文件close)

  這里注意,不像sequence files以及Avro數據格式文件的header以及sync markers是用來分割blocks。Parquet格式文件不需要sync markers,因此block的邊界存儲與footer的meatada中。

  在Parquet文件中,每一個block都具有一組Row group,她們是由一組Column chunk組成的列數據。繼續往下,每一個column chunk中又包含了它具有的pages。每個page就包含了來自於相同列的值.Parquet同時使用更緊湊形式的編碼,當寫入Parquet文件時,它會自動基於column的類型適配一個合適的編碼,比如,一個boolean形式的值將會被用於run-length encoding。

  另一方面,Parquet文件對於每個page支持標准的壓縮算法比如支持Snappy,gzip以及LZO壓縮格式,也支持不壓縮。

 

   Parquet格式的數據類型:

 

 

參考: 《Hadoop:The Definitive Guide, 4th Edition》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM