Hive查询多个案例条件

时间:2016-06-17 11:00:14

标签: hadoop join hive hiveql

我想根据提到的条件加入以下两个表格

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>

如何从上表中实现这一目标。

0 个答案:

没有答案