Не могу получить все данные, которые я хочу, из объединения - PullRequest
0 голосов
/ 16 января 2019

У меня есть таблица улья, в которой есть несколько http-сессий, которые мне нужно проанализировать. Один столбец имеет идентификатор сеанса http, который согласован на протяжении всего сеанса.

Я пытаюсь найти все строки, которые являются частью сеансов, в которых было выполнено одно из определенных действий, И сеанс завершился по таймауту.

set hive.cli.print.header=true;

SELECT * FROM

(SELECT DISTINCT id, x_date, y
FROM log
WHERE ((to_date(x_date)) >= (date_sub(current_date, 1)))
AND y like '%timeout%') u

JOIN

(SELECT id, x_date, y, z, q, a 
FROM log
WHERE ((to_date(x_date)) >= (date_sub(current_date, 1)))
AND z in ('1', '2', '3', '4')) o

ON u.id = o.id
ORDER BY u.id, o.x_date;

Я пытаюсь найти все строки, где

id = 123 and y like '%timeout%' 
AND (id = 123 and z in('1','2','3','4') 

То, что я сейчас получаю, это что-то вроде

if  (id = 123 and y like %timeout%)
select * where (id = 123 and z in ('1','2','3','4'))

Ожидаемый вывод должен быть намного больше, чем фактический вывод, так как я должен получить много строк, которые имеют только ID = 123.

Проблема в том, что мне это нужно для всех идентификаторов, которые соответствуют обоим критериям, поэтому мне нужно сначала найти все идентификаторы:)

Надеюсь, это имеет смысл, я чувствую, что, возможно, сформулировал вопрос в замешательстве.

1 Ответ

0 голосов
/ 16 января 2019

Попробуйте, это будет работать в SQL, я не очень разбираюсь в Hive, но это должно работать на основе того, что я прочитал.

SELECT id, x_date, y, z, q, a
FROM log
WHERE z IN ('1','2','3','4','5') 
      AND id IN (
         SELECT id
         FROM log
         WHERE ((to_date(x_date)) >= (date_sub(current_date, 1)))
               AND y like '%timeout%')
...