В CSV-файл поступают следующие образцы данных:
Identifer Key,Name,Address,City,State,ZIP
WELD-424,Jane Doe,123 Main St,Whereverville,CA,90210
MOWN-175,John Doe,555 Broadway Ave,New York,NY,10010
Поток процессора, который я придумал, таков:
- GetFile
- UpdateAttribute для установки свойства
avro.schema
с текстом схемы
- PutMongoRecord использует
CSVReader
для загрузки записей в базу данных
Как будет выглядеть схема Avro для этого? Вот мое лучшее предположение (основываясь на двух областях, которые меня интересуют):
{
"type" : "record",
"namespace" : "TheNameSpace",
"name" : "MySchema",
"fields" : [
{ "name" : "Identifier Key" , "type" : ["string"]}
{ "name" : "Name" , "type" : ["string", "null"]}
]
}
Указание "Identifier Key"
выше дает ошибку, поскольку содержит пробел. Другие поля, такие как "Name"
нормально загружаются, однако.
Некоторые проблемы, с которыми я сталкиваюсь:
- Как вы переименовываете поля? Нужно ли это делать в другом процессорном блоке вне экосистемы
ConvertRecord
и схемы? Это похоже на обычный сценарий, потому что вы хотите, чтобы поля имели одинаковые имена из разных источников.
- Avro не нравится имена полей с пробелами в них (поэтому переход с
"Identifier Key" -> "_id"
будет проблематичным).
- Кажется, нет способа переименовать поле во время операции чтения и записи. Я думал, что возможность псевдонимов поможет (например: переход от
"Name" -> "fullName"
)
- Сделать единственное поле (т. Е. Ключ идентификатора) полностью строчными перед импортом в MongoDB?
Я также попытался с помощью блока процессора ConvertRecord
сначала преобразовать из CSV в JSON, чтобы его можно было импортировать в MongoDB как JSON. Это должно было бы выглядеть примерно так (с полем идентификатора ключа все строчные), но поле выходит null
для Идентификатор ключа после того, как ConvertRecord
выполняется:
{"_id": "weld-424", "fullName": "Jane Doe", "updated": {"$date":"2018-11-01T04:00:00.000Z"}, "created": {"$date":"2018-11-01T04:00:00.000Z"}}
{"_id": "mown-175", "fullName": "John Doe", "updated": {"$date":"2018-11-01T04:00:00.000Z"}, "created": {"$date":"2018-11-01T04:00:00.000Z"}}