我有一個名爲「登錄」的Hive表。它包含以下幾列: -配置單元查詢找到不存在的ip地址和國家
UserID | UserName | UserIP | UserCountry | Date
在某一天(所有當天的登錄),我想找出用戶ID,它已經從一個國家(UserCountry)從用戶具有訪問從來沒有從他們的帳戶訪問帳戶以前從未訪問過的IP(用戶IP)。
我有一個名爲「登錄」的Hive表。它包含以下幾列: -配置單元查詢找到不存在的ip地址和國家
UserID | UserName | UserIP | UserCountry | Date
在某一天(所有當天的登錄),我想找出用戶ID,它已經從一個國家(UserCountry)從用戶具有訪問從來沒有從他們的帳戶訪問帳戶以前從未訪問過的IP(用戶IP)。
我會繼續啓動,除非我刪除之前的國家和IP
select userid, usercountry, userip
from table
where date=xx
except
select userid, usercountry, userip
from table
where date<xx
如果不使用「except」,你將如何做。 EXEPT子句在Hive中不存在。 – Pratyush
我認爲最好的辦法就是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
where子句將用Date <'您的日期'過濾掉所有行。因此,我們最終只會從「您的日期」開始處理數據集 – Pratyush
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);
希望這有助於...
您使用的蜂巢或MySQL?這些是不同的數據庫。 –
我正在查找其中任何一個的查詢。我相信查詢不會有很大的不同。 – Pratyush
@GordonLinoff,事實證明,「除外」條款不存在於配置單元中。因此,我正在尋找一個蜂巢查詢。 – Pratyush