# paste to Claude (MotherDuck MCP)Using the MotherDuck MCP, load and inspect this public dataset:
s3://noaa-ghcn-pds/parquet/by_year/
Figure out what's in it, then help me understand how temperature
has evolved over the years in the EU. Create a Flight to
ingest/update the data, then a Dive to visualize the results.
Who am I?
Husband and father of two.
12y+ in data as a data / platform engineer.
From on-prem Spark clusters at AXA to cloud data platforms at Klarna, Back Market, and Trade Republic.
Joined MotherDuck in 2023 as its first DevRel. If you typed duckdb on YouTube, you'll see my face. Sorry.
Everybody is at a different stage of their DuckDB journey.
"I ran Quack and DuckLake in prod before 1.0."
"It said the database is locked… does someone have the password?"
Where are you on the road?
More concurrent writers push you right, more users push you up. Two axes decide your architecture.
more users / reads ↑
vanilla wall
single-node .duckdb
partition per slice
Quack server
DuckLake + Postgres
a database company
more concurrent writers →
1 writermany writers
single node handles it crosses the wall: protocol or catalog you run the whole database
Where the formula tips
Self-host cost = your rate × time building and maintaining. Buy cost = managed price + value lost to its limits.
self-host: your time, forever managed: a price, plus its limits
Watch for this icon: a box you build and/or maintain.
00
The honeymoon
Laptop · the honeymoon · full 810M-row scan · lower is better
laptop · DuckDB
M5 Max · 64 GB
Q1 · full scanSELECT … FROM lineitem
▸ click for query + dataset
local SSD
.duckdb filenative format
4.8 s
parquet fileraw, same SSD
8.5 s
10 ms point reads · full 810M-row scan in ~4.8 s — native .duckdb is ~1.8× faster than parquet.
-- TPC-H Q1 · full 810M-row lineitem scan + grouped aggregationSELECT l_returnflag, l_linestatus,
SUM(l_quantity) AS qty,
SUM(l_extendedprice) AS revenue,
AVG(l_discount) AS avg_disc,
COUNT(*) AS cnt
FROM lineitem -- native .duckdb table | or read_parquet('…')WHERE l_shipdate <= DATE '1998-09-02' -- ~98% of rows: real full scanGROUP BY 1, 2 ORDER BY 1, 2;