具代表性的面試主題

資料工程面試:如何用 Parquet 頁級 CRC 校驗處理損壞資料?

資料困難
Offer.cc 編輯團隊發佈 更新

題幹

物件儲存中的 Parquet 檔案偶發讀取校驗失敗。你會如何啟用頁級 CRC、定位損壞範圍,並在舊 reader、壓縮與重試之間取捨?

題幹與適用場景

湖倉工作從物件儲存讀取 Parquet。少量檔案在跨區域複製後出現頁資料損壞,現有流程只能在整檔失敗時重跑。請設計頁級 CRC 校驗方案,說明校驗範圍、壓縮順序、reader 相容、隔離損壞頁和驗收指標。題目適合資料工程、儲存格式與湖倉基礎設施職位,核心考察列式檔案完整性,歸為 data

面試官考察點

  1. 區分頁級 CRC 與檔案級校驗,知道 CRC 欄位是可選的。
  2. 說清楚校驗物件與壓縮邊界,不把標頭和解壓結果混為一談。
  3. 設計舊 reader 忽略 CRC 時的相容與灰度策略。
  4. 發現壞頁後阻止靜默髒讀,分離隔離、重複與重寫。
  5. 用結果一致性、定位時間及額外 CPU/I/O 衡量收益。

回答前需要釐清的問題

  • writer、reader 版本是否實作頁 CRC?
  • 損壞發生在物件儲存、複製鏈路還是本地快取?
  • 是否啟用壓縮、加密或頁索引?reader 能否定位 column chunk?
  • 業務要求完整恢復,還是可接受重建分割區?
  • 重試會不會把壞物件繼續放入快取?

30 秒回答框架

「我先依 Parquet format 規範確認頁 CRC 的讀寫支援,記錄檔案、row group、column chunk、頁類型與物件版本。校驗失敗立即隔離物件,保留定位資訊,不跳過回傳結果;透過副本或上游重寫恢復。舊 reader 忽略 CRC 仍可讀取,但不能視為完整性證明。灰度階段注入 data page、dictionary page 與複製截斷損壞,量測捕獲率、定位時間、重試成本與結果一致性。」

分步驟深入解答

第一步:確認規範邊界

Parquet 頁標頭含可選的 32 位元 CRC 欄位,可用於 data page、dictionary page 等頁型。先確認 writer 是否填入、reader 是否驗證;只改 writer 設定不能保證消費端會檢測。

第二步:處理壓縮與校驗順序

CRC 的位元組範圍以格式定義與實作為準。固定「寫入算什麼、讀取驗什麼」的版本矩陣,不能自行把解壓後值重新計算。壓縮解碼失敗與 CRC 不符要分開記錄。

第三步:設計故障隔離

校驗失敗讓檔案讀取失敗並進入隔離佇列,記錄 URI、版本、頁定位和錯誤類型。不可靜默跳過壞頁。先嘗試同版本副本,副本均壞則重寫分割區或重放上游。

第四步:相容舊 reader

舊 reader 可能忽略 CRC 欄位並回傳資料,所以「能讀」不等於「已驗證」。灰度時建立 reader 版本矩陣;關鍵工作使用嚴格驗證 reader,舊版本只標示能力不足。

第五步:結合加密與頁索引

頁加密、壓縮與 CRC 順序遵循目標實作。CRC 不是加密認證,頁索引也不能取代 payload 驗證。讀取路徑完成格式要求的完整性驗證後,才進行解碼與裁剪。

第六步:構造損壞注入測試

只翻轉一個 data page 位元組,再分別破壞 dictionary page、頁標頭、檔案尾端和複製版本。覆蓋壓縮編碼、null、空頁與大頁,檢查新舊 reader 差異。

第七步:定義可重複驗收

固定物件版本、並發與冷快取,對比 CRC 開關的 CPU、讀取位元組、p95、捕獲率與定位時間。未損壞資料結果須一致;損壞樣本須失敗並進入隔離佇列。

高品質示範回答

「我會先依 Parquet 規範和目標 reader 實作確認頁 CRC 的可選欄位、涵蓋頁型及確切位元組範圍。讀取先驗證 CRC,再解壓與解碼;壓縮錯誤與 CRC 錯誤分開統計。壞頁立即讓檔案失敗並隔離,按物件版本嘗試副本,不能跳過回傳部分結果。

舊 reader 可能忽略 CRC,因此灰度建立版本矩陣與能力標籤。用位元翻轉、頁標頭損壞、字典頁損壞和複製截斷測試,量測捕獲率、定位時間、CPU、讀取位元組、恢復率和結果雜湊,再決定是否擴大範圍。」

常見錯誤

  • 把 CRC 當加密認證 → CRC 不能防篡改 → 需要時疊加加密認證。
  • 只改 writer 不測 reader → 下游可能忽略欄位 → 建立版本矩陣。
  • 跳過壞頁繼續回傳 → 產生靜默缺行 → 失敗並隔離。
  • 無限重試同一物件 → 放大成本 → 固定版本並設重試上限。
  • 只測整檔損壞 → 漏掉頁級邊界 → 做分層注入。

追問及應對

追問一:CRC 能防惡意竄改嗎?

不能。CRC 偵測隨機錯誤;防竄改要用加密認證、簽章或受信儲存校驗。

追問二:舊 reader 忽略 CRC 會破壞相容嗎?

通常不會改變可讀性,但無法提供完整性保證。關鍵工作應使用嚴格驗證版本。

追問三:可以只重讀壞頁嗎?

可嘗試範圍讀取或副本,但完整結果仍須驗證;否則要重寫檔案或重放上游。

追問四:為何記錄物件版本?

避免重試期間物件被覆蓋,讓錯誤與恢復都對應同一份位元組內容。

追問五:如何控制效能成本?

以真實頁大小和併發量測 CPU、吞吐與 p95,先在高風險分割區灰度。

公開來源

同類題目