old.csv和new.csv的逻辑主键是userName和date,需要分别找出新增的、删除的、修改的数据行。源文件如下:
可以看到new.csv中的第2、3行是新增的记录,第4行是修改的记录,old.csv中第3行是删除的记录。
集算器代码:
A1,B1:以逗号为分隔符读入文件。
A2,B2:将数据按照关键字排序。后面的merge函数要求数据有序。
A3:按关键字找到新增的记录。函数merge可进行多数据集归并,@d表示归并时找出差集。类似地还还有并集@u,交集@i。计算结果如下:
A4:按关键字找到删除的记录。计算结果如下:
A5:将关键字作为普通字段,找到修改过的记录。计算结果如下:
A6:A5是中间计算结果,要计算更新的记录,还要在A6中计算A5和“新增”记录之间的差集。计算结果如下:
B6:将A6返回给JAVA或报表工具。
上述脚本已经完成了所有的数据处理工作,接下来通过JDBC将集算器脚本集成在JAVA里。JAVA代码如下:
//建立esProc jdbc连接
Class.forName("com.esproc.jdbc.InternalDriver");
con= DriverManager.getConnection("jdbc:esproc:local://");
//调用esProc,其中test是脚本文件名,可接收参数
st =(com.esproc.jdbc.InternalCStatement)con.prepareCall("call test()");
st.execute();//执行esProc存储过程
ResultSet set = st.getResultSet();//获得计算结果
如果要将多个数据集返回给JAVA,可以将B6的代码改为:result new,delete,update。