Как сохранить список URI, соответствующих шаблону в Marklogic с помощью corb?

Мне нужна помощь с MarkLogic, XQuery и corb,

У меня миллионы документов в базе данных, я пытаюсь написать XQuery, чтобы сохранить совпадающие URI.

urisVersions.xqy

      xquery version "1.0-ml";
let $uris := cts:uri-match("*versions/*version-*")

return (fn:count($uris), $uris)

urisSave.xqy

      xquery version "1.0-ml";
declare variable $URI as xs:string external;

let $uri := $URI 
return xdmp:save("/tmp/test",$uri)

save-job.properties

      XCC-CONNECTION-URI= xcc://user:admin@localhost:8000/
URIS-MODULE=urisVersions.xqy|ADHOC
XQUERY-MODULE=urisSave.xqy|ADHOC
THREAD-COUNT=10

Получение ниже ошибки СЕРЬЕЗНАЯ: фатальная ошибка com.marklogic.developer.corb.CorbException: недопустимый тип аргумента в URI: /12312/versions/item/papkov.xml.version-24

Может ли кто-нибудь помочь мне решить эту проблему?

1 ответ

Решение

Настройте задание с помощью PROCESS-TASK возможность использовать com.marklogic.developer.corb.ExportBatchToFileTaskclass, который будет записывать результаты каждого вызова модуля процесса в выходной файл. Вы можете настроить, куда записывать файл и имя файла с помощьюEXPORT-FILE-NAME а также EXPORT-FILE-DIRпараметры. Если вы не сконфигурируете EXPORT-FILE-DIR и просто дадите ему имя файла с EXPORT-FILE-NAME, он будет записывать относительно того, откуда запускается CoRB.

      PROCESS-TASK=com.marklogic.developer.corb.ExportBatchToFileTask
EXPORT-FILE-NAME=versionsURIs.txt

Измените модуль процесса, чтобы просто вернуть значение $ URI:

      xquery version "1.0-ml";
declare variable $URI as xs:string external;
$URI

Если вы просто хотите записать URI в файл, не преобразуя и не выполняя никакой обработки, вы можете использовать класс ModuleExecutor и заставить его записывать результаты cts:uri-match непосредственно в выходной файл.

Другие вопросы по тегам