首页 > 解决方案 > TDE - 删除列名中的架构名称和视图名称

问题描述

我正在尝试为 Marklogic DB 中的 XML 文档创建一个简单的 SQL TDE 模板。

样本模板:

<template xmlns="http://marklogic.com/xdmp/tde">
<context>/match</context>
<collections>
<collection>source1</collection>
</collections>
<rows>
<row>
<schema-name>soccer</schema-name>
<view-name>matches</view-name>
<columns>
<column>
<name>id</name>
<scalar-type>long</scalar-type>
<val>id</val>
</column>
<column>
<name>document</name>
<scalar-type>string</scalar-type>
<val>docUri</val>
</column>
<column>
<name>date</name>
<scalar-type>date</scalar-type>
<val>match-date</val>
</column>
<column>
<name>league</name>
<scalar-type>string</scalar-type>
<val>league</val>
</column>
</columns>
</row>
</rows>
</template>

我在内容数据库中插入了一个示例文档,并将上述模板插入到 Schemas 数据库中。

现在我正在尝试使用 XQuery 运行 SQL 查询,如下所示:

xdmp:sql("select * from matches","map")

上面的查询返回下面的响应

足球比赛.id 足球比赛文件 足球比赛日期 足球比赛联赛
1234567 /soccer/match/1234567.xml 2016-01-12 总理

在json格式中,

[
{
"soccer.matches.id": 1234567, 
"soccer.matches.document": "/soccer/match/1234567.xml", 
"soccer.matches.date": "2016-01-12", 
"soccer.matches.league": "Premier"
}
]

在上面的响应中,键名返回为 schema-name.view-name.column_name.Eg,soccer.matches.id 但我需要键名只有列名。例如,“id”:1234567

任何人都可以分享在 XQuery 中实现这一目标的最简单方法吗?

标签: sqlxqueryxquery-sqlmarklogic-10

解决方案


您可能可以使用 AS 在 SQL 语句中设置名称。您始终可以遍历 FLWOR 语句中的结果来修改您的结果。

但是,我建议您使用 optic API 并根据需要调整结果。

使用 anop:from-view将是建议的行动方案。你仍然可以使用op:from-sql(). 在这两种情况下,尝试使用 qualifier 参数,包括省略它。对于最终结果,您可以使用op:as()withop:select()op:group-by()来准确定义您想要的结果。

光学 API 参考:https ://docs.marklogic.com/guide/app-dev/OpticAPI

光学功能: https ://docs.marklogic.com/op


推荐阅读