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.ExportBatchToFileT‌​ask
Другие вопросы по тегам