Ошибка QueryDatabaseTable в функциях AGGREGATE SQL - PullRequest
0 голосов
/ 19 октября 2018

Я хочу выполнить среднее по нескольким полям в таблице базы данных, используя процессор QueryDatabaseRecord.Мой запрос отлично работает в MySQL следующим образом:

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

Все мои поля имеют тип "double", кроме TimeOfDay, который равен "varchar (10)". Когда я запускаю функции Aggregate, такие как AVG / Min и т. Д.в полях это дает мне следующую ошибку:

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

Как правильно написать SQL-запрос, который позволяет мне выполнять агрегатную функцию. Спасибо! enter image description here

1 Ответ

0 голосов
/ 19 октября 2018

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 clause , поэтому, если не работает, добавьте все неагрегированные столбцы в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;
...