Как создать TDE для обычного JSON без иерархии - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь создать TDE в логике Mark для файла JSON.

Цель - создать шаблон, а затем извлечь данные из 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 голосов
/ 28 ноября 2018

Мне удалось создать TDE для документов, которые не имели корневого узла, указав \ в контекстной части формата TDE.

Возможность запросить их также в окне SQL для Marklogic. Спасибо всем за помощь в этом.

0 голосов
/ 15 ноября 2018

Типичный подход - указать свойство для контекста, как в

/filename

, а затем указать пути для значений относительно контекста, как в

../filename

.Причиной такой практики является то, что контекст играет важную роль в определении того, какие документы индексируются шаблоном.Если контекстом является просто

/

, то шаблон должен будет попытаться проиндексировать все документы, что увеличит стоимость постоянства (поскольку индексация происходит во время сохранения).

Если я правильно помню, последние версии MarkLogic 9 будут принимать корневой контекст, если также указана коллекция или каталог, но указание контекста с помощью шага остается хорошей практикой.

Надеемся, что поможет,

...