# Parquet Viewer

> Parquet 檔怎麼開？直接丟進瀏覽器：schema、row group、壓縮 codec、統計值立刻看到，預覽前幾列，用 DuckDB 下 SQL，再把 Parquet 轉 CSV。全程不上傳。

- URL: https://bytescope.dev/zh-Hant/parquet-viewer/
- Locale: zh-Hant · Also: [en](https://bytescope.dev/en/parquet-viewer.md) · [ja](https://bytescope.dev/ja/parquet-viewer.md)
- Runs: 檔案直接從你的硬碟讀取，不會上傳。解析和每一條 SQL 查詢都在這個分頁裡完成；唯一會下載的是 DuckDB 引擎，第一次查詢時才抓。
- Requires: Any modern browser, desktop and mobile. The first SQL query downloads a DuckDB engine of about 7 MB, which the browser then keeps.
- Updated: 2026-09-08

## What it does

同事丟來一個 .parquet 檔，你只想知道裡面裝了什麼——有哪些欄位、型別是什麼、大概幾列、前幾筆長怎樣。平常這表示要開 Jupyter、載入 `pyarrow` 或 `pandas`，為了一個三十秒的問題花幾分鐘準備環境。這個頁面就是為那一刻準備的 Parquet 檢視器：檔案丟進來，schema、row group 和預覽直接排好，需要彙總就在原地下 SQL。它也能開 `.jsonl` / `.ndjson`、Arrow IPC 檔（`.arrow`、`.feather`）和 `.avro`，一次一個檔案。CSV 請改用 CSV Explorer。

### 引擎還沒載入就看得到的東西

Parquet 把整個檔案的目錄放在結尾的 footer 裡，所以頁面只讀檔案最後那一段——大約 512 KB——不管檔案是 10 MB 還是 1 GB，schema 都是立刻出現。你會看到一棵 schema 樹：每個欄位的名稱、實體型別與邏輯型別（`TIMESTAMP(MICROS, UTC)`、`DECIMAL(18,2)`、巢狀的 struct、list、map）、可不可以是 null、總列數、每個 row group 的列數與位元組數、每欄的壓縮 codec（`SNAPPY`、`ZSTD`、`GZIP` 等）、用到的 encoding、壓縮前後的大小與壓縮比、寫入端有存的話還有 min/max 與 null 數統計、`created_by` 字串，以及 pandas 或 Spark 的 schema JSON 這類 key/value metadata（預設收合，點開才展開）。接著前 1,000 列的預覽會串流進虛擬表格。巢狀值可以展開成 JSON；時間戳記依單位用固定位數顯示（毫秒 3 位、微秒 6 位、奈秒 9 位），欄位標成 UTC 的話尾巴加 `Z`；decimal 顯示的是精確值，不會經過浮點數捨入；二進位欄位則顯示前 32 個位元組的十六進位。

### 在瀏覽器裡下 SQL

查詢列由 DuckDB-WASM（DuckDB 1.4）驅動。第一次執行 SQL 時頁面會下載引擎，約 7 MB，之後瀏覽器會快取起來；Parquet 與 JSON 擴充則由本站自己提供。你的檔案永遠叫做資料表 `t`，所以預設查詢是 `SELECT * FROM t LIMIT 100`；範本一鍵帶出 `SUMMARIZE t`、`count(*)`、每欄的 null 比例，以及某一欄的前 N 名。每次結果都會顯示耗時與列數；畫面最多保留 10,000 列結果，要更多就加 `LIMIT` 或直接匯出。任何結果都能匯出成 CSV 或 JSONL，每次最多 1,000,000 列——超過被截掉時頁面會明講——這也是把 Parquet 轉 CSV 給打不開 Parquet 的人最快的方法。Stop 按鈕可以中止執行中的查詢，引擎的錯誤訊息原樣呈現、不改寫。1 GB、幾千萬列的檔案上，`count(*)` 從 metadata 直接讀所以瞬間完成，對單一欄位 `GROUP BY` 或對全部欄位 `SUMMARIZE` 則要幾秒到幾十秒；檔案只會分段讀取需要的部分，不會整個載入記憶體。

### 誠實的限制

引擎只跑在一顆 CPU 核心上，因為本站無法開啟瀏覽器的多執行緒模式，所以大型 `GROUP BY` 或 join 會比同一台機器上的桌面版 DuckDB 明顯慢。記憶體受瀏覽器限制——32 位元 WebAssembly heap 大約 4 GB——超大的排序或 join 可能失敗，這時你會看到引擎自己的錯誤訊息。使用 modular encryption 加密的 Parquet 打不開。Iceberg 和 Delta Lake 是疊在 Parquet 上面的資料表層，這裡不會解讀：頁面開的是單一資料檔，不是整個資料表目錄，多檔選取也還沒支援。Arrow IPC 與 Avro 目前只顯示 schema 和 metadata，沒有列預覽也不能下 SQL。舊版 Spark 寫出來、帶溢位的 `INT96` 時間戳記，可能會顯示成「自 epoch 起的奈秒數」而不是日期。超過 15 位數的 `DECIMAL` min/max 統計是近似值，會標上 ≈。還不能匯出成 Parquet，結果只能以 CSV 或 JSONL 離開。

### 隱私

檔案用 `File.slice` 直接從你的磁碟讀取；什麼都不上傳，資料和查詢都不會離開瀏覽器。唯一的對外請求是第一次執行 SQL 時，從公開 CDN cdn.jsdelivr.net 抓 DuckDB 引擎的程式碼，之後就快取起來。

## Limits

Does not upload the file, write back to a Parquet file, read encrypted Parquet files, Iceberg or Delta tables, or several files at once; SQL runs on one file at a time.

## FAQ

### 不裝 Python 怎麼開 Parquet 檔？

把檔案丟到這個頁面就好。schema、row group、codec、統計值和 metadata 會從檔案的 footer 立刻顯示出來，前 1,000 列載入到可以捲動的表格裡。不用 `pyarrow`、不用 notebook、不用安裝任何東西——而且什麼都不會上傳，因為檔案是從你自己的磁碟讀的。

### 我的檔案會上傳到哪裡嗎？

不會。瀏覽器用 `File.slice` 讀檔，解析 footer、預覽列、執行 SQL 全部都在分頁裡完成。唯一會下載的是 DuckDB 引擎本身，約 7 MB，第一次執行查詢時從公開 CDN 抓下來。你的資料和查詢都不會離開你的機器。

### 為什麼第一次下 SQL 會下載約 7 MB？從哪裡下載？

schema 和預覽不需要引擎，但 SQL 是由編譯成 WebAssembly 的 DuckDB 執行的，那段程式碼大約 7 MB。第一次按 Run 時從公開 CDN cdn.jsdelivr.net 抓取，之後瀏覽器會快取供下次使用；Parquet 與 JSON 擴充來自本站。下載的只有引擎——你的檔案不會被送到任何地方。

### 為什麼大型 GROUP BY 比我筆電上的 DuckDB 慢？

桌面版 DuckDB 會把工作分散到你所有的核心上。這裡引擎只跑一顆核心，因為本站無法啟用瀏覽器的多執行緒 WebAssembly 模式。單純的掃描和從 metadata 讀出來的 `count(*)` 很快，但幾千萬列上的重型 `GROUP BY`、排序或 join 會花幾秒到幾十秒，而不是桌面版的零頭。

### 怎麼把 Parquet 轉成 CSV？

開啟檔案，執行像 `SELECT * FROM t` 這樣的查詢，再把結果匯出成 CSV。每次匯出最多寫 1,000,000 列；結果更大的話會在那裡截斷、頁面會告訴你，這時加 `WHERE` 或 `LIMIT` 分批匯出就好。JSONL 匯出也是同樣做法。匯回 Parquet 目前還不支援。

### 可以開整個 Iceberg 或 Delta Lake 資料表嗎？

不行。Iceberg 和 Delta Lake 是描述一大堆 Parquet 檔的 metadata 層；這個頁面一次只開一個資料檔，不會讀那些資料表 manifest。從資料表的資料夾裡挑一個 `.parquet` 檔，就能檢視它的 schema 和列。多檔選取也還沒支援。

### Arrow、Feather、Avro 檔也能用嗎？

schema 和 metadata 可以：丟進 Arrow IPC 檔（`.arrow`、`.feather`）或 `.avro` 檔，欄位名稱和型別就會顯示出來。這些格式在這個版本還沒有列預覽和 SQL。JSONL / NDJSON 則是完整支援——從前幾列推斷 schema，預覽和 SQL 都能用。

### 為什麼時間戳記顯示成自 epoch 起的奈秒數？

舊版 Spark 寫出的 `INT96` 時間戳記可能溢位，這種值沒辦法換算成可信的日期，所以頁面不猜，直接顯示原始數值。正確寫入的時間戳記會依單位用固定位數顯示——毫秒 3 位、微秒 6 位、奈秒 9 位——欄位標成 UTC 的話再加上 `Z`。

## Related tools

- [CSV Explorer](https://bytescope.dev/zh-Hant/csv-explorer.md) — Excel 開不動的 CSV，直接在瀏覽器用 SQL 查。
- [SQLite Viewer](https://bytescope.dev/zh-Hant/sqlite-viewer.md) — 瀏覽 SQLite 資料庫：資料表、schema、SQL 查詢，全部在本機完成。
- [Large File Viewer](https://bytescope.dev/zh-Hant/large-file-viewer.md) — 幾 GB 的文字、log 或 JSON 檔，不用整個載入也能讀。
