NiceFlow是一个类似Kettle数据ETL工具,同时比Kettle更加易用和轻量,目前还没有GUI界面
git地址
特性
- 基于python的插件机制,目前提供70+插件,同时支持自定义插件
- 基于json的flow任务,支持自定义任务配置
- 提供好用的cli命令,无需写代码,完成数据分析工作
安装依赖
pip install NiceFlow
cli sql 执行查询分析任务
对于经常需要在excel,csv,json数据中做一些过滤、筛选、关联、去重的人来说,这样一件事情是比较麻烦和耗时的,手工处理容易出错,写程序有些费时,最简单的办法是将数据倒入数据库,然后用sql进行查询,但是这需要我们安装数据库,安装数据库查询工具,还需要导入数据到数据库,一顿操作下来也是比较麻烦。
NiceFlow 提供了一些好用的cli方式执行数据查询任务,其中一个模式是NiceFlow sql ,它可以配置一个资源路径(res_path),程序会自动读取该路径下的csv,excel,json,parquet等文件,将其转化为表,然后提供sql_path或者sql_script参数,让我们可以使用sql进行愉快的数据查询,提供result_path将查询结果导出为csv,excel,json,parquet等,同时提供function_path可以将python文件中的方法注册为函数,直接就在sql中使用,可谓方便至极,下面看看使用方法。
# --sql_script,"sql脚本语句,支持多行"
# --sql_path,"sql脚本文件,支持多行,和sql_script二选一"
# --db_path, "输入b数据库的路径,不存在则为内存模式[可选]"
# --res_path,"输入文件路径,该路径下的文件会被自动加载到db中[可选]"
# --function_path,"输入函数路径,该路径为python文件,可以作为数据库自定义函数使用[可选]"
# --result_path,"输入结果路径,支持csv,json,parquet,txt,excel,clipboard当输入为clipboard时,结果直接写入剪贴板"
# NiceFlow sql --help 查看参数选项
# 执行示例
NiceFlow sql \
--sql_path 1.sql \
--res_path 'C:/Users/xw/Desktop/22/test' \
--function_path 'C:/Users/xw/Desktop/22/test/1.python' \
--result_path C:/Users/xw/Desktop/22/test/result/result.parquet
# sql语句,支持多行sql,只会将最后一行的sql查询语句结果写入到result_path中
select f_print(d_date) from msd_2024 where d_date = '2023-12-31';
# python文件中定义函数
def f_print(x:str)->str:
return x+"___";
cli sql 查询实战截图
- 执行load.bat文件 ,文件中的内容如下
NiceFlow sql \
--sql_path 1.sql \
--res_path 'C:/Users/xw/Desktop/22/test' \
--function_path 'C:/Users/xw/Desktop/22/test/1.python' \
--result_path C:/Users/xw/Desktop/22/test/result/result.parquet
- 程序自动加载total_RQ_DEVICE_20240130.xlsx,SID.csv,msd_2024.csv三个文件,其它文件或者文件夹自动忽略,加载到表名自动去除.xlsx,.csv等,该目录下不要有不合法的文件名,比如1.csv这种,稍微改个正常的名称程序就可以识别。
- 执行1.sql查询语句,进行数据分析,sql语句可以为多行,每一行都会执行,但是只会将最后一行作为结果返回
select * from total_RQ_DEVICE_20240130 ;
show tables;
select * from SID;
select SRCID from total_RQ_DEVICE_20240130 where SRCID in (select SID from SID);
select * from total_RQ_DEVICE_20240130 as a left join SID as b on a.SRCID = b.SID
UNION
select * from total_RQ_DEVICE_20240130 as a right join SID as b on a.SRCID = b.SID;
select * from msd_2024 limit 10;
- console控制台打印结果
- 返回result.csv结果文件
其它
- 本次仅介绍了cli 中的sql功能,其它功能可以到gitee或者github中查看
- 程序内核使用Duckdb,所以不需要担心导入速度慢,查询速度慢这种问题,超越pandas不在话下,如果没有超越,github上给duckdb提issue,让别人优化性能。