比较用于数据库更新的分隔文件

时间:2015-11-14 22:27:45

标签: go

对包可能有用的包(或方法)的任何建议?我需要每周收到一个~40MB的文件,并确定从前一个文件到当前文件的更改。无论这些变化是什么,都需要对一个简单的数据库表进行。在之前的生活中,我通过Linux“diff”与-Hae参数完成了相似的操作,从而产生了“ed脚本”。然后由PERL程序处理内容,使用Tie :: File引用先前文件中的已更改记录。为了加强我的Go技能,我正试图将它用于当前的任务。 https://github.com/sergi/go-diff看起来可能是票,但我不确定“补丁”输出是否会完全符合我的要求(轻松)。

固定宽度和/或分隔文本文件仍然是常用的,是否有人对包有任何可能有助于以这种方式处理它们的样本或指针或建议?

1 个答案:

答案 0 :(得分:0)

您确定需要中间步骤吗? 40 MB不是很多,您的数据库引擎专门处理这样的数据..

例如,使用postgresql只需将新数据加载到临时表中:

create table temptable (
 a varchar,
 b varchar,
 c varchar
);
copy temptable from '/path/to/csv/newdata.txt' delimiter ',' csv;

然后,您可以使用简单的SQL查询来获取旧数据中没有完全匹配的行,例如:

select *
from temptable t
where not exists (
 select 1
 from oldtable o
 where t.a=o.a and t.b=o.b and t.c=o.c
)

如果您没有保存上周批次中的数据,那么请记住将其复制到另一个表中进行存储。现在真正的问题是你想要对信息做些什么,但你应该能够处理大多数情况。