Featured image of post DuckDB 入门教程:从零开始的完整指南(2026版)

DuckDB 入门教程:从零开始的完整指南(2026版)

全网最详细的 DuckDB 入门教程,从安装配置到第一个SQL查询。零基础也能在10分钟内上手 DuckDB,涵盖CLI、Python、数据导入导出等核心操作。

DuckDB 是什么?为什么它值得学?

DuckDB 是一个嵌入式列式数据库,专门为分析型查询(OLAP)而生。它不像 MySQL/PostgreSQL 那样需要安装服务器、配置端口、管理用户——你只需要一个文件就能启动。

一句话说清: DuckDB 就是把 Excel 的易用性 + 数据库的查询能力 + 列式存储的性能,打包成一个不到 30MB 的可执行文件。

谁应该学 DuckDB?

  • 数据分析师:不想学 Pandas 复杂的 API,用 SQL 直接分析 CSV/Parquet
  • 数据工程师:快速跑 ETL、做数据质量检查,不需要搭 Spark 集群
  • Python 开发者:在 Jupyter 里用 DuckDB 代替 Pandas,处理超过内存的数据
  • 后端开发者:嵌入 DuckDB 做本地分析,比 SQLite 快 10-100 倍(分析场景)

第一步:安装 DuckDB

Windows 安装

# 方式一:下载单个 exe 文件(推荐)
# 访问 https://duckdb.org/download/ → 下载 Windows 版
# 解压后得到一个 duckdb.exe,双击即可运行

# 方式二:使用 winget
winget install DuckDB.cli

# 方式三:使用 Python pip(自动安装 CLI)
pip install duckdb duckdb-cli

macOS 安装

# 方式一:Homebrew(推荐)
brew install duckdb

# 方式二:直接下载 CLI
# 访问 https://duckdb.org/download/ → 下载 macOS 版

Linux 安装

# 方式一:一行命令安装
curl -sL https://install.duckdb.org | sh

# 方式二:Debian/Ubuntu
sudo apt install duckdb

# 方式三:直接下载二进制
wget https://github.com/duckdb/duckdb/releases/download/v1.2.0/duckdb_cli-linux-amd64.zip
unzip duckdb_cli-linux-amd64.zip
./duckdb

Python 安装(最常用方式)

pip install duckdb

安装完成后,在 Python 中验证:

import duckdb
print(duckdb.__version__)
# 输出: 1.2.0(或更新的版本)

第二步:第一个 DuckDB 查询

启动 CLI

# 直接进入内存数据库
duckdb

# 或者指定文件作为数据库
duckdb my_first_db.duckdb

第一个 SQL 查询

SELECT 'Hello, DuckDB!' AS greeting;

输出:

┌─────────────────┐
│    greeting     │
│    varchar      │
├─────────────────┤
│ Hello, DuckDB!  │
└─────────────────┘

创建表和插入数据

-- 创建一个简单的销售表
CREATE TABLE sales (
    product VARCHAR,
    category VARCHAR,
    amount DECIMAL(10,2),
    sale_date DATE
);

-- 插入数据
INSERT INTO sales VALUES
    ('MacBook Pro', 'Electronics', 1999.00, '2026-01-15'),
    ('AirPods', 'Electronics', 249.00, '2026-01-16'),
    ('Desk Chair', 'Furniture', 899.00, '2026-01-17'),
    ('Monitor', 'Electronics', 599.00, '2026-01-18');

-- 按分类汇总
SELECT 
    category,
    COUNT(*) AS orders,
    SUM(amount) AS total,
    AVG(amount) AS avg_amount
FROM sales
GROUP BY category;

第三步:直接查询文件(DuckDB 最强大的功能)

DuckDB 最大的优势是不需要导入数据——直接查询 CSV、Parquet、JSON 文件。

查询 CSV 文件

-- 直接查询 CSV,无需导入
SELECT * FROM 'sales_2026.csv' LIMIT 10;

-- 带聚合的查询
SELECT 
    region,
    COUNT(*) AS transactions,
    SUM(revenue) AS total_revenue
FROM 'sales_data.csv'
GROUP BY region
ORDER BY total_revenue DESC;

查询 Parquet 文件

-- Parquet 是列式存储格式,DuckDB 的绝配
SELECT 
    date_trunc('month', order_date) AS month,
    product_category,
    SUM(order_amount) AS monthly_revenue
FROM 'orders_2026.parquet'
WHERE order_date >= '2026-01-01'
GROUP BY ALL
ORDER BY month;

查询 JSON 文件

-- 直接查询 JSON Lines 文件
SELECT 
    json_extract(data, '$.user.name') AS user_name,
    json_extract(data, '$.action') AS action
FROM 'activity_log.jsonl'
LIMIT 20;

第四步:Python 集成(最常用)

基础用法

import duckdb

# 方式一:直接执行 SQL
result = duckdb.sql("SELECT 'Hello World' AS greeting")
print(result)

# 方式二:创建连接
con = duckdb.connect('my_database.duckdb')
con.sql("CREATE TABLE users AS SELECT * FROM 'users.csv'")
con.sql("SELECT COUNT(*) FROM users").show()

和 Pandas 互操作

import pandas as pd
import duckdb

# DataFrame → DuckDB 查询
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie'],
    'salary': [80000, 95000, 120000]
})

result = duckdb.sql("""
    SELECT name, salary,
           AVG(salary) OVER () AS company_avg,
           salary - AVG(salary) OVER () AS diff
    FROM df
""")
print(result)

第五步:常用操作速查

导入导出数据

-- CSV 导出
COPY (SELECT * FROM sales) TO 'sales_export.csv' WITH (HEADER true);

-- Parquet 导出
COPY orders TO 'orders.parquet' (FORMAT PARQUET);

-- 从 CSV 导入到表
CREATE TABLE customers AS 
    SELECT * FROM read_csv('customers_2026.csv',
        header = true,
        auto_detect = true
    );

连接多个文件

-- 通配符读取多个 CSV
SELECT * FROM 'data_2026_*.csv';

-- 合并多个 Parquet 文件
SELECT * FROM 'sales/*.parquet';

-- 交叉查询不同数据库
ATTACH 'inventory.db' AS inv;
SELECT o.*, i.stock_level
FROM orders o
JOIN inv.inventory i ON o.sku = i.sku;

架构图

下一步学什么?

  • DuckDB 实战 EP2:5分钟导入10GB数据 → 学习大规模数据的读取技巧
  • DuckDB 实战 EP3:SQL 高级技巧 → 窗口函数、CTE、Pivot
  • DuckDB + Python 最佳搭档 → 用 DuckDB 做特征工程和 ML 流水线
  • 构建你的第一个 DuckDB 数据产品 → 在线速查表实战

📘 博客: https://duckdblab.org 📕 书籍: Build Data SaaS with DuckDB & Streamlit #DuckDB #入门教程 #数据分析 #SQL教程

📺 Watch video tutorials → DuckDB Lab YouTube

Subscribe for more DuckDB & AI automation tutorials

使用 Hugo 构建
主题 StackJimmy 设计