查看csv文件编码_DuckDB批量转CSV为Parquet

6bcce37741306d2bf18e9f6b710b5349.png

Why DuckDB系列:

  • Why DuckDB
  • Python单机查询1.5亿行数据秒出
  • DuckDB批量转CSV为Parquet
  • DuckDB FDW 来了(敬请期待)

昨天文章里提到的AirOnTimeCSV.zip包含了303个csv文件,使用Spark可以方便地将它们转为parquet存储,如果不巧你不熟悉Spark,那也没有关系,试试DuckDB的强大功能。

DuckDB支持输出csv和parquet,代码如下,

copy (select * from tbl) to 'tbl.parquet' (format 'parquet')
copy (select * from tbl) to 'tbl.csv' (format 'csv')

所以单个csv转parquet可以这样实现,

copy (select * from 
read_csv_auto('AirOnTimeCSV/airOT200103.csv')) to
'airOT200103.parquet' (format 'parquet')

那AirOnTimeCSV有303个,怎么办?

脚本实现

借助Python很容易实现(昨天的代码里已经有范例),今天介绍下纯脚本的实现,

for i in *.csv
do 
    base=$(basename "$i" .csv)
    echo "copy (select * from read_csv_auto('$i')) to '$base.parquet' (format 'parquet');"
done

将上面代码保存为csv2parquet,并执行下面命令生成c2p.sql文件

bash csv2parquet>c2p.sql

然后DuckDB执行如下代码

duckdb <c2p.sql

等待303个parquet的生成。

注意事项

目前duckdb仅仅支持UTF8格式,如果不是,需要自行转为UTF8, 关于编码问题,可以参考编码的烦恼以及这两款软件可以解决你大部分编码的烦恼。

另外你下载的AirOnTimeCSV.zip 解压缩时,如果报错,可以尝试使用最新版本的zip进行修复

$ zip -FF AirOnTimeCSV.zip --out AirOnTimeCSV_fixed.zip

具体可以参考记一次修复受损zip文件的尝试,

修复后解压缩的airOT200103.csv建议使用iconv转编码

mv airOT200103.csv airOT200103.csv.1
#macOS
iconv -f ISO-8859-1 -t UTF-8 airOT200103.csv.1>airOT200103.csv
# Linux
iconv -f ISO-8859-1 -t UTF-8 airOT200103.csv.1 -o airOT200103.csv
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值