我有以下流程:
querydatabasetable->queryrecord->updateattribute->mergecontent->putelasticsearchhttp
其思想是从数据库中获取记录并对字段执行聚合函数。在我的数据库表中,有以下4个字段:
DeptId DepartmentName Address ExperienNo
1 DS San Jose 4
2 GT San Fran 6
3 At Oakland 8
4 BMS detroit 3
5 RT Haawai 9
我将queryrecord的控制器服务设置为avroreader,csvsetwriter的模式如下:
{
"type": "record",
"name": "SQLSchema",
"fields" : [
{"name": "DeptId", "type": "int"},
{"name": "DepartmentName", "type": "string"},
{"name": "Address", "type": "string"},
{"name": "ExperienceNo", "type": "int"},
{"name": "Total_Experience", "type": "int"}
]
}
我想在两个字段上执行差异(deptid experienceno)
我的sql查询如下:
SELECT DeptId, DepartmentName,Address,ExperienceNo,
(DeptId - ExperienceNo) AS Total_Experience FROM flowfile
我明白了 error as 'Total_Experience' cannot be null
.
然而,同样的查询在mysql中运行良好。如何实现这一点,我可以在字段上执行sql聚合函数,并将其别名为新的动态列。
谢谢您。
任何建议都非常感谢。
1条答案
按热度按时间baubqpgj1#
您的csv读卡器控制器服务配置为
{"name": "Total_Experience", "type": "int"}
字段中没有默认值,并且在输入数据中没有此字段。所以处理器在抱怨
Total_Experience
不能是null
.要解决此问题,请更改avro模式,使total\ u experience字段包含空值。
avro架构:
csvreader控制器服务配置:
输出:
正确的方法是:
在创建此字段时,配置没有总经验字段的csv读取器,并在csvsetwriter控制器服务中包含总经验
using Query record
处理器。