Duckdb数据快速分析
一、DuckDB 数据库简介
DuckDB 是一款优秀的嵌入式 SQL 数据库管理系统,专注于分析查询处理。它以其轻量级、易用、高性能等特点在业界备受关注。以下是它的主要特性:
- 嵌入式: DuckDB 直接嵌入到应用程序中,不需要单独的服务器进程,因此启动速度极快且内存占用少。
- 易用: DuckDB 提供标准的 SQL 接口,熟悉 SQL 的朋友可以立即上手使用。它还支持绑定到 C/C++、Python 和 R 等语言,方便数据分析和嵌入式使用。
- 高性能: DuckDB 在执行分析查询方面表现出色,尤其擅长聚合操作和大型数据集的复杂查询。其执行速度与许多传统数据库系统相比毫不逊色。
对应的优点如下:
- 跨平台: DuckDB 支持多种操作系统和处理器架构,可以在各种环境中运行。
- 无外部依赖: DuckDB 自包含,不需要安装其他软件或库。
- 丰富的 SQL 功能: DuckDB 支持标准 SQL 的绝大多数特性,并且还扩展了一些高级功能,例如任意和嵌套子查询、窗口函数、排序规则、复杂类型 (数组、结构) 等。
- 多数据库支持: DuckDB 可以连接 MySQL、PostgreSQL 和 SQLite 数据库,方便从其他系统读取数据并在 DuckDB 中进行分析。
本篇主要总结下Excel数据分析统计场景。
1echo hello
2yum -y install git
3cd /opt
4rm -rf /opt/gohugo
5git clone [email protected]:mysite00001/gohugo.git
Duckdb 列名为中文时,使用where条件是会存在问题,需要修改列名称,不需要全部修改,仅修条件中需要使用到的即可。默认是内存数据库,所有数据在查询结束后都是不会存的,
1-- read a set of CSV files combining columns by position
2SELECT * FROM read_csv('flights*.csv');
3
4-- 查询excel
5INSTALL spatial;
6LOAD spatial;
7select * from ST_Read("11月.xlsx") ;
8
9-- 创建新的表
10create table test as select * from ST_Read("11月.xlsx") ;
11
12-- 修改列名称
13-- ALTER TABLE 表名 RENAME COLUMN 原列名 TO 新列名;
14
15
16SELECT * FROM st_read('test_excel.xlsx', layer = 'Sheet1');
17CREATE TABLE new_tbl AS SELECT * FROM st_read('test_excel.xlsx', layer = 'Sheet1');
18INSERT INTO tbl SELECT * FROM st_read('test_excel.xlsx', layer = 'Sheet1');
19
20CREATE TABLE 新表名 LIKE table1;
21INSERT INTO 新表名 SELECT * FROM table1;
22INSERT INTO 新表名 SELECT * FROM table2;
23
24link: https://duckdb.org/docs/guides/import/excel_import
25
26-- 写excel
27COPY tbl TO 'output.xlsx' WITH (FORMAT GDAL, DRIVER 'xlsx');
28COPY (SELECT * FROM tbl) TO 'output.xlsx' WITH (FORMAT GDAL, DRIVER 'xlsx');
可视化工具:https://zhuanlan.zhihu.com/p/627565479 https://duckdb.org/docs/guides/sql_editors/dbeaver
python连接操作
1import duckdb
2con = duckdb.connect("file.db")
3con.sql("CREATE TABLE integers (i INTEGER)")
4con.sql("INSERT INTO integers VALUES (42)")
5con.sql("SELECT * FROM integers").show()
读取目录下的所有excel文件,并插入到对应的表里:
1import duckdb
2import glob,os
3
4sql = '''
5CREATE TABLE tbcopy AS SELECT * FROM st_read('./source/01.xlsx') LIMIT 0;
6'''
7
8con = duckdb.connect("file.db")
9con.install_extension('spatial')
10con.load_extension('spatial')
11cursor = con.cursor()
12cursor.execute(sql)
13
14directory = "/mnt/c/Users/y84315786/Downloads/test/source"
15pattern = os.path.join(directory, "*.xlsx") # 匹配所有文件
16
17for filename in glob.glob(pattern):
18 print(filename) # 打印文件路径
19 sql = "INSERT INTO tbcopy SELECT * FROM st_read('" + filename + "');"
20 cursor.execute(sql)
21
22con.close()
https://www.codemag.com/Article/2305071/Using-DuckDB-for-Data-Analytics
https://hakibenita.com/fast-excel-python
DuckDB 是一个强大、易用且高性能的数据库管理系统,非常适合需要快速进行数据分析和处理的场景。主要的适用场景如下:
- 处理和存储表格数据集,例如来自 CSV 或 Parquet 文件的数据。
- 交互式数据分析,例如连接和聚合多个大型表格。
- 需要进行大量数据变更的场景,例如添加或删除行/列、附加新表等。
- 需要将庞大的结果集传输到客户端的场景。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/2024/01/duckdb.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.