如何使用Talend导入唯一数据?

时间:2014-05-14 21:14:02

标签: neo4j talend large-files large-data

我在Oracle中有100M数据集,并尝试使用Talend将所有这些数据集导入Neo4j。我的问题是,由于100M数据集每天都在更新,我如何确保Talend只导入neo4j数据库中尚未存在的数据集?换句话说,talend只会导入更新的数据集。

例如,假设Neo4j现在包含38890,38891,38992。在Oracle中,更新的数据集是38890,38891,38892,38893。预期的结果是38893将仅是导入的。

数据集非常大,每天将这些数据集导入Neo4j并删除副本似乎效率不高。有人可以帮帮我吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

你应该做2次加载,1次用于初始FULL Load,就像你现在这样做,另一次用于每日增量加载。

检查主键并找到一种方法来进行SELECT查询,该查询将返回新的/修改过的行。您需要另一个查询,它将显示已删除/修改的行,因为您需要在将新的/已修改的行添加到数据库之前删除这些行。

要自动运行此功能,您需要右键单击您的作业并选择"导出作业"它会将您的工作构建到JAVA JAR文件中。使用.sh和.bat启动器。然后,您可以使用Windows调度程序每天执行此操作,或者如果您碰巧拥有Linux服务器,则每天使用CRON执行它。

答案 1 :(得分:0)

你肯定在oracle上的表上有一个更新的时间戳,所以我会用它来过滤掉自上次导入以来只更新的数据,这将是更少的数据,例如1-5M行。

对于这些条目,您可以拥有唯一约束,然后在条目上使用带有MERGE的cypher,这是一个get-or-create。

确保使用参数来更新数据,针对嵌入式或服务器API

FOREACH (p in {people} |
   MERGE (person:Person {name:{p.name}})
   ON CREATE SET person.age = p.age, ...
}