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,下面介绍命令行工具的使用,毕竟命令行工具功能更丰富。

安装

1
brew install duckdb

启动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界面1。打开本地UI界面:

1
duckdb -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