MarkLogic Xquery
Мне нужно использовать Corb для создания отчета.
Data:
Collection A : Col1,Col2,Col3,Col4
Collecntion B: Col1,Col5,Col6,Col7
Collection C: Col1,Col8,Col9
Output Requirement: Col1,Col2,Col5,Col6,Col8
где Col1 является внутренним соединением в коллекциях B,C
мой uri.xqy
выглядит так:
(:Get the list from Col1 to join on all:)
let $listFromCol1 := cts:element-values(xs:QName("Col1"),(),(),cts:and-query(....))
let $A := cts:uris((),(),cts:and-query((cts:collection-query("A"),cts:element-range-query(xs:QName("Col1"),"=",$ListFromCol1)))
let $B := cts:uris((),(),cts:and-query((cts:collection-query("B"),cts:element-range-query(xs:QName("Col1"),"=",$ListFromCol1)))
let $C := cts:uris((),(),cts:and-query((cts:collection-query("C"),cts:element-range-query(xs:QName("Col1"),"=",$ListFromCol1)))
Теперь я получил URI для отдельных коллекций. Мне нужно передать это моему process.xqy
в return (count($uris), $uris)
,
Интересно, как мне подсчитать все $A,$B,$C и объединить все URI $A,$B,$C.
Пожалуйста помоги
1 ответ
Если у вас чрезвычайно большой набор URI, вы можете включить опцию DISK-QUEUE.
DISK-QUEUE=true
позволит избежать исключений Out of Memory, позволяя CORB перетекать на диск при получении и управлении очередью URI, возвращенных из uris.xqy, вместо того, чтобы хранить их все в памяти.
Если вам нужно получить отдельный набор URI в выходных данных, вы можете вернуть все кандидаты URI в свой модуль процесса и позволить CORB выполнить дедупликацию, используя EXPORT-FILE-SORT=ascending|distinct
вариант с ExportBatchToFileTask.
Пример свойств, включающих эти параметры:
DISK-QUEUE=true
EXPORT-FILE-NAME=/local/path/to/exportFile.txt
EXPORT-FILE-SORT=ascending|distinct
PROCESS-TASK=com.marklogic.developer.corb.ExportBatchToFileTask