首页 > 解决方案 > AGGREGATE SQL 函数上的 QueryDatabaseTable 错误

问题描述

我想使用 QueryDatabaseRecord 处理器对数据库表中的几个字段执行平均。我的查询在 MySQL 中运行良好,如下所示:

select TimeOfDay,
    AVG(BMU_Debug_Pack_Blk_Volt_Delta), 
    AVG(BMU_Debug_Pack_CTemp_Min) 
from tt8;

我的所有字段都是“双”类型”,除了 TimeOfDay 是“varchar (10)”。当我在字段上运行像 AVG/Min 等聚合函数时,它给了我以下错误:

org.apache.nifi.processor.exception.ProcessException: 
Error during database query or conversion of records to Avro

编写允许我执行聚合函数的 SQL 查询的正确方法是什么。谢谢! 在此处输入图像描述

标签: mysqlapacheapache-nifi

解决方案


Alias自定义查询中的聚合列并尝试在 NiFi 中再次执行,因为处理器以 avro 格式输出数据,因此我们需要对聚合列进行别名以获取 avro 模式。

 select TimeOfDay,
        AVG(BMU_Debug_Pack_Blk_Volt_Delta) avg_BMU_Debug_Pack_Blk_Volt_Delta, 
        AVG(BMU_Debug_Pack_CTemp_Min) avg_BMU_Debug_Pack_CTemp_Min
 from tt8;

此外,正如您所提到的,您可以在 mysql 端运行上述查询而无需添加group by 子句,因此,如果不起作用,则将所有非聚合列添加到group by子句中并再次执行查询

select TimeOfDay,
            AVG(BMU_Debug_Pack_Blk_Volt_Delta) avg_BMU_Debug_Pack_Blk_Volt_Delta, 
            AVG(BMU_Debug_Pack_CTemp_Min) avg_BMU_Debug_Pack_CTemp_Min
        from tt8
group by TimeOfDay;

推荐阅读