如何为没有层次结构的普通JSON创建TDE

时间:2018-11-14 21:51:26

标签: marklogic

我正在尝试在Mark逻辑中为JSON文件创建TDE。

目的是创建一个模板,然后从Marklogic中提取数据以在BI中创建报告。

在Marklogic中对文档进行采样:

{
"filename": "StudentDetails.txt", 
"auditId": "xxxx", 
"FileInputTimestamp": "2018-11-14T15:47:40.074", 
"FileProcessedTimestamp": "2018-11-14T15:47:40.236", 
}

** TDE我尝试过&我能够验证它,但是JSON文档没有层次结构&我无法将上下文指定为根节点。 **

xquery version "1.0-ml";
let $my-first-TDE:=
  <template xmlns="http://marklogic.com/xdmp/tde">
    <context>/</context>
    <collections>
      <collection>ods_fms_file_audit</collection>
    </collections>
    <rows>
      <row>
        <schema-name>File_audit</schema-name>
        <view-name>ABaC_View</view-name>
        <columns>
          <column>
            <name>FILE_NAME</name>
            <scalar-type>string</scalar-type>
            <val>filename</val>
          </column>
          <column>
            <name>AUDIT_ID</name>
            <scalar-type>string</scalar-type>
            <val>auditId</val>
          </column>
        </columns>
      </row>
    </rows>
  </template>
return
  tde:validate( 
    $my-first-TDE 
  )

**这将提取我通过的文档模板,并且得到空的结果集。 问题是,我无法在普通json中指定根节点。 **

xquery version "1.0-ml";
let $my-first-TDE:=
  <template xmlns="http://marklogic.com/xdmp/tde">
    <context>/</context>
    <collections>
      <collection>ods_fms_file_audit</collection>
    </collections>
    <rows>
      <row>
        <schema-name>File_audit</schema-name>
        <view-name>ABaC_View</view-name>
        <columns>
          <column>
            <name>FILE_NAME</name>
            <scalar-type>string</scalar-type>
            <val>filename</val>
          </column>
          <column>
            <name>AUDIT_ID</name>
            <scalar-type>string</scalar-type>
            <val>auditId</val>
          </column>
        </columns>
      </row>
    </rows>
  </template>
return
  tde:node-data-extract( 
    fn:doc( "/file/StudentDetails.json" ), 
    $my-first-TDE 
  )

此外,如果我能获取到如何将marklogic输出提取并将其连接到POwer BI,还是很棒的(或)是否可以运行.xqy来生成我的报告并从ML中提取数据。

>

2 个答案:

答案 0 :(得分:1)

典型的方法是为上下文指定一个属性,如

/filename

,然后指定val相对于上下文的路径,如

../filename

之所以这样做,是因为上下文在确定模板为哪些文档建立索引方面起着重要作用。如果上下文仅仅是

/

然后,模板将不得不尝试对所有文档建立索引,这将为持久性增加很多成本(因为索引发生在持久性时间)。

如果我没记错的话,如果还指定了集合或目录,则MarkLogic 9的最新版本将接受根上下文,但是用步骤指定上下文仍然是最佳实践。

希望有帮助,

答案 1 :(得分:1)

通过在TDE格式的上下文部分中指定\,我能够为没有根节点的文档创建TDE。

还可以在SQL窗口中查询Marklogic。感谢大家对此的帮助。