用 csv 文件中的最新数据更新数据库
例题描述和简单分析
有 csv 文件 emp.csv,如下:
EMPID,FIRSTNAME,LASTNAME,EMAIL,UPDATEDATE
123,John,Smith,john.smith01@email.com,01/01/2020
234,Bruce,Waye,bruce.wayne@wayneenterprises.com,02/02/2020
123,John,Smith,john.smith02@email.com,02/15/2020
345,Clark,Kent,clark.kent@dailyplanet.com,02/16/2020
123,John,Smith,john.smith03@email.com,02/20/2020
csv中 UPDATEDATE 有序,EMPID 字段有重复
现在要将 csv 记录分成 2 部分:
1.最新的员工记录,即按 EMPID 分组取 UPDATEDATE 最近的记录,写入 EMP 表;
2.剩下的记录,即差集部分,保持原序写入 EMP_HIS 表。
解法及简要说明
在集算器中编写脚本 p1.dfx,如下所示:
A |
|
1 |
=file("emp.csv").import@ct(EMPID,FIRSTNAME,LASTNAME,EMAIL,UPDATEDATE📅"MM/dd/yyyy") |
2 |
=A1.group(EMPID).(~.m(-1)) |
3 |
=A1\A2 |
4 |
=connect("demo") |
5 |
=A4.update(A2,EMP;EMPID) |
6 |
=A4.update(A3,EMP_HIS;EMPID,UPDATEDATE) |
7 |
>A4.close() |
简要说明:
A1 读取带表头的 csv 文件,其中UPDATEDATE读成 date 数据类型,原数据格式为 MM/dd/yyyy
A2 按 EMPID 分组,取每组的最后一个成员(UPDATEDATE最新的记录)
A3 剩下的记录,即差集部分
A4 连接数据库
A5 最新的员工数据按 EMPID 更新或插入 EMP 表
A6 历史的员工数据按 EMPID 和 UPDATEDATE 更新或插入 EMP_HIS 表
A7 关闭数据库连接
JAVA 集成这段代码的方法可参考:《Java 如何调用 SPL 脚本》。
A4 中不需要用 @a 清空原数据
英文版