最近一直做一些数据分析
如:
在一些第三方工具上导出一些csv/xls格式的文件,然后分析里面的内容,做过滤合并或统计等,用groovy习惯了,所以处理些文本还是小菜的,就是要做统计的时候,不用sql真麻烦啊,本来一个group by的,自己用代码写就很蹩脚,如
list.clone().unique{it.id}.each{
int num = list.count{one -> it.id == one.id} *** }
groovy的db组件很8错的,弄一个内存数据库,可以很容易实现文本和sql结合做数据,就没必要每次都整理文件导入数据库了,而且sql提供的string方法就灵活性而言不如动态语言
代码原语如下
import groovy.sql.Sql def p = [ url:'jdbc:h2:mem:test', u:'sa', p:'', driver:'org.h2.Driver' ] def db = Sql.newInstance(p.url, p.u, p.p, p.driver) try { db.execute(''' create table temp (); ''' ) String sql = ''' select a.flag, a.dat, count(1) as num from csvread('test.csv') a group by dat, flag ''' db.rows(sql).each{ println it.DAT.padRight(20) + it.FLAG.padRight(10) + it.NUM } }finally { db.close() }