我有一个配置单元表,其中包含一些我需要分析的http会话。一栏中的http会话ID在整个会话中都是一致的。
我正在尝试查找属于会话的所有行,其中执行了一组特定操作之一,并且会话以超时结束。
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的行。
问题是我需要同时满足两个条件的所有ID,因此我必须首先真正找到所有ID:)
我希望这是有道理的,我觉得我可能以一种令人困惑的方式措辞了这个问题。
答案 0 :(得分:0)
尝试一下,它可以在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%')