Как сохранить список 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.ExportBatchToFileTask
class, который будет записывать результаты каждого вызова модуля процесса в выходной файл. Вы можете настроить, куда записывать файл и имя файла с помощью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 непосредственно в выходной файл.