我想根据提到的条件加入以下两个表格
Table1
ip ts
10.1.12 11:25:54
10.1.14 09:45:25
10.1.15 18:21:45
10.1.19 10:56:45
Table2
ipaddress start end macaddr
10.1.12 10:30:56 15:50:20 abc
10.1.13 11:34:36 18:40:22 def
10.1.14 08:15:23 10:51:54 ijk
10.1.15 15:52:45 21:56:45 abc
10.1.16 07:45:32 23:02:56 abc
10.1.14 15:56:45 20:23:54 def
10.1.15 17:54:45 19:56:45 abc
1)应该在第二个表中查找来自table1的所有IP,其中时间戳应该在table2
的开始和结束时间之间出现。由于Hive仅支持eqi连接,因此我决定基于table2
加入ipaddress
并添加新列以使用case语句检查时间戳匹配条件。
SELECT
a.ip, a.ts, b.ipaddress, b.start, b.end, b.macaddress,
CASE
WHEN a.ts BETWEEN b.start AND b.end THEN 'MATCH'
ELSE
NULL
END AS status
FROM table1 a
LEFT OUTER JOIN table2 b ON a.ip = b.ipaddress
上面的代码给出了结果
ip ts ipaddress start end macaddr status
10.1.12 11:25:54 10.1.12 10:30:56 15:50:20 abc MATCH
10.1.14 09:45:25 10.1.14 08:15:23 10:51:54 ijk MATCH
10.1.14 09:45:25 10.1.14 15:56:45 20:23:54 def NULL
10.1.15 18:21:45 10.1.15 15:52:45 21:56:45 abc MATCH
10.1.15 18:21:45 10.1.15 17:54:45 19:56:45 abc MATCH
10.1.19 10:56:45 NULL NULL NULL NULL NULL
2)我需要检查MATCH
条件的ip
,如果在给定时间将其分配给多个macaddr
,则将状态设置为{{ 1}}。从上面的示例中可以看出10.1.15处于MULTIPLE
状态,并且在给定时间内有MATCH
个。{/ p>
如何从上表中实现这一目标。