DuckDB读取xlsx格式数据的方法比较

DuckDB读取xlsx数据的方法对比

1.安装插件
a. DuckDB官方excel插件
b. 社区sheetreader插件,最高只适配到duckdb 1.2.2版本
2.数据准备
a. polars自带的foods.csv转成的foods.xlsx
b. 如下python代码生成带日期格式、小数格式的sale.txt
要求预先安装pandas,duckdb,openpyxl模块

import duckdb
duckdb.sql("""
create table sale(s_name varchar,s_date date,good_id int,
v1 decimal(15,2),
v2 decimal(15,2),
v3 decimal(15,2),
v4 decimal(15,2),
v5 decimal(15,2),
v6 decimal(15,2),
v7 decimal(15,2),
v8 decimal(15,2),
v9 decimal(15,2),
v10 decimal(15,2),
v11 decimal(15,2),
v12 decimal(15,2),
v13 decimal(15,2),
v14 decimal(15,2),
v15 decimal(15,2),
v16 decimal(15,2),
v17 decimal(15,2),
v18 decimal(15,2),
v19 decimal(15,2),
v20 decimal(15,2),
);
""")
duckdb.sql("""
insert into sale select 'sale'||i,date'2020-10-10'+i::int,i,
i*0.1*1,i*0.1*2,i*0.1*3,i*0.1*4,i*0.1*5,i*0.1*6,i*0.1*7,i*0.1*8,i*0.1*9,i*0.1*10,
i*0.1*11,i*0.1*12,i*0.1*13,i*0.1*14,i*0.1*15,i*0.1*16,i*0.1*17,i*0.1*18,i*0.1*19,i*0.1*20
from range(20)t(i);
""")
df0=duckdb.sql("from sale").to_df()
df0.to_excel("pysale20.xlsx",index=False)

c.社区sheetreader插件同一个团队开发的postgresql插件中的示例lineitem.xlsx文件。
d.利用excel插件对tpch基准lineitem表生成的exli2.xlsx文件。
3.读取功能测试
a. excel读取4种文件都能成功。
b. sheetreader读取第一、第三种成功,第二、第四种失败,报错。

D from sheetreader('pysale20.xlsx');
Binder Error:
Inline & dynamic String types not supported yet

4.性能测试
因为人造的xlsx文件某些插件无法读取,在网上找了个现成的纽约车管所数据
这个数据excel插件反而读取不了,等找到一个大家都能读的数据集再测。

结论,xlsx文件格式太复杂,数据类型繁多,做到兼容很难。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值