не могу использовать в импале - PullRequest
1 голос
/ 18 июня 2020

где я использую «имеющий» в импале sql, я получил сообщение об ошибке «Не удалось разрешить ссылку на столбец / поле»

select count(dst_ip) as times, dst_ip 
from test_mode 
group by dst_ip 
having times > 1

Я не понимаю, почему документ импала поддерживает наличие https://impala.apache.org/docs/build/html/topics/impala_group_by.html#group_by

error

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Проверьте свою версию impala, перейдите в верхний каталог и найдите нужный документ. https://impala.apache.org/docs/build/

Например, Apache Руководство по Impala (impala-3.4.pdf) говорит, что в Overview of Impala Aliases:

Начиная с Impala 3.0, подстановка псевдонима logi c в предложениях GROUP BY, HAVING и ORDER BY стала более согласованной со стандартным поведением SQL, как показано ниже. Псевдонимы теперь допустимы только на верхнем уровне, но не в подвыражениях. Разрешены следующие операторы:

SELECT int_col / 2 AS x  FROM t  GROUP BY x;
SELECT int_col / 2 AS x  FROM t  ORDER BY x;
SELECT NOT bool_col AS nb  FROM t  GROUP BY nb  HAVING nb;

И следующие операторы НЕ допускаются:

SELECT int_col / 2 AS x  FROM t  GROUP BY x / 2;
SELECT int_col / 2 AS x  FROM t  ORDER BY -x;
SELECT int_col / 2 AS x  FROM t  GROUP BY x HAVING x > 3;

В вашем sql, times > 1 является подвыражением, а having times > 1 недопустимо в Impala 3.0 или более поздних версиях.

1 голос
/ 18 июня 2020

Некоторые базы данных поддерживают повторное использование псевдонимов, определенных в select в предложении having (на ум приходит MySQL). Я не думаю, что это относится к стандарту ANSI SQL.

В большинстве других баз данных, таких как Impala, вам нужно повторять выражение:

select count(dst_ip) as times, dst_ip 
from test_mode 
group by dst_ip 
having count(dst_ip) > 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...