Как получить уникальные имена элементов из XML-файлов, хранящихся в БД MarkLogic, когда размер БД слишком велик? - PullRequest
0 голосов
/ 21 мая 2018

Я использую ML 9

В базе данных MarkLogic есть 2,8 миллиона XML-документов.Я просто хочу получить все уникальные имена элементов.

Поскольку размер базы данных слишком велик, какой самый лучший и быстрый способ получить уникальные имена элементов?

1 Ответ

0 голосов
/ 22 мая 2018

Вы можете запустить CORB-задание , которое выбирает все URI из базы данных в вашем модуле URI, а затем возвращает отдельный список имен элементов, используя либо name(), либо local-name() в процессе.модуль с параметром PROCESS-TASK=com.marklogic.developer.corb.ExportBatchToFileTask для записи всех выходных данных в один файл, а параметры POST-BATCH-TASK=com.marklogic.developer.corb.PostBatchUpdateFileTask и EXPORT-FILE-SORT=ascending|distinct для дедупликации и создания отдельного списка имен элементов из базы данных в текстовом файле.

Пример задания со всеми необходимыми опциями, кроме XCC-CONNECTION-URI:

# Inline module to select all URIs
URIS-MODULE=INLINE-XQUERY|xdmp:estimate(fn:doc()), cts:uris("",(),cts:true-query())

# Inline module to return a distinct list of element names in the document on a separate line
PROCESS-MODULE=INLINE-XQUERY|declare variable $URI as xs:string external; string-join(fn:distinct-values(fn:doc($URI)//*/name()),"
")

# Write the results of each process module to a single file
PROCESS-TASK=com.marklogic.developer.corb.ExportBatchToFileTask
EXPORT-FILE-NAME=element-names.txt

# After the batch processing is completed, sort and dedup the element names
POST-BATCH-TASK=com.marklogic.developer.corb.PostBatchUpdateFileTask
EXPORT-FILE-SORT=ascending|distinct

THREAD-COUNT=10
...