Super Sale WeekClaude Skills — 20% OFF
Glossary

掌握 Parquet 檔案:結構、應用場景與核心優勢

Powerdrill Bloom·
掌握 Parquet 檔案:結構、應用場景與核心優勢

Parquet 檔案是以欄而非列來儲存資料。Apache Parquet 專案將其描述為「一種開源、欄導向的資料檔案格式,旨在實現高效的資料儲存與檢索」。正是這一個設計選擇,解釋了為什麼它體積更小、查詢更快,且難以透過按兩下直接開啟。

什麼是 Parquet 檔案?

Parquet 是一種用於表格資料的檔案格式,作為 Apache 專案進行維護。官方文件指出,它「提供了高效能的壓縮與編碼方案,以批次處理複雜的資料」。文件還補充說明,該格式「受到許多程式語言和分析工具的支援」。

其決定性的特性是排列方向。CSV 一次寫入一列:先寫入紀錄一的所有欄位,接著寫入紀錄二的所有欄位。而 Parquet 一次寫入一欄:先寫入第一欄的所有數值,接著寫入第二欄的所有數值。

這聽起來像是一個技術細節,但它帶來了兩個重大影響。單一欄中的數值通常彼此相似,這使得它們的壓縮效果遠比混合列更好。此外,如果一個查詢在 90 欄中只需要 3 欄,它只需讀取這 3 欄,而不需要掃描每一列並丟棄其中的大部分內容。

該格式有正式的規範。Apache 文件指出,「parquet-format 儲存庫託管了 Parquet 檔案格式的官方規範,定義了資料的結構與儲存方式」。

Parquet 檔案的結構

信封結構

每個 Parquet 檔案的開頭和結尾都使用相同的 4 個位元組。規範顯示,開頭有一個「4 位元組的魔術數字 'PAR1'」,而完全相同的魔術數字也出現在最末端。

在它們之間存放著資料,而接近尾端的地方則是詮釋資料(metadata)。在結尾的魔術數字之前,有一個「以位元組為單位的 4 位元組檔案詮釋資料長度(小端序,little endian)」。該數值會告訴讀取器需要往回跳多少距離才能找到詮釋資料區塊。

列群組與欄區塊

在信封結構內部,資料被進行了兩次劃分。規範將檔案描述為「此表格中有 N 個欄,並被拆分為 M 個列群組」。

列群組是一個水平切片——即一批列。在每個列群組中,每個欄的數值會一起儲存為一個欄區塊。因此,一個擁有 90 欄和 10 個列群組的檔案會包含 900 個欄區塊,每個區塊都是來自單一欄的連續數值。

這種雙重劃分正是實現選擇性讀取的關鍵。查詢可以跳過完全不可能包含符合條件之列的整個列群組,然後僅從剩餘的列群組中讀取所需的欄區塊。

為什麼詮釋資料位於尾端

這讓習慣有檔頭(header)的人感到驚訝。Apache 文件直接解釋了原因:「檔案詮釋資料是在資料之後寫入的,以便進行單次寫入(single pass writing)。」

串流輸出大型資料集的寫入器在寫入完成之前,無法得知每個區塊的最終位元組位置。將詮釋資料放在最後,意味著它永遠不需要回頭去修改檔頭。

讀取模式也由此而來。根據文件,檔案詮釋資料「包含所有欄區塊起始位置的定位」。它還補充說明,「讀取器預期會先讀取檔案詮釋資料,以找到它們感興趣的所有欄區塊」。

Parquet 的用途

您通常會在以下四種情況之一遇到 .parquet 檔案。

資料倉儲匯出。 當有人從現代倉儲中匯出大型表格時,這通常是預設格式,因為檔案大小能保持在易於管理的範圍內。

資料湖儲存。 存放在雲端物件儲存中的檔案通常會使用它,這正是因為引擎可以只讀取部分欄,而不需要下載所有內容。

團隊間的資料交接。 當資料工程師要傳送一整年的交易資料給您時,通常會選擇它,而不是體積大上數倍的 CSV。

分析工具間的交互傳輸。 由於該格式受到多種語言和工具的支援,它可以在系統之間傳輸,而不需要中間的轉換步驟。

共同的關鍵在於檔案大小。當 CSV 檔案大到難以輕鬆傳輸時,它就成了顯而易見的首選。

Parquet 對比 CSV

Parquet CSV
排列方向 欄導向 列導向
可用文字編輯器讀取 否,它是二進位格式
典型檔案大小 較小,透過欄壓縮實現 相同資料下體積較大
讀取少數欄位 僅讀取那些欄區塊 讀取整個檔案
資料類型 包含在檔案詮釋資料中 由開啟它的工具進行推斷
可透過按兩下開啟 通常不行 通常會在試算表軟體中開啟
最適合用於 大型表格、重複查詢 小型表格、快速檢查、通用分享

資料類型的處理方式值得特別說明。CSV 無法得知 00123 是數字還是字串,這就是為什麼在匯入時,前導零和日期常常會出錯。Parquet 會在詮釋資料中記錄類型,因此您寫入什麼數值,讀取出來的就是什麼數值。

