我有一个配置单元表,其中包含一些需要分析的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:)
我希望这是有道理的,我觉得我可能用一种混乱的方式表达了这个问题。
1条答案
按热度按时间wj8zmpe11#
试试这个,它可以在sql中工作,我不是超级精通Hive,但它应该工作的基础上,我读过。