使用MLCP加载数据时出现XDMP-NEWSTAMP错误

问题描述 投票:2回答:1

我有一个附加到4个森林的数据库,我想在每次文档中的任何值更改时在MarkLgic中创建一个更改文档。更改文档应包含更改日期,旧值和新值。

我能够通过使用预提交和提交后触发器来实现这一点。预提交触发器捕获文档的旧版本,后提交具有新版本。我比较了两个文档并创建了更改文档。这在更新单个文档时效果很好。

但是,我通过从分隔文件中加载带有MLCP的20000文档来测试此解决方案。我更改了所有文档中单个元素的值,并再次加载了数据。我的触发器只能捕获20000个已更改的文档中的7000个。其余文档无法加载,我收到MLCP中的错误,说:

“XDMP-NEWSTAMP时间戳对森林来说太新了”

我通过从提交前和提交后触发器中删除我的代码并让触发器什么都不做来做了另一个测试。我再次加载文件。现在19000/20000文档已成功更新,我得到了相同的XDMP-NEWSTAMP错误。

当我完全删除触发器并加载文档。 20000/20000加载并更新。

因此,似乎执行大量触发器,在加载文档时会产生问题。

有这个问题的解决方案吗?我是否走错了路来完成我需要做的事情?

MLCP命令:mlcp import -host localhost -port 8000 -username uname -password pwd -input_file_path D:.... \ file.dsv -delimiter'|' -input_file_type delimited_text -database Overtime -output_collections test

创建触发器:

xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";
import module namespace trgr="http://marklogic.com/xdmp/triggers" at "/MarkLogic/triggers.xqy";
trgr:create-trigger("PreCommitTrigger", "Trigger that fires when a document is updated", 
trgr:trigger-data-event(
  trgr:collection-scope("test"),
  trgr:document-content("modify"),
  trgr:pre-commit()),
  trgr:trigger-module(xdmp:database("Overtime"), "/", "preCommit.xqy"),
  fn:true(), xdmp:default-permissions()),

trgr:create-trigger("PostCommitTrigger", "Trigger that fires when a document is updated", 
trgr:trigger-data-event(
  trgr:collection-scope("test"),
  trgr:document-content("modify"),
  trgr:post-commit()),
  trgr:trigger-module(xdmp:database("Overtime"), "/", "postCommit.xqy"),
  fn:true(), xdmp:default-permissions())

加载触发器文档:

xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";

xdmp:document-insert('/preCommit.xqy', 
text{ " '' "}).
xdmp:document-insert('/postCommit.xqy', 
text{ " '' "})
triggers marklogic mlcp nosql
1个回答
1
投票

MarkLogic有CPF(内容处理框架 - https://docs.marklogic.com/guide/cpf/quickStart?hq=CPF),它可以帮助您对文件进行任何转换,在这种情况下,您可以拥有一个工作流来管理插入的任何文件,分析文件并创建它的DLS(https://docs.marklogic.com/dls)版本。 DLS是一个允许您控制文件版本的库,我想这就是您想要做的。希望它能帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.