2015-10-08 121 views
-4

我有一個名爲「登錄」的Hive表。它包含以下幾列: -配置單元查詢找到不存在的ip地址和國家

UserID | UserName | UserIP | UserCountry | Date 

在某一天(所有當天的登錄),我想找出用戶ID,它已經從一個國家(UserCountry)從用戶具有訪問從來沒有從他們的帳戶訪問帳戶以前從未訪問過的IP(用戶IP)。

+0

您使用的蜂巢或MySQL?這些是不同的數據庫。 –

+0

我正在查找其中任何一個的查詢。我相信查詢不會有很大的不同。 – Pratyush

+0

@GordonLinoff,事實證明,「除外」條款不存在於配置單元中。因此,我正在尋找一個蜂巢查詢。 – Pratyush

回答

1

我會繼續啓動,除非我刪除之前的國家和IP

select userid, usercountry, userip 
from table 
where date=xx 
except 
select userid, usercountry, userip 
from table 
where date<xx 
+0

如果不使用「except」,你將如何做。 EXEPT子句在Hive中不存在。 – Pratyush

0

我認爲最好的辦法就是GROUP子句! 你說 「以前從未訪問」,是指COUNT = 1

要查找IP只能使用一次:

select UserId, UserIP, COUNT(UserIP) FROM Login WHERE Date = yourdate GROUP BY UserIP, UserId HAVING COUNT(UserIP) = 1 

要找到國使用一次:

select UserId, UserCountry, COUNT(UserCountry) FROM Login WHERE Date = yourdate GROUP BY UserCountry, UserId HAVING COUNT(UserCountry) = 1 
+0

where子句將用Date <'您的日期'過濾掉所有行。因此,我們最終只會從「您的日期」開始處理數據集 – Pratyush

0

Left Outer Join將能夠滿足您的要求HIVE

select t1.userid, t1.usercountry, t1.userip 
from table t1 
LEFT OUTER JOIN 
from table t2 
ON (t1.userid=t2.userid) 
WHERE t1.date=xx and 
t2.data < xx and 
(t2.usercountry IS NULL or 
t2.userip IS NULL); 

希望這有助於...