Импала SQL-запрос с 1 таблицей и поиск общего с 3 именами хостов - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть одна таблица, и я пытаюсь получить имена хостов назначения, которые все пользователи используют совместно, используя Impala SQL.

таблица прокси:

sourcehostname destinationhostname
comp1          google.com
comp2          google.com
comp1          yahoo.com
comp1          facebook.com
comp2          facebook.com
comp3          facebook.com

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

SELECT DISTINCT t1.destinationhostname
FROM proxy_table t1 JOIN proxy_table t2
  ON t1.destinationhostname = t2.destinationhostname AND t1.sourcehostname  ="comp1" AND t2.sourcehostname="comp2";

Возвращает:

google.com и facebook.com

Я пытаюсь вернуть значениягде comp1 comp2 и comp3 имеют что-то общее, что было бы facebook.com, но я не могу получить этот запрос совершенно правильно:

SELECT DISTINCT t1.destinationhostname
FROM proxy_table t1 JOIN proxy_table t2 JOIN proxy_table t3
  ON t1.destinationhostname = t2.destinationhostname AND t1.sourcehostname  ="comp1" AND t2.sourcehostname="comp2" t3.sourcehostname = "comp3";

В запросе я хотел бы указать различные3 компьютера, так как их тысячи, но я хочу выбрать только конкретные.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Можете ли вы попробовать ниже.

SELECT DISTINCT t1.destinationhostname
FROM proxy_table t1 JOIN proxy_table t2
ON t1.destinationhostname = t2.destinationhostname 
JOIN proxy_table t3
ON t1.destinationhostname = t3.destinationhostname 
and t2.destinationhostname = t3.destinationhostname 
WHERE
t1.sourcehostname  ="comp1" 
AND t2.sourcehostname="comp2"
AND t3.sourcehostname = "comp3";

Дайте мне знать, если у вас возникнут проблемы

0 голосов
/ 08 февраля 2019

Использовать агрегацию.Предполагая, что нет повторяющихся строк:

select destinationhostname
from proxy_table 
group by destinationhostname
having count(*) = (select count(distinct sourcehostname) from proxy_table);

Если у вас могут быть повторяющиеся строки, просто измените having:

having count(distinct sourcehostname) = (select count(distinct sourcehostname) from proxy_table);

Если вы хотите ровно три пользователя, тогда просто используйте = 3.

...