DuckDB简介
DuckDB
: An Embedded Analytical Database
DuckDB是一款开源的嵌入式(类似SQLite)分析数据库,旨在提供高效的查询性能。
支持标准SQL查询,提供了命令行工具及Golang等多种编程语言的Client API。
DuckDB提供了丰富的SQL方言。可以读取和写入多种常见文件格式,如CSV、JSON和Excel,支持从本地文件系统及对象存储服务进行读/写操作。
Live Demo
官方提供了直接运行在浏览器环境的Demo,体验地址:Live Demo
。
界面如下:

该Demo通过WebAssembly技术实现。支持导入本地文件,担心数据安全问题可以断网体验;还支持导入在线数据集,可在浏览器控制台看到导入请求。
体验完了Live Demo,下面介绍命令行工具的使用,毕竟命令行工具功能更丰富。
安装
启动DuckDB命令行工具
1
2
3
4
5
6
7
8
9
10
11
| ## 内存模式
duckdb
## 数据将持久化至指定文件中
duckdb xxx.duckdb
## 查看帮助
.help
## 退出
.quit
|
导入数据
使用DuckDB导入CSV、JSON文件非常简单。
以下是示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| ## 最简单的导入方式
CREATE TABLE table1 AS SELECT * FROM 'sample.csv';
## 使用对应解析函数,支持传参
## 导入CSV
CREATE TABLE table1 AS SELECT * FROM read_csv_auto('sample.csv');
# 从API导入CSV
CREATE TABLE flights AS (SELECT * FROM 'https://duckdb.org/data/flights.csv');
## 导入JSON
CREATE TABLE table2 AS SELECT * FROM read_json('sample.json');
## 导入Excel
CREATE TABLE table3 AS (SELECT * FROM read_xlsx('sample.xlsx'));
|
查看表结构及数据
1
2
3
4
5
6
| DESC flights;
SELECT * FROM flights limit 2;
-- 这里删除表不会删除本地文件
DROP TABLE flights;
|
数据分析
数据导入DuckDB后,就可以使用SQL进行各种分析。如分组统计、JOIN等操作。
1
| SELECT COUNT(1) FROM flights;
|
导出结果
分析完成后,你可能需要将结果导出为CSV或JSON文件。DuckDB提供了简单的导出功能。
1
2
3
4
5
6
7
8
9
10
| -- 查询结果保存为CSV文件
COPY (SELECT * FROM flights WHERE xxx) TO 'output.csv';
-- 带参数
COPY (SELECT * FROM flights) TO 'output.csv' WITH (FORMAT CSV, HEADER TRUE);
COPY (SELECT * FROM flights) TO 'output.json';
COPY (SELECT * FROM flights) TO 'output.json' WITH (FORMAT JSON);
-- CSV转JSON
COPY (SELECT * FROM 'flights.csv') TO 'flights.json';
|
UI界面
DuckDB v1.2.1版本开始支持本地UI界面。打开本地UI界面:
Snippets
这个网站收录了网友分享的DuckDB相关代码片段,DuckDB Snippets:SQL, Python & Other Code Snippets
总结
DuckDB是一个强大的工具,能够满足日常数据处理和分析的需求。
你可以轻松导入CSV、Excel和JSON文件,通过编写SQL对数据进行分析,并将结果导出为所需的格式。
参考文档
DuckDB CLI API文档
DuckDB vs SQLite: Performance, Scalability and Features