Вложенный SQL в Presto не разрешает имя столбца при попытке применить ГДЕ - PullRequest
0 голосов
/ 24 марта 2020

Долгое время скрывался / помогал себе, когда мне удавалось взломать вещи, но я либо слишком поздно вечером, либо я просто упускал что-то очевидное. Я пытался создать автоматизированный график / запрос для использования моего маршрутизатора.

У меня есть вложенный запрос, который возвращает следующее:

Record_Date | Mbps_IN | Mbps_OUT
YYYYMMDD HH:00 | 1234 | 1234

это должно иметь одну запись в час но из-за проблем со сбором данных с моего маршрутизатора часто не хватает часов или даже дней отсутствия данных. Природа счетчика является «дельтой», поэтому в других местах «сырых данных» я фиксирую дельту объема данных между предыдущими записями, которая приводит к плоской линии в течение нескольких часов, а затем к очень большим значениям данных, часто 2 -3 раза больше, так как он содержит несколько часов использования, записанных по сравнению с первым часом, когда возвращался фид данных.

В конечном счете, я хотел бы найти способ сгладить / построить среднее значение из этого всплеска и заполнить недостающие часы , (но это вызов для другого дня)

В первом случае я просто хотел бы выбрать только те строки, где значение в Mbps_In меньше 1000.

Однако, когда я делаю это из метабазы ​​или соединения dbeaver напрямую с моим PrestoDB я получаю сообщение об ошибке

Column 'results.Mbps_In' cannot be resolved {:message "line 27:7: Column 'results.Mbps_in' cannot be resolved", :errorCode 47, :errorName "COLUMN_NOT_FOUND",

Мой запрос прекрасно работает, чтобы вывести табличный вывод, включая выбросы, следующим образом

select
          metrics_date_hour Record_Date
          ,round(In_Utilisation_Mbps_Total,2) as Mbps_In
          ,round(Out_Utilisation_Mbps_Total,2) as Mbps_Out
from (
nested query
) results
-- WHERE results.Mbps_In < 1000
Group By Record_Date, Order By Record_Date desc

Когда я раскомментируйте предложение Where, я получаю сообщение об ошибке при невозможности разрешить имя столбца. Я чувствую, что это не должно быть сложно, но я попробовал несколько вариантов и попыток ссылаться на некоторые из исходных столбцов, которые были обработаны ранее, чтобы получить эти выходные данные, но я все еще не могу правильно ссылаться на столбец из таблицы результатов.

Любые советы или указатели будут приняты с благодарностью.

Обновлено с успешным запросом:

select
          metrics_date_hour Record_Date
          ,round(sum(In_Utilisation_Mbps_Total),2) as Mbps_In
          ,round(sum(Out_Utilisation_Mbps_Total),2) as Mbps_Out
from (
nested query
) results
-- WHERE results.Mbps_In < 1000 - I didn't get this to work 
Group By Record_Date
Having (sum(In_Utilisation_Mbps_Total) <1000
Order By Record_Date desc

1 Ответ

0 голосов
/ 24 марта 2020

Ошибка возникает из-за того, что в вашем вложенном запросе нет столбца с именем Mbps_In. Я считаю, что вам действительно нужен пункт HAVING, а не ГДЕ. Попробуйте изменить его следующим образом:

select
          metrics_date_hour Record_Date
          ,round(In_Utilisation_Mbps_Total,2) as Mbps_In
          ,round(Out_Utilisation_Mbps_Total,2) as Mbps_Out
from (
      nested query
     ) results
Group By Record_Date
Having Mbps_In<1000
Order By Record_Date desc

Если вы все еще хотите использовать предложение WHERE, вам нужно изменить имя столбца:

select
          metrics_date_hour Record_Date
          ,round(In_Utilisation_Mbps_Total,2) as Mbps_In
          ,round(Out_Utilisation_Mbps_Total,2) as Mbps_Out
from (
      nested query
     ) results
Where In_Utilisation_Mbps_Total<1000
Group By Record_Date
Order By Record_Date desc
...