1. 说明
在某些情况下,我们会有这样的一些场景,手中有一些csv需要进行分析,但是数据量很大,超过1亿,写程序执行会非常慢,急需一个工具来解决这类问题,那么你不妨看看NiceFlow,让你1亿数据查询毫秒出结果
在看到这里的时候,你可能会认为博主在吹牛批,然后准备划走,那么你先别划走,博主亲自使用数据测试,保证毫秒出结果的结论100%可靠,下面让我们来看看。
在此先说明,NiceFlow底层所使用的数据分析引擎是DuckDB,NiceFlow则是基于DuckDB基础上扩展更加强大的功能,所以此次测试,我们主要测试DuckDB数据分析处理能力。
看完测试结论后,觉得NiceFlow有那么一勒勒用,可以看看这篇文章Python数据处理还在用Pandas? NiceFlow无需一行代码搞定数据处理
2. 硬件环境
机器数量 | 1台家用办公电脑 |
---|---|
CPU | i5 13600K |
内存 | 64G |
磁盘 | SSD |
3. 软件环境
操作系统 | Win10 |
Python版本 | 3.10 |
DuckDB | 0.9.2 |
4. 测试数据量
数据生成的仓库 ssb-dbgen
别人都是在linux上生成数据的,我的在windows上生成的,因为我用了TDM-GCC编译器,将上面的代码编译为exe
数据生成的命令
dbgen.exe -s 20 -T l
dbgen.exe -s 20 -T p
dbgen.exe -s 20 -T s
dbgen.exe -s 20 -T d
dbgen.exe -s 20 -T c
生成的数据的信息
SSB表名 | 行数 | 磁盘大小 | 备注 |
---|---|---|---|
lineorder | 119994608 | 11.2G | 商品订单明细表表 |
customer | 600000 | 55.3M | 客户信息表 |
part | 1000000 | 83.1M | 零件信息表 |
supplier | 40000 | 3.26M | 供应商信息表 |
dates | 2556 | 227K | 日期表 |
5. 建表语句
CREATE TABLE IF NOT EXISTS lineorder (
lo_orderkey INTEGER ,
lo_linenumber INTEGER ,
lo_custkey INTEGER ,
lo_partkey INTEGER ,
lo_suppkey INTEGER ,
lo_orderdate INTEGER ,
lo_orderpriority VARCHAR ,
lo_shippriority INTEGER ,
lo_quantity INTEGER ,
lo_extendedprice INTEGER ,
lo_ordtotalprice INTEGER ,
lo_discount INTEGER ,
lo_revenue INTEGER ,
lo_supplycost INTEGER ,
lo_tax INTEGER ,
lo_commitdate INTEGER ,
lo_shipmode VARCHAR
) ;
CREATE TABLE IF NOT EXISTS customer (
c_custkey INTEGER ,
c_name varchar ,
c_address varchar ,
c_city varchar ,
c_nation varchar ,
c_region varchar ,
c_phone varchar ,
c_mktsegment varchar
);
CREATE TABLE IF NOT EXISTS dates (
d_datekey INTEGER ,
d_date varchar ,
d_dayofweek varchar ,
d_month varchar ,
d_year INTEGER ,
d_yearmonthnum INTEGER ,
d_yearmonth varchar ,
d_daynuminweek INTEGER ,
d_daynuminmonth INTEGER ,
d_daynuminyear INTEGER ,
d_monthnuminyear INTEGER ,
d_weeknuminyear INTEGER ,
d_sellingseason varchar ,
d_lastdayinweekfl INTEGER ,
d_lastdayinmonthfl INTEGER ,
d_holidayfl INTEGER ,
d_weekdayfl INTEGER
) ;
CREATE