天天看點

Parquet 編碼方式

雖然 Parquet 的文檔裡寫了很多編碼方式 (https://github.com/apache/parquet-format/blob/master/Encodings.md ),但實際上 Parquet 隻支援兩種編碼:PLAIN 和 Dictionary Encoding。隻能設定開 Dictionary 或者不開 Dictionary。而且隻支援檔案粒度的設定,不支援列粒度的,不能對某一具體列設定編碼。

(https://issues.apache.org/jira/browse/PARQUET-1058 )

https://issues.apache.org/jira/browse/PARQUET-796

the boolean enableDictionary determines whether dictionary encoding is used for all columns or none of them. 這裡邊這個哥們說可以用 OriginalType.TIMESTAMP_MILLIS 來打開 Delta Encoding。但是 Parquet 的文檔裡都沒寫這個資料類型,那就不能作為官方的功能了。

檔案層 API 編碼設定方式:初始化 ParquetWriter 時選擇是否打開 Dictionary Encoding(enableDictionary 參數)。

Parquet 接口

如果用 Spark,是設定一個參數 parquet.enable.dictionary:

https://stackoverflow.com/questions/45488227/how-to-set-parquet-file-encoding-in-spark

在檢視 Parquet 具體某一列的編碼方式時,可以調試 ParquetReader 的 build() 函數,裡面會讀取 Parquet 檔案的 Footer,裡邊有整個檔案的 Metadata,包括每個 RowGroup 中每個 Column 的編碼方式。

繼續閱讀