集算器比较csv文件中数据差异 润乾|数据处理-数据计算引擎-esp文件

old.csv和new.csv的逻辑主键是userName和date,需要分别找出新增的、删除的、修改的数据行。源文件如下:

集算器比较csv文件中数据差异 润乾|数据处理-数据计算引擎

可以看到new.csv中的第2、3行是新增的记录,第4行是修改的记录,old.csv中第3行是删除的记录。

集算器代码:

集算器比较csv文件中数据差异 润乾|数据处理-数据计算引擎

A1,B1:以逗号为分隔符读入文件。

A2,B2:将数据按照关键字排序。后面的merge函数要求数据有序。

A3:按关键字找到新增的记录。函数merge可进行多数据集归并,@d表示归并时找出差集。类似地还还有并集@u,交集@i。计算结果如下:

集算器比较csv文件中数据差异 润乾|数据处理-数据计算引擎

A4:按关键字找到删除的记录。计算结果如下:

集算器比较csv文件中数据差异 润乾|数据处理-数据计算引擎

A5:将关键字作为普通字段,找到修改过的记录。计算结果如下:

集算器比较csv文件中数据差异 润乾|数据处理-数据计算引擎

A6:A5是中间计算结果,要计算更新的记录,还要在A6中计算A5和“新增”记录之间的差集。计算结果如下:

集算器比较csv文件中数据差异 润乾|数据处理-数据计算引擎

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。

推荐阅读