我正在尝试解决这个问题,我在hive中有一个带有customer_id和 ip_range 字段的表格,这个最后一个字段可以具有两种格式:
-
IPS 的固定范围,下一个符号:
10.95.112.135-120.95.112.169
我的查询应返回该范围内的IP的数量,其中35个包括两个IP。
-
ips 的多个范围,下一个符号:
10.95.112.135-10.95.112.157,10.95.112.157-10.95.112.169
我的查询应返回范围的总和,在这种情况下为25 IP。
结果应该是每个Customer_ID的IP的数量
示例:
customer_ID ip_range
1 10.95.11.135-120.95.112.169
2 10.95.11.135-120.95.112.159
3 10.95.11.135-120.95.112.140
4 10.95.112.135-10.95.112.157,10.95.112.160-10.95.112.169
4 10.95.112.101-10.95.112.102
1 10.95.112.120-10.95.112.124
结果应显示:
customer_ID count_IPs
1 40
2 25
3 6
4 35
谢谢。
这太长了评论。
修复您的数据!您不想以字符串划界格式存储IP列表。这不好。存储IP列表的正确方法是在表中。就您而言,这看起来像:
create table CustomerIps (
CustomerIpId int not null,
CustomerId int not null,
IpRangeStart varchar(15),
IpRangeEnd varchar(15),
IpRangeStartInt int,
IpRangeEndInt int
);
除了IP的字符串版本外,我还将努力转换为4字节表单(假设IPv4地址表示)。
然后,您的查询很琐碎。