使用 DuckDB 分析 CSV 文件

CSV 这种格式太常见了。银行导出的流水、购物平台导出的订单、自己记的账、各种后台导出的报表,基本都是 CSV。

想分析一下,用 Excel 打开大文件容易卡,用数据库又得先建表、导入,折腾一圈可能就为了看几个数。

DuckDB 可以直接读 CSV,自动推断列名和类型,然后用 SQL 查。

装完就能用,不用起服务。

1. 安装 DuckDB,直接读 CSV

DuckDB 是个嵌入式 OLAP 数据库,类似 SQLite,但面向分析。安装就一行:

bash 复制代码
curl https://install.duckdb.org | sh
/home/user/.duckdb/cli/latest/duckdb

启动后直接查 CSV:

sql 复制代码
SELECT * FROM read_csv('/opt/share/shopping_data.csv') LIMIT 5;

比如你从某个购物平台导出了一份 shopping_data.csv,里面有客户名、年龄、消费金额、商品类别。

read_csv() 直接扫描文件,自动处理表头和类型,不需要 CREATE TABLE,也不需要 COPY 导入。

2. 先看数据结构

数据已经摆在眼前,但先别急着动手。就像下厨前要先认识食材一样,我们得先搞清楚这份数据的"脾气秉性"。

查之前先确认列名和类型,避免后面算错。

sql 复制代码
DESCRIBE SELECT * FROM read_csv('/opt/share/shopping_data.csv') LIMIT 5;

输出会列出每列的类型,比如 age 是 BIGINT,purchase_amount 是 DOUBLE,category 是 VARCHAR。

知道类型后,聚合和筛选就稳了。

3. 快速汇总统计

好了,现在我们对数据已经了如指掌,是时候来回答最基础的问题了。

比如你想知道这份购物记录里,客户年龄和消费金额的大致范围。

sql 复制代码
SELECT MIN(age) AS min_age, MAX(age) AS max_age, AVG(age) AS avg_age,
       MIN(purchase_amount) AS min_purchase, MAX(purchase_amount) AS max_purchase,
       AVG(purchase_amount) AS avg_purchase
FROM read_csv('/opt/share/shopping_data.csv');

一条 SQL 就能看到最小年龄、最大年龄、平均年龄,以及消费金额的最小值、最大值、平均值。

DuckDB 直接扫 CSV,不用先把数据倒进数据库。

4. 筛选和排序

知道了整体情况,我们再来聚焦看看。

比如你想找出消费超过 200 元的记录,按金额从高到低排。

sql 复制代码
SELECT customer_name, age, purchase_amount, category
FROM read_csv('/opt/share/shopping_data.csv')
WHERE purchase_amount > 200
ORDER BY purchase_amount DESC;

这就是标准 SQL。

DuckDB 的优势在于:文件在哪,SQL 就查哪。不需要先把 CSV 转成别的格式,也不需要入库。

5. 分组聚合

看完了单笔大额消费,我们再把视角拉高,从整体上看看不同商品类别的表现。

比如你想按商品类别统计:每个类别多少笔交易、总销售额多少、平均每笔花多少。

sql 复制代码
SELECT category,
       COUNT(*) AS total_purchases,
       SUM(purchase_amount) AS total_sales,
       AVG(purchase_amount) AS avg_spent
FROM read_csv('/opt/share/shopping_data.csv')
GROUP BY category
ORDER BY total_sales DESC;

结果就是每个类别的交易数、总销售额、平均消费。

比如 食品 、电子产品各卖了多少钱,一目了然。

6. 总结

DuckDB 适合这种场景:

  • 手头有 CSV 文件,想快速分析;
  • 不想建库、导数据、起服务;
  • 需要 SQL 聚合、分组、筛选、排序;
  • 本地单机跑,快,零运维。

核心就一句:read_csv() 直接查。

对 CSV 文件来说,DuckDB 基本是"打开即用"的 SQL 引擎。

后面如果需要窗口函数、JOIN 这些高级操作,也可以继续在同一个文件上写。

文中用到的 CSV 数据文件:shopping_data.csv: https://url11.ctfile.com/f/45455611-17569897513022-10cab0?p=6872 (访问密码: 6872)

相关推荐
roman_日积跬步-终至千里12 分钟前
【数据Agent论文·查询与语义|09】Spider 2.0:从生成SQL走向完成企业工作流
数据库·sql·数据分析
茗创科技1 小时前
静息态fMRI预处理没有一刀切:RESTplus参数选择与常见误区
神经网络·数据分析·脑网络·神经科学
xiaomuzuirenzhen2 小时前
2027秋招准备:统计学专业投商业分析、战略分析,除了SQL还要补什么?
人工智能·数据分析
Data analyse45614 小时前
rnweb 回放数据量太大怎么办?分片存储与断点续传的实现思路
前端·网络·算法·数据分析
注塑机数据采集联网15 小时前
注塑机数据采集网关对接MES系统数字化技术方案
大数据·网络·数据库·物联网·数据挖掘·数据分析
Sharewinfo_BJ17 小时前
Power BI沿袭视图详解:从看懂链路到做影响分析
数据库·数据分析·智信bi·上北智信
wang_yb19 小时前
MinMax vs Standard vs Robust:三种特征缩放怎么选
ai·数据分析·databook
databook19 小时前
MinMax vs Standard vs Robust:三种特征缩放怎么选
python·机器学习·数据分析
Data-Miner21 小时前
数据分析,除了Excel数据透视表,还有什么工具?——2026 专业精选推荐榜
microsoft·数据分析·excel
paopaokaka_luck1 天前
民宿管理系统 (AI民宿总结、协同过滤推荐算法、WebSocket 在线咨询、ECharts 经营分析、房态与结算联动、 民宿预订业务闭环)
java·人工智能·spring boot·websocket·数据分析·echarts·推荐算法