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 | 骨架掃描

“这本书在说什么”

章节骨架

  1. Why this matters: 說明取代 Spark 所帶來的好處(低成本、低延遲、架構簡單)。
  2. Quick setup: 如何設定 S3 Secret 與建立 Iceberg Table。
  3. Examples: 展示 Upsert, Delete, 以及 Insert-only 的 MERGE INTO 用法。

ROUND 2: DISSECTION | 血肉解剖

“凭什么这么说”

论证链

大數據架構過度複雜 --> DuckDB 提供強大的單機 SQL 引擎並支援 Iceberg --> 透過 MERGE 語法可輕易修改 S3 Table --> 大幅降低資料處理門檻與成本

关键证据

  1. 無縫整合 S3: 透過 CREATE SECRETATTACH ... TYPE iceberg, ENDPOINT_TYPE s3_tables,即可將 AWS S3 儲存桶視為資料庫。
  2. 標準化語法: 支援標準 SQL 的 MERGE INTO ... WHEN MATCHED THEN UPDATE WHEN NOT MATCHED THEN INSERT;

隐形假设与边界

ROUND 3: SOUL | 靈魂提取

“还能怎么用”

跨域映射


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) 的情境。

總結與結論