tva
← Insights

使用 DuckDB 进行即席分析:将数千个 CSV 转变为仪表板

问题:不断积累的 CSV 文件

在 Amazon Seller Central 运营三年后,我们积累了超过 8000 个 CSV 和 TSV 文件。这些文件涵盖库存报告、广告绩效导出、业务报告以及客户反馈摘要。每种报告类型都有略微不同的列命名约定和日期格式。

标准解决方案——将一切导入 PostgreSQL——面临实际障碍:模式不一致意味着你需要在导入之前规范化每种文件类型,而这本身就是一个需要维护的项目。

DuckDB 改变了计算方式

DuckDB 可以直接查询 CSV 文件,无需导入。它会推断模式,处理引号和转义变体,并跨多个文件进行联合查询——所有这些都使用标准 SQL 语法。

对于我们的用例,这意味着我们可以直接针对原始文件目录运行分析查询,而无需先进行 ETL 管道处理。一个查询可以在几秒内跨越 3000 个文件。

实际查询模式

最常见的模式是跨多个月的文件进行联合聚合。DuckDB 的 glob 支持使这变得简单:SELECT * FROM read_csv_auto('reports/business/*.csv')。跨文件类型的联合使用 UNION ALL 完成,不同的列命名约定通过 SELECT 子句中的别名处理。

对于需要连接不同粒度数据的查询——例如按 ASIN 连接广告支出和库存数据——DuckDB 的内存处理速度足以满足交互式分析,无需物化中间结果。

与 Python 集成用于仪表板

DuckDB 有一个 Python API,可以直接与 pandas 和 Streamlit 集成。这意味着查询结果可以直接传递给可视化层,而无需通过中间数据库连接。

最终的仪表板设置:DuckDB 查询原始文件,pandas 处理最终转换,Streamlit 进行可视化渲染。整个过程在单台笔记本电脑上运行,无需服务器基础设施。

局限性

DuckDB 不适合写密集型工作负载或多用户并发访问。它针对的是单用户分析查询——正是我们的用例。对于需要共享访问或实时更新的团队,这种方法的扩展性不佳。

相关洞见

相关文章