【问题标题】:How to create a TDE for normal JSON with no hierarchy如何为没有层次结构的普通 JSON 创建 TDE
【发布时间】:2018-11-14 21:51:25
【问题描述】:

我正在尝试在 MarkLogic 中为 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,那就太好了(或)是否有任何规定可以运行生成我的报告并从 ML 中提取数据的 .xqy。

【问题讨论】:

    标签: marklogic


    【解决方案1】:

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

    /filename
    

    然后指定 vals 相对于上下文的路径

    ../filename
    

    这种做法的原因是上下文在确定模板索引哪些文档方面起着重要作用。如果上下文只是

    /
    

    那么模板将不得不尝试索引所有文档,这会增加持久性的大量成本(因为索引是在持久性时发生的)。

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

    希望对您有所帮助,

    【讨论】:

    • 是的。我在上下文中使用 / 进行了尝试,我能够验证和提取并将输出视为指定列的映射格式。
    • 我理解的是..为什么是/filename?因为上下文应该被指定为我们试图提取的文档的根节点,我们如何在此处指定文件名。如果我的收藏有大量文档,我可以在哪里指定文档名称?我如何迭代我的收藏..
    • 具有 /filename 上下文的模板仅适用于在根目录下具有 filename 属性的 JSON 文档。相比之下,上下文为 / 的模板适用于数据库中的所有文档。
    • 哦!但是,如果我们通过给出集合名称来限制它,我们可以只从这些集合中选择文档还是它仍然会引用所有数据库所有集合
    • 这就是为什么(如果我没记错的话)最新版本的 MarkLogic 9 在指定集合时允许根上下文。但是,如果模板不应该应用于集合中的某些文档,则最好将属性指定为上下文。
    【解决方案2】:

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

    还可以在 SQL 窗口中为 Marklogic 查询它们。感谢大家在这方面的帮助。

    【讨论】:

      猜你喜欢
      • 2019-07-03
      • 2023-04-02
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多