无法从联接中获取所需的所有数据

7fyelxc5  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(386)

我有一个配置单元表,其中包含一些需要分析的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:)
我希望这是有道理的,我觉得我可能用一种混乱的方式表达了这个问题。

wj8zmpe1

wj8zmpe11#

试试这个,它可以在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%')

相关问题