【问题标题】:Can't get all of the data I want out of a join无法从联接中获取我想要的所有数据
【发布时间】:2019-01-16 00:34:26
【问题描述】:

我有一个 hive 表,其中包含一些我需要分析的 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 :)

我希望这是有道理的,我觉得我可能以一种令人困惑的方式措辞了这个问题。

【问题讨论】:

    标签: hive hql


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我试过了,但我无法让它工作......最终可能不得不将它分解为多个查询:(
    猜你喜欢
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 2015-05-23
    • 2021-02-15
    相关资源
    最近更新 更多