Проверьте наличие нуля / пробела при вставке в базу данных MarkLogic с помощью MLCP
Я изучаю базу данных MarkLogic и пытаюсь импортировать в нее данные с помощью контент-насоса MarkLogic. Вот суть CSV-файла.
firstname, middlename, lastname, address1, address2, city, state, zip, country
Rajath,,A,No 20 GN,16th cross,Bangalore,KA,560029,IN
Rajath1,,,No 75,,Dharwad,KA,560057,IN
Rajath2,,B,No 66,,Haveri,KA,560034,IN
Rajath3,,D,No 24A ,25th cross,Raichur,KA,560095,IN
Rajath4,,,No 36B,,Coorg,KA,,IN
Я успешно смог вставить его в БД. Вот вставленный документ.
{
"firstname" : "Rajath4",
"middlename" : "",
"lastname" : "",
"address1" : "No 36B",
"address2" : "",
"city" : "Coorg",
"state" : "KA",
"zip" : "",
"country" : "IN"
}
Он даже вставляет значения, которые являются пустыми / нулевыми. Есть ли способ указать, чтобы игнорировать поля, которые являются пустыми / пустыми при вставке в ML? Вот то, что я ожидаю.
{
"firstname" : "Rajath4",
"address1" : "No 36B",
"city" : "Coorg",
"state" : "KA",
"country" : "IN"
}
А также, как сохранить автоматически сгенерированную primary_key / sequence для каждого документа, который мы вставляем? Если идентификатор уже существует, он должен объединить / обновить документ.
Заранее спасибо.
2 ответа
Вы можете использовать пользовательское преобразование для фильтрации данных с вашим собственным кодом.
Кроме того, MLCP имеет возможность делать уникальный идентификатор - но за цикл, а не глобально. Но, к счастью, функция пользовательского преобразования позволяет вам также изменить URI, если хотите (поэтому вы предоставляете логику, чтобы сделать его уникальным) - решение обеих ваших проблем.
https://docs.marklogic.com/guide/mlcp.pdf
Соответствующие разделы:
- 4.17 - Пользовательские преобразования
- 4.17.5 - Пример преобразования (здесь добавьте свой код для фильтрации содержимого. В вашем случае вы можете предпочесть вызывать функцию в javascript. Но это все личный выбор.)
- 4.17.6 - Изменение URI
Интересная заметка 4.17.6 также включает в себя объяснение того, как изменить тип документа. Если вы человек xslt, вы можете решить, что MLCP предоставит XML, а затем шаблон для очистки пустых элементов, а затем в конце преобразует и сохраняет его в объект json.
Предупреждение: если вы используете MLCP с опцией fastload, то я думаю, что изменение URI сведет на нет преимущество fastload(или что-то в этом роде)
CSV недостаточно конкретен, чтобы различать пустую строку и неопределенную.
Например, выполняет ли следующий CSV
amount,type,category
1,,C
сопоставить с
{ "amount": 1, "type": null, "category": "C" }
или же
{ "amount": 1, "type": "", "category": "C" }
или же
{ "amount": 1, "category": "C" }
?
Если вы хотите получить больше контроля над тем, как анализируется CSV, другой вариант - предварительно обработать CSV в Java или Node.js и вставить полученные документы JSON или XML с помощью клиентских API Java или Node.js.