如何使用配置单元中的查询计算具有下一种格式的字段的IP数?

xvw2m8pv  于 2021-06-28  发布在  Hive
关注(0)|答案(1)|浏览(272)

我正在尝试解决这个问题,我在配置单元中有一个表,其中包含customer\u id和ip\u range字段,最后一个字段可以有两种格式:
IP的固定范围,下一个符号为:
10.95.112.135-120.95.112.169
我的查询应该返回该范围内的IP数,其中35个包含两个IP。
IP的多个范围,下一个符号为:
10.95.112.135-10.95.112.157,10.95.112.157-10.95.112.169
我的查询应该返回范围的总和,在本例中是25个IP。
结果应该是每个客户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

谢谢您。

pkwftd7m

pkwftd7m1#

这太长了,不能发表评论。
修复数据!您不希望以字符串分隔的格式存储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地址表示)。
那么,您的查询是微不足道的。

相关问题