iT邦幫忙

2025 iThome 鐵人賽

DAY 4
1

簡介

DAY3 知識之章-Data Lake, Warehouse and Lakehouse 中,我們聊到新的儲存架構。本篇要帶大家認識 開放數據格式 (Open Data Format),它們是建構 Lakehouse 的核心之一。

什麼是開放數據格式?

開放數據格式指的是任何人都能自由使用、修改與分享的數據存儲格式,通常具備以下特徵:

  • 開放規範:規範公開透明
  • 免費使用:不需授權費用
  • 跨平台支援:多種工具可讀寫
  • 社群驅動:由開源社群持續維護

開放 vs 專有格式

特性 開放格式 專有格式
規範透明度 完全公開 通常保密
工具支援 多廠商支援 單一廠商
長期保存 高可靠性 依賴廠商
互操作性 優秀 有限
創新速度 社群驅動 廠商控制

常見的開放數據格式

格式總覽

類別 格式 特點 優勢 劣勢 適用場景
結構化 CSV 純文本、人類可讀 簡單、工具支援廣 無型別、無壓縮、查詢慢 小型數據、交換、匯出
半結構化 JSON 支援嵌套、Web 標準 靈活、語言支援廣 存儲效率低、查詢慢 API 傳輸、設定檔
列式存儲 Parquet 列式存儲、高效壓縮 查詢快、壓縮好、支援 Schema 演進 寫入複雜、不適合頻繁更新 大數據分析、BI
列式存儲 ORC Hive 優化、內建索引 極高壓縮比、快速讀取 限 Hadoop、生態較窄 Hadoop/Hive 環境
行式存儲 Avro 行式存儲、Schema 演進 串流友好、序列化快 查詢慢、檔案大 Kafka 串流、數據序列化

各格式詳細介紹與範例

CSV (Comma-Separated Values)

id,name,age
1,Alice,30
2,Bob,25

JSON (JavaScript Object Notation)

{
  "id": 1,
  "name": "Alice",
  "skills": ["SQL", "Python"]
}

Apache Parquet

沒辦法直接讀取檔案,要透過程式或套件讀取。

import pandas as pd

# 建立 DataFrame
df = pd.DataFrame({"id":[1,2],"name":["Alice","Bob"]})

# 存成 Parquet
df.to_parquet("data.parquet")

print("已儲存成 data.parquet")

# 從 Parquet 讀回來
df2 = pd.read_parquet("data.parquet")
print(df2)

df2 資料呈現:

   id   name
0   1  Alice
1   2    Bob

Apache ORC

Hive 建表語法

CREATE TABLE users (
  id INT,
  name STRING
) STORED AS ORC;

Apache Avro

Schema 定義

{
  "type": "record",
  "name": "User",
  "fields": [
    {"name": "id", "type": "int"},
    {"name": "name", "type": "string"}
  ]
}

結論與建議

根據不同的需求,選擇不同的檔案格式,才是最佳的方式。

如果要簡單的做區分,可以參考以下:

  • 預設:Parquet
  • 串流與跨系統: Avro
  • API 交換:CSV/JSON
  • 需要 Hive/Presto 強統計: ORC

接著再搭配 Iceberg/Delta/Hudi 做表級治理、分區演進與小檔合併,才能真正把 Lakehouse 架構的價值展性出來。

下篇預告

在下一篇 「DAY5 知識之章 - Apache Iceberg」 中,我們將探索這個近年來最受矚目的 資料湖表格格式 (Table Format)

它能解決傳統檔案格式的諸多限制,並帶來像資料庫一樣的操作體驗。

參考資料

[1] Apache Parquet
[2] Apache ORC
[3] Apache Avro


上一篇
DAY3 知識之章-Data Lake,Warehouse and Lakehouse
下一篇
DAY5 知識之章-Apache Iceberg
系列文
動漫宅的 30 天 AWS Lakehouse 修行日誌7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言