我有一个管道分隔的平面文件和一个数据库表。我想创建一个第二个平面文件,其中包含平面文件和数据库之间的所有差异。
一个例子是,如果数据库中存在平面文件中不存在的条目,则整个行将在第二个平面文件中打印(平面文件中永远不会有数据库中没有的条目)。另一个例子是,如果行相似但字段中存在差异,则数据库条目将打印在平面文件中。
我能想到的最好方法是创建包含平面文件和数据库中数据的2个二维数组,如果平面文件数组中不存在主键,则打印出来自选择语句。如果主键确实存在但其他字段不存在,则从select语句中打印出结果。这是我能想到的最好的事情,但它似乎效率低下。
有更好的方法吗?我正在使用Java来做到这一点。
答案 0 :(得分:1)
由于您已经在与数据库进行比较,为什么不在SQL中完成所有操作?将文件内容上传到数据库中,找到两个补码(A减B和B减A)并导出到另一个文件。类似的东西:
SPOOL diff.txt
SELECT * FROM flatfile_table
MINUS
SELECT * FROM db_table
UNION
SELECT * FROM db_table
MINUS
SELECT * FROM flatfile_table
ORDER BY SortCriteria;
SPOOL OFF
答案 1 :(得分:1)
然后创建一个简单的选择,它将在您的数据之间建立差异,然后只需导出
答案 2 :(得分:0)
编写Java程序,将数据从数据库获取到另一个平面文件中,格式与您已有的文件相同。
确保两个文件都按相同的字段排序,例如,记录的主键 - 可以通过awk
来实现,例如在输入文件的情况下(排序键是最后一个数字):
val1|2
val7|1
您可以按sort -n --field-separator=\| -k 2 1
对条目进行排序(有关所涉及选项的说明,请参阅sort
联机帮助页。)
然后使用diff
(或类似的,如果你不在Unix / Linux上)实用程序来创建包含不同条目的文件。
答案 3 :(得分:0)
我会做这样的事情: