Marklogic Data Hub Frame 5.2.2 Отображение

Я пытаюсь изучить datahubframework 5.2.2 и в рамках этого небольшого проекта. Может ли кто-нибудь помочь мне понять следующие моменты.

  • В чем основное использование создания шагов? (Прием, отображение). Поскольку как часть потока мы очень четко определяем шаг с входами и выходами. Зачем нужно создавать шаг явно и для чего он нужен?
  • Я пытаюсь сопоставить данные с помощью файла сопоставления, но сопоставление не выполняется, тот же загруженный файл загружается в окончательную базу данных без сопоставления. Пожалуйста, помогите мне, где я ошибся.

ingestionmapping.flow.json

{
  "name": "ingestionmapping",
  "description": "This is the default flow containing all of the default steps",
  "batchSize": 100,
  "threadCount": 4,
  "options": {
    "sourceQuery": null
  },
  "steps": {
    "1": {
      "name": "csv-ingest-step-json",
      "description": "ingests json docs in JSON format to data-hub-STAGING",
      "stepDefinitionName": "productIngestion",
      "stepDefinitionType": "INGESTION",
      "customHook" : {
        "module" : "",
        "parameters" : { },
        "user" : "",
        "runBefore" : false
      },
      "batchSize" : 100,
      "threadCount" : 4,
      "fileLocations": {
        "inputFilePath": "input",
        "outputURIReplacement": ".*input*.,'/mapping-flow/json'",
        "inputFileType": "csv"
      },
      "options": {
        "targetDatabase": "data-hub-STAGING",
        "sourceQuery": "cts.collectionQuery([])",
        "permissions": "data-hub-operator,read,data-hub-operator,update",
        "outputFormat": "json",
        "collections": [
          "mapping-flow-ingestion-json"
        ],
        "headers": {
          "sources": [{"name":  "ingestion_only-flow"}],
          "createdOn" : "currentDateTime",
          "createdBy" : "currentUser"
        }
      }
    },
    "2": {
      "name": "mapping-step",
      "description": "This is the default mapping step",
      "stepDefinitionName": "productMapping",
      "stepDefinitionType": "MAPPING",
      "customHook" : {
        "module" : "",
        "parameters" : { },
        "user" : "",
        "runBefore" : false
      },
      "batchSize" : 100,
      "threadCount" : 4,
      "options": {
        "sourceDatabase": "data-hub-STAGING",
        "targetDatabase": "data-hub-FINAL",
        "sourceQuery": "cts.collectionQuery('mapping-flow-ingestion-json')",
        "permissions": "data-hub-operator,read,data-hub-operator,update",
        "outputFormat": "json",
        "collections": [
          "mapping-flow-mapping-json",
          "mdm-content"
        ],
        "targetEntity": "modifiedproduct",
        "mapping": {
          "name": "ingestionmapping-productMapping",
          "version": 1
        },
        "validateEntity": false
      }
    }
  }
}

файл сопоставления: ingestionmapping-productMapping-1.mapping.json

{
  "lang" : "zxx",
  "name" : "ingestionmapping-productMapping",
  "description" : "",
  "version" : 1,
  "targetEntityType" : "http://marklogic.com/modifiedproduct-0.0.1/modifiedproduct",
  "sourceContext" : "/",
  "sourceURI" : "/mapping-flow/json/....json",
  "properties" : {
    "mgame_id" : {
      "sourcedFrom" : "game_id"
    },
    "mSKU" : {
      "sourcedFrom" : "SKU"
    },
    "mtitle" : {
      "sourcedFrom" : "title"
    },
    "mprice" : {
      "sourcedFrom" : "price"
    },
    "mdescription" : {
      "sourcedFrom" : "description"
    },
    "myears_active" : {
      "sourcedFrom" : "years_active"
    },
    "mpublication_date" : {
      "sourcedFrom" : "publication_date"
    },
    "mplayers" : {
      "sourcedFrom" : "players"
    },
    "mage_range" : {
      "sourcedFrom" : "age_range"
    },
    "msetup_time" : {
      "sourcedFrom" : "setup_time"
    },
    "mplaying_time" : {
      "sourcedFrom" : "playing_time"
    },
    "mchance" : {
      "sourcedFrom" : "chance"
    },
    "mcategory" : {
      "sourcedFrom" : "category"
    },
    "mhas_extensions" : {
      "sourcedFrom" : "has_extensions"
    },
    "mhas_accessories" : {
      "sourcedFrom" : "has_accessories"
    },
    "mhas_apparel" : {
      "sourcedFrom" : "has_apparel"
    },
    "mpopularity_tier" : {
      "sourcedFrom" : "popularity_tier"
    },
    "mprobability_apparel" : {
      "sourcedFrom" : "probability_apparel"
    },
    "mprobability_accessories" : {
      "sourcedFrom" : "probability_accessories"
    },
    "mprobability_extensions" : {
      "sourcedFrom" : "probability_extensions"
    }
  }
}

Название объекта: измененная версия продукта: 0.0.1

Я много раз пытался отладить проблему, но не мог найти, где она идет не так. В результате он сохраняет тот же json в конечной базе данных без использования атрибутов сопоставления.

структура папок: снимок экрана структуры папок

json файл

{
"envelope": {
"headers": {
"sources": [
{
"name": "ingestion_only-flow"
}
], 
"createdOn": "2020-07-02T09:49:57.5876177+02:00", 
"createdBy": "admin", 
"createdUsingFile": "C:\\Users\\Jhansi\\IdeaProjects\\MarklogicDataHubFramework5.2\\input\\board_games.csv"
}, 
"triples": [
], 
"instance": {
"game_id": "1000130", 
"SKU": "177897644317", 
"title": "careful crack", 
"price": "24.95", 
"description": "", 
"years_active": "0", 
"publication_date": "0", 
"players": "2-4", 
"age_range": "", 
"setup_time": "< 5 minutes", 
"playing_time": "1 hour", 
"chance": "High", 
"category": "Board Game", 
"has_extensions": "False", 
"has_accessories": "True", 
"has_apparel": "False", 
"popularity_tier": "3", 
"probability_apparel": "0.3", 
"probability_accessories": "0.3", 
"probability_extensions": "0.3"
}, 
"attachments": null
}
}

person Jhansi Lakshmi    schedule 01.07.2020    source источник
comment
Да, я повторно развернул DH. Вот содержимое json. Я не обнаружил никаких ошибок при выполнении шагов. Первоначально я пытался запустить поток без шагов. После нескольких запусков я попытался выполнить шаг 2 в одиночку. используя приведенную ниже команду gradlew.bat hubRunFlow -PflowName = ingestionmapping -Psteps = 2 Я даже попытался удалить данные приема в базе данных этапа и повторно попытался запустить весь поток gradlew.bat hubRunFlow -PflowName = ingestionmapping   -  person Jhansi Lakshmi    schedule 02.07.2020
comment
Способен успешно запускать потоки, ошибок не показывает. Обновлен основной вопрос данными и скриншотами. Не могли бы вы взглянуть на него.   -  person Jhansi Lakshmi    schedule 02.07.2020


Ответы (1)


Data Hub отобразит желаемое сопоставление при правильном развертывании MarkLogic Entity Services: (Обратите внимание на объявление Entity в сопоставленном документе, ключевой вывод из всего этого уравнения)

введите описание изображения здесь

https://docs.marklogic.com/datahub//flows/flow-definition.html#flow-definition__custom-step-settings

stepDefinitionName: ..... Совет. Если вы настраиваете тип шага по умолчанию (прием, сопоставление или мастеринг), оставьте значение default-ingestion, default-mapping или значение по умолчанию. -мастеринг ....

После рассмотрения вышеизложенного следуйте рекомендациям Data Hub и исправьте ошибочные Steps определения в руководстве. Если вы используете Quick Start для создания Flow и Steps, этого не должно произойти, учитывая ваше знакомство с MarkLogic Data Hub.

"steps": {
    "1": {
……………
      "stepDefinitionName": "productIngestion",
      "stepDefinitionType": "INGESTION",
……………

    

"2": {
      "name": "mapping-step",

      "stepDefinitionName": "productMapping",
      "stepDefinitionType": "MAPPING",
…………

        "mapping": {
          "name": "ingestionmapping-productMapping",
  1. Очистите структуру проекта и удалите содержимое папки step-definitions. Пример структуры проекта (розовая часть):

введите описание изображения здесь

  1. Ниже приведен рабочий пример Steps определений. В случае сомнений подтвердите шаг в QuickStart.
{
  "name" : "ingestionmapping",
  "description" : "",
  "batchSize" : 100,
  "threadCount" : 4,
  "stopOnError" : false,
  "options" : { },
  "version" : 0,
  "steps" : {
    "1" : {
      "name" : "csv-ingest-step-json",
      "description" : "",
      "options" : {
        "additionalCollections" : [ ],
        "headers" : {
          "sources" : [ {
            "name" : "ingestionmapping"
          } ],
          "createdOn" : "currentDateTime",
          "createdBy" : "currentUser"
        },
        "sourceQuery" : "cts.collectionQuery([])",
        "collections" : [ "mapping-flow-ingestion-json" ],
        "permissions" : "data-hub-operator,read,data-hub-operator,update",
        "outputFormat" : "json",
        "targetDatabase" : "store-hub-STAGING"
      },
      "customHook" : {
        "module" : "",
        "parameters" : { },
        "user" : "",
        "runBefore" : false
      },
      "retryLimit" : 0,
      "batchSize" : 100,
      "threadCount" : 4,
      "stepDefinitionName" : "default-ingestion",
      "stepDefinitionType" : "INGESTION",
      "fileLocations" : {
        "inputFilePath" : "/mldhf/STORE/data/products/games",
        "inputFileType" : "csv",
        "outputURIReplacement" : ".*games*.,'/mapping-flow/json'",
        "separator" : ","
      }
    },
    "2" : {
      "name" : "mapping-step",
      "description" : "",
      "options" : {
        "additionalCollections" : [ ],
        "sourceQuery" : "cts.collectionQuery([\"mapping-flow-ingestion-json\"])",
        "mapping" : {
          "name" : "ingestionmapping-mapping-step",
          "version" : 1
        },
        "targetEntity" : "modifiedproduct",
        "sourceDatabase" : "store-hub-STAGING",
        "collections" : [ "mapping-flow-mapping-json", "mdm-content" ],
        "permissions" : "data-hub-operator,read,data-hub-operator,update",
        "validateEntity" : false,
        "sourceCollection" : "csv-ingest-step-json",
        "outputFormat" : "json",
        "targetDatabase" : "store-hub-FINAL"
      },
      "customHook" : {
        "module" : "",
        "parameters" : { },
        "user" : "",
        "runBefore" : false
      },
      "retryLimit" : null,
      "batchSize" : 100,
      "threadCount" : 4,
      "stepDefinitionName" : "entity-services-mapping",
      "stepDefinitionType" : "MAPPING"
    }
  }
}
person Fiona Chen    schedule 02.07.2020
comment
Спасибо за подробные снимки экрана, Чен. Я сделал то же, что и вы, и он тоже начал работать. Но у меня есть пара вопросов, не могли бы вы помочь мне понять их: 1. После сопоставления я проверил каждый элемент и вложение есть данные исходного конверта. Работает ли он должным образом? Если да, то почему у нас есть исходный конверт в сопоставленных данных. 2. Если мы используем прием и сопоставление по умолчанию, то в чем польза пользовательских шагов и когда они будут использоваться? Примеры? 3. Какая польза от Custom hook? 4. Можно ли использовать пользовательские шаги, если у нас есть логика для выполнения при отображении данных? - person Jhansi Lakshmi; 03.07.2020