能否通过MarkLogic CORB每两千个XML文件导出为ZIP包?求示例
使用MarkLogic CORB批量导出XML为分卷ZIP包
完全可以通过CORB工具实现每2000个XML文件导出为独立ZIP包的需求,核心是通过配置批次大小结合内置的ZIP导出任务类实现,以下是具体实现示例:
1. 配置CORB参数文件(corb.properties)
# XCC连接信息 XCC-CONNECTION-URI=xcc://用户名:密码@localhost:8000/目标数据库 # 获取待导出XML文档的URI模块 URIS-MODULE=uris.xqy|ADHOC # 处理单个文档的模块 PROCESS-MODULE=process-batch.xqy|ADHOC # 每批次处理2000个文档 BATCH-SIZE=2000 # 线程数(生成ZIP建议单线程避免冲突) THREAD-COUNT=1 # 导出ZIP的文件名模板,%d会替换为批次号 EXPORT-FILE-NAME-PATTERN=xml-export-batch-%d.zip # 指定CORB内置的ZIP导出任务类 EXPORT-MODULE=com.marklogic.developer.corb.ExportToZipFileTask
2. URI获取模块(uris.xqy)
该模块用于筛选所有XML类型的文档URI:
cts:uris((), (), cts:document-type-query(xs:QName('xml')))
3. 文档处理模块(process-batch.xqy)
该模块负责读取每个文档内容,并返回ZIP内的文件名和对应内容:
declare variable $URI as xs:string external; let $document := fn:doc($URI) let $zip-inner-filename := fn:replace($URI, '^/', '') || '.xml' return map:entry($zip-inner-filename, $document)
4. 运行CORB命令
确保本地有corb.jar和marklogic-xcc-*.jar,执行以下命令启动任务:
java -cp "corb.jar;marklogic-xcc-*.jar" com.marklogic.developer.corb.Manager corb.properties
关键说明
- 每个批次的ZIP文件会以
xml-export-batch-1.zip、xml-export-batch-2.zip这样的命名生成 - 如果待导出的文档总数不是2000的整数倍,最后一个ZIP会包含剩余的所有文档
- 可根据服务器性能调整
THREAD-COUNT,但生成ZIP时单线程能避免文件写入冲突
内容的提问来源于stack exchange,提问作者thichxai
相关产品推荐
相关产品推荐

