【发布时间】:2019-06-20 07:26:52
【问题描述】:
我在 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
目前我想出的处理器流程是:
- 获取文件
-
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,以便可以将其作为 JSON 导入 MongoDB。它需要看起来像这样(标识符键字段全部小写),但在ConvertRecord 运行后,标识符键的字段出现null:
{"_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"}}
【问题讨论】:
-
所以看起来我肯定需要一种方法来重命名字段,使它们不包含空格(为了 Avro 友好并重命名为数据导入的正确字段名称。
标签: apache apache-nifi dataflow