• 使用 DuckDB 分析 CSV 文件


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

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

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

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

    1. 安装 DuckDB,直接读 CSV

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

    curl https://install.duckdb.org | sh
    /home/user/.duckdb/cli/latest/duckdb
    

    启动后直接查 CSV:

    SELECT * FROM read_csv('/opt/share/shopping_data.csv') LIMIT 5;
    

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

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

    2. 先看数据结构

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

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

    DESCRIBE SELECT * FROM read_csv('/opt/share/shopping_data.csv') LIMIT 5;
    

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

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

    3. 快速汇总统计

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

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

    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 元的记录,按金额从高到低排。

    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. 分组聚合

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

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

    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)

  • 相关阅读:
    微信小程序(四十五)登入界面-简易版
    祁隆爱徒秀秀喜欢的视频,有传闻被和合国际收购的《借我星光》
    思科Cisco分公司内网互通
    【数据结构】堆排序的实现
    多线程应用——单例模式
    数据聚合——DSL&RestAPI
    SpringBoot之:SpringBoot中使用HATEOAS
    区块链实验室(20) - FISCO控制台连接到指定的节点
    【nodejs案例】记账本功能 -- 如何配置API(三)
    X射线与原子核物理概论
  • 原文地址:https://www.cnblogs.com/wang_yb/p/23084068