DuckDB Now Supports MERGE on Iceberg Tables
原始來源與檔名:2026-06-09T094337+0800-DuckDB Now Supports MERGE on Iceberg Tables.md
NAPKIN | 餐巾纸
餐巾纸公式
DuckDB + Apache Iceberg + MERGE = Lightweight Data Lake Upserts 利用 DuckDB 原生支援 Iceberg 的 MERGE 語法,免去龐大的 Spark 叢集即可實作資料湖上的更新與寫入。
一句话
DuckDB v1.5.3 新增了對 Apache Iceberg 的 MERGE INTO 支援,讓開發者能以極低成本在 S3 等資料湖上進行輕量級的 Upsert 操作。
餐巾纸草图
[AWS Lambda / Laptop] -> DuckDB (MERGE INTO) -> [S3 Iceberg Tables]
(No Spark Needed!)
ROUND 1: SKELETON | 骨架掃描
“这本书在说什么”
- 核心问题: 在資料湖上進行小規模的 upsert 操作往往需要啟動笨重且昂貴的 Spark 叢集。
- 核心答案: DuckDB 1.5.3 引入了對 Iceberg 的原生
MERGE支援,允許直接使用 SQL 更新 S3 上的資料表。 - 论证结构: 點出痛點 -> 介紹設定方式 -> 提供 MERGE、DELETE、INSERT-only 的具體 SQL 範例。
章节骨架
- Why this matters: 說明取代 Spark 所帶來的好處(低成本、低延遲、架構簡單)。
- Quick setup: 如何設定 S3 Secret 與建立 Iceberg Table。
- Examples: 展示 Upsert, Delete, 以及 Insert-only 的
MERGE INTO用法。
ROUND 2: DISSECTION | 血肉解剖
“凭什么这么说”
论证链
大數據架構過度複雜 --> DuckDB 提供強大的單機 SQL 引擎並支援 Iceberg --> 透過 MERGE 語法可輕易修改 S3 Table --> 大幅降低資料處理門檻與成本
关键证据
- 無縫整合 S3: 透過
CREATE SECRET與ATTACH ... TYPE iceberg, ENDPOINT_TYPE s3_tables,即可將 AWS S3 儲存桶視為資料庫。 - 標準化語法: 支援標準 SQL 的
MERGE INTO ... WHEN MATCHED THEN UPDATE WHEN NOT MATCHED THEN INSERT;。
隐形假设与边界
- 隐形假设: 資料量(或單次更新的數據集大小)適合在單節點(如 Lambda、筆電)的記憶體/算力範圍內處理。
- 边界条件: 不適用於 PB 級聯集運算的超級大規模更新,此時仍需分散式系統。
ROUND 3: SOUL | 靈魂提取
“还能怎么用”
- 作者盲点: 沒有提到並發寫入 (Concurrent writes) 時 Iceberg 的衝突解決機制在 DuckDB 中的表現。
- 知识连接: 可結合 dbt + DuckDB,在輕量環境下構建完整的 Modern Data Stack (MDS)。
- 行动触发: 將個人專案中的小型 Spark ETL 替換為 AWS Lambda + DuckDB 架構。
跨域映射
- 在 軟體工程,這叫 從微服務退回到單體架構 (Monolithic) 的簡化紅利。
DuckDB Now Supports MERGE on Iceberg Tables (Architectural Deep Dive)
前言/背景
過去在資料湖(如 Apache Iceberg)上處理 Upsert(更新與插入)往往需要啟動 Apache Spark 等龐大的分散式計算引擎,導致維運負擔與成本增加。DuckDB v1.5.3 的釋出改變了這個現狀。
章節詳細總結
輕量化資料湖操作
DuckDB 現在支援直接對 Iceberg 資料表執行 MERGE INTO 操作。這意味著開發者可以在 AWS Lambda、Ray 或是個人筆電上直接讀寫 S3 上的 Iceberg 表。
核心配置與使用範例
首先需要設定 S3 憑證並連接到 S3 Tables Catalog:
CREATE OR REPLACE SECRET s3_dev (
TYPE s3,
PROVIDER credential_chain,
CHAIN 'config',
PROFILE 'dev',
REGION 'us-east-1'
);
ATTACH 'arn:aws:s3tables:us-east-1:12345:bucket/demo' AS s3_tables_db (
TYPE iceberg,
ENDPOINT_TYPE s3_tables
);
接著,利用 MERGE INTO 可以輕易實現 Upsert。例如更新現有客戶餘額或插入新客戶:
MERGE INTO s3_tables_db.lab1.customers2 AS target
USING (
FROM (VALUES (1, 'Alice', 'Boston', 150.00)) t(customer_id, name, city, balance)
) AS upserts
ON target.customer_id = upserts.customer_id
WHEN MATCHED THEN UPDATE
WHEN NOT MATCHED THEN INSERT;
同樣的語法也支援僅刪除 (WHEN MATCHED THEN DELETE) 或是僅插入 (WHEN NOT MATCHED THEN INSERT) 的情境。
總結與結論
- DuckDB 賦予了輕量級環境直接操作現代資料湖的能力,大幅降低了 ETL 的進入門檻。
- 透過支援標準 SQL 的 MERGE 語法,既有的資料庫操作邏輯能無縫轉移到 Iceberg 架構上。
- 這將促進去中心化或無伺服器 (Serverless) 資料工程架構的普及。