關於此對比中列導向的部分,CSV 說明指南從另一個角度介紹了相同的內容。而 TSV 分析則介紹了以定位鍵(tab)分隔的變體。

核心優勢

真正具備加乘效果的壓縮。 將相似的數值相鄰儲存,能為編碼器提供更多發揮空間。Apache 文件將此歸功於「高效能的壓縮與編碼方案」。

欄剪枝(Column pruning)。 在 90 欄中讀取 3 欄,大約只需花費 3 欄的 I/O 開銷,而不是 90 欄。

跳過列群組。 由於詮釋資料記錄了每個列群組中的內容,讀取器可以在接觸它們之前直接丟棄整個切片。

資料類型完整保留。 日期依然是日期,識別碼也保留了前導零,因為綱要(schema)是隨檔案一同傳輸的。

單次寫入。 位於尾端的詮釋資料意味著非常巨大的檔案可以透過串流方式寫入。

廣泛的支援。 文件指出其支援「許多程式語言和分析工具」,因此幾乎不會遇到無法相容的死胡同。

Parquet 的局限性

Parquet 解決了儲存與檢索的問題,但它無法解答您對於檔案中實際內容的任何疑問。

它是二進位格式,因此您無法一眼看出內容。開啟 CSV 來檢查營收欄位是毛利還是淨利只需花費 5 秒鐘。而二進位檔案則需要工具輔助,您才能看到任何內容。

它也不適合用於小型資料。對於一個只有 200 列的對照表,詮釋資料的額外開銷和對工具的需求,遠超過任何壓縮帶來的好處。在這種情況下,CSV 是更好的格式,坦言這一點也是善用 Parquet 的一部分。

此外,它對資料品質毫無幫助。檔案中可能包含類型完美、壓縮高效的垃圾資料。例如重複的紀錄、混合了兩種貨幣的貨幣欄位,或者在三月份變更了綱要的客戶 ID。該格式保證的是還原度,而非正確性。

如果您不是工程師,該如何處理 Parquet 檔案

這就是實際應用上的落差。大多數商業工具都預設使用試算表,而 .parquet 檔案無法像 CSV 那樣直接開啟。

務實的做法是進行轉換。向產生該檔案的人索取您實際需要之欄位的 CSV 或 Excel 匯出檔,或者使用任何支援 Parquet 的工具自行轉換。雖然您會失去壓縮優勢,但一旦資料下載到您的電腦並縮小了範圍,這就無關緊要了。

從那時起,後續工作就是一般的分析。Powerdrill Bloom 的定價頁面列出了支援上傳 Excel、CSV、PDF 和文件,因此轉換後的匯出檔可以直接匯入。您可以使用自然語言提問,而不需要撰寫查詢語句。CSV AI 助手涵蓋了這條路徑,而資料連接器則適用於比起匯出、直接拉取資料更為合適的情況。

值得記住的區別是,Parquet 是您上游所做出的儲存決策。It 不是分析工具,一旦檔案送到您的辦公桌上,將其轉換為其他格式是正常的做法,而不是一種權宜之計。

結論

Parquet 是一種欄導向的儲存格式,其綱要和索引位於檔案尾端。這種設計帶來了高壓縮率、選擇性讀取以及可靠的資料類型,這也是為什麼它已成為處理任何大型資料的預設選擇。

但它無法帶來的是直觀的可視性。當檔案送達需要解答而非僅僅需要儲存的人手中時,下一個有用的步驟通常是提取特定範圍的資料並提出問題。

如果這正是您面臨的情況,請搭配轉換後的檔案嘗試使用 Powerdrill Bloom,並從將其轉換為圖表開始。

常見問題

Parquet 檔案有什麼用途?

Parquet 用於高效儲存大型表格資料集。它常用於資料倉儲匯出、資料湖儲存、團隊間的資料交接以及分析工具之間的交互傳輸。原因在於它具有良好的壓縮效果,且支援僅讀取選定的欄位。

Parquet 比 CSV 更好嗎?

對於需要重複查詢的大型表格,是的:它體積更小、包含資料類型,且支援欄剪枝。對於需要快速檢查或廣泛分享的小型表格,CSV 更為方便,因為它是文字格式且隨處皆可開啟。

我可以在 Excel 中開啟 Parquet 檔案嗎?

無法透過按兩下直接開啟,因為 Parquet 是二進位格式而非文字格式。常見的方法是先將其轉換為 CSV 或 Excel,或者使用能直接讀取 Parquet 的工具。

為什麼 Parquet 的詮釋資料儲存在檔案尾端?

Apache 文件解釋說,詮釋資料是在資料之後寫入的,「以便進行單次寫入」。串流輸出大型資料集的寫入器無法提前得知最終的區塊位置,因此最後寫入詮釋資料可以避免回頭修改檔頭。

Parquet 中的列群組是什麼?

列群組是表格的水平切片。規範將檔案的欄描述為「拆分為 M 個列群組」,每個欄在每個群組中儲存為獨立的區塊。這種版面配置讓讀取器可以同時跳過不需要的群組和欄。