我有一个名为“登录”的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