用 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 脚本》

问答搜集

https://stackoverflow.com/questions/61043157/java-insert-records-into-sql-table-by-reading-a-csv-file