MarkLogic Optic查询:实现基于fragmentColId的通用文档URI左关联方案
通用查询方案:通过fragmentColId关联获取文档URI并保留无片段数据行
要同时适配TDE表和sys.sys_tables这类内置系统表,你可以直接关联系统元数据表sys.sys_fragments,利用它存储的所有片段与文档URI的映射关系,再通过LEFT JOIN确保无匹配片段的数据行不会被丢弃。
核心思路
op:join-doc-uri是TDE专属的便捷函数,仅适配TDE表的片段关联逻辑;而sys.sys_fragments是MarkLogic全局的片段元数据表,涵盖所有用户表、系统表的片段信息,通过它做关联可以实现通用场景的适配。
通用查询写法示例
针对sys.sys_tables的查询
SELECT st.table_name, st.fragmentColId, sf.document_uri FROM sys.sys_tables st LEFT JOIN sys.sys_fragments sf ON st.fragmentColId = sf.fragment_id
针对TDE表的查询(以名为my_tde_table的表为例)
SELECT mt.*, sf.document_uri FROM my_tde_table mt LEFT JOIN sys.sys_fragments sf ON mt.fragmentColId = sf.fragment_id
关键说明
- 使用
LEFT JOIN而非内连接,确保即使fragmentColId无对应片段(或值为空),原数据行仍会被保留,此时document_uri会返回NULL sys.sys_fragments中的fragment_id与各类表的fragmentColId是直接匹配的关联键,无论表类型是TDE还是系统内置表都适用
内容的提问来源于stack exchange,提问作者grtjn
相关产品推荐
相关产品推荐

