如何检查字符串 IP 是不是属于 Hive 中的子网

     2023-03-23     194

关键词:

【中文标题】如何检查字符串 IP 是不是属于 Hive 中的子网【英文标题】:How to check if an string IP belongs to subnet in Hive如何检查字符串 IP 是否属于 Hive 中的子网 【发布时间】:2021-10-19 22:52:28 【问题描述】:

我正在编写 Hive 代码来检查 IP 是否属于子网。但是我拥有的 IP 是字符串格式的。在 SQL 中执行此操作的常用方法是:

ip::inet << '1.2.3.4'::inet

如何在 Hive 中做同样的事情?

【问题讨论】:

我不认为 Hive 有像 Postgres 那样直接的方法。也许有人会出现并证明我错了(或发布一个可行但不太简单的解决方案)。 【参考方案1】:

正如@[Z4-tier] 所指出的,Hive 没有用于执行此操作的内置方法。 我能够在 python 中编写一个 udf,然后通过 hive 中的 ip 调用该函数。

def subnet_to_mask(subnet):
    c = int(subnet)
    mask = (0xffffffff >> (32 - c)) << (32 - c)
    return str((0xff000000 & mask) >> 24) + '.' + str((0x00ff0000 & mask) >> 16) + '.' + str((0x0000ff00 & mask) >> 8) + '.' + str((0x000000ff & mask))


def ip_to_number(ip):
    ip_no = 0
    for i, octet in enumerate(ip.split('.')):
        ip_no += int(octet) << (24 - (8 * i))
    return ip_no


def ip_in_subnet(ip, subnet):
    if len(subnet.split('/')) < 2:
        return ip == subnet.split('/')[0]
    else:
        network_ip, subnet = subnet.split('/')
        subnet = subnet_to_mask(subnet)
        return (ip_to_number(ip) & ip_to_number(subnet)) == (ip_to_number(network_ip) & ip_to_number(subnet))

然后您可以在 hiveql 中使用它,例如:

select ip, ip_in_subnet(ip, subnet) from tableABC;

【讨论】:

这是我想到的“可行但不那么简单的解决方案”:)

如何检查字符串是不是包含 JavaScript 中的子字符串?

】如何检查字符串是不是包含JavaScript中的子字符串?【英文标题】:HowtocheckwhetherastringcontainsasubstringinJavaScript?如何检查字符串是否包含JavaScript中的子字符串?【发布时间】:2010-12-1921:12:07【问题描述】:通常我希望有一个String... 查看详情

如何检查字符串是不是包含 JavaScript 中的子字符串?

】如何检查字符串是不是包含JavaScript中的子字符串?【英文标题】:HowtocheckwhetherastringcontainsasubstringinJavaScript?如何检查字符串是否包含JavaScript中的子字符串?【发布时间】:2010-12-1921:12:07【问题描述】:通常我希望有一个String... 查看详情

如何检查字符串是不是包含 JavaScript 中的子字符串?

】如何检查字符串是不是包含JavaScript中的子字符串?【英文标题】:HowtocheckwhetherastringcontainsasubstringinJavaScript?如何检查字符串是否包含JavaScript中的子字符串?【发布时间】:2010-12-1921:12:07【问题描述】:通常我希望有一个String... 查看详情

如何检查字符串是不是包含 JavaScript 中的子字符串?

】如何检查字符串是不是包含JavaScript中的子字符串?【英文标题】:HowtocheckwhetherastringcontainsasubstringinJavaScript?如何检查字符串是否包含JavaScript中的子字符串?【发布时间】:2010-12-1921:12:07【问题描述】:通常我希望有一个String... 查看详情

如何检查字符串是不是包含Ruby中的子字符串

】如何检查字符串是不是包含Ruby中的子字符串【英文标题】:HowtocheckwhetherastringcontainsasubstringinRuby如何检查字符串是否包含Ruby中的子字符串【发布时间】:2012-01-0517:00:45【问题描述】:我有一个包含内容的字符串变量:varMessage... 查看详情

如何在wordpress中检查帖子是不是属于分类类别的子类别

】如何在wordpress中检查帖子是不是属于分类类别的子类别【英文标题】:Howtocheckwhetherthepostbelongstoasubcategoryoftaxonomycategoryinwordpress如何在wordpress中检查帖子是否属于分类类别的子类别【发布时间】:2018-06-2721:10:31【问题描述】:... 查看详情

如何检查一个对象是不是至少包含一个键,其值包含 JavaScript 中的子字符串?

...个对象是不是至少包含一个键,其值包含JavaScript中的子字符串?【英文标题】:HowcanIcheckifanobjectcontainsatleastonekeywhosevaluecontainsasubstringinJavaScript?如何检查一个对象是否至少包含一个键,其值包含JavaScript中的子字符串?【发布时... 查看详情

使用存储过程检查字符串是不是包含 SQL Server 2005 中的子字符串

】使用存储过程检查字符串是不是包含SQLServer2005中的子字符串【英文标题】:CheckifastringcontainsasubstringinSQLServer2005,usingastoredprocedure使用存储过程检查字符串是否包含SQLServer2005中的子字符串【发布时间】:2011-01-3103:30:15【问题描... 查看详情

如何通过数组检查字符串是不是具有匹配的子字符串

】如何通过数组检查字符串是不是具有匹配的子字符串【英文标题】:Howtocheckifstringhasamatchingsubstringbyarray如何通过数组检查字符串是否具有匹配的子字符串【发布时间】:2015-02-1511:48:44【问题描述】:问题我知道如何找出一个... 查看详情

如何检查类的给定实例是不是属于python中的主类? [复制]

】如何检查类的给定实例是不是属于python中的主类?[复制]【英文标题】:howcanIcheckifagiveninstanceofaclassbelongstoamainclassinpython?[duplicate]如何检查类的给定实例是否属于python中的主类?[复制]【发布时间】:2016-07-0218:20:21【问题描述... 查看详情

如何检查字符串是不是是字符串列表中项目的子字符串?

】如何检查字符串是不是是字符串列表中项目的子字符串?【英文标题】:Howtocheckifastringisasubstringofitemsinalistofstrings?如何检查字符串是否是字符串列表中项目的子字符串?【发布时间】:2011-06-1802:35:14【问题描述】:我有一个... 查看详情

如何检查字符串是不是包含 JavaScript 预定义数组中存在的子字符串?

】如何检查字符串是不是包含JavaScript预定义数组中存在的子字符串?【英文标题】:HowtocheckwhetherastringcontainsasubstringwhichispresentinapredefinedarrayinJavaScript?如何检查字符串是否包含JavaScript预定义数组中存在的子字符串?【发布时间... 查看详情

Django,如何使用过滤器检查字符串字段是不是是参数的子字符串?

】Django,如何使用过滤器检查字符串字段是不是是参数的子字符串?【英文标题】:Django,howtousefiltertocheckifstringfieldisasubstringofaparameter?Django,如何使用过滤器检查字符串字段是否是参数的子字符串?【发布时间】:2020-05-2010:47:28... 查看详情

如何检查一个路径是不是是perl中另一个路径的子路径?

...的答案。我是perl的新手,我正在这样做(更多的是比较字符串而不是使用文件系统函数):useFile::Spec;subhas_common_pr 查看详情

Python:如何从列表中检查字符串中的子字符串? [复制]

】Python:如何从列表中检查字符串中的子字符串?[复制]【英文标题】:Python:Howtocheckastringforsubstringsfromalist?[duplicate]【发布时间】:2011-12-2815:43:31【问题描述】:可能重复:Checkifmultiplestringsexistinanotherstring我似乎无法在Python的任... 查看详情

检查字符串是不是与python中的IP地址模式匹配?

】检查字符串是不是与python中的IP地址模式匹配?【英文标题】:checkifastringmatchesanIPaddresspatterninpython?检查字符串是否与python中的IP地址模式匹配?【发布时间】:2011-03-2815:03:26【问题描述】:检查字符串是否匹配特定模式的最... 查看详情

如何检查IP地址是不是在Python中的两个IP范围内?

】如何检查IP地址是不是在Python中的两个IP范围内?【英文标题】:HowtocheckanIPaddressiswithinarangeoftwoIPsinPython?如何检查IP地址是否在Python中的两个IP范围内?【发布时间】:2021-09-0822:45:42【问题描述】:我有一个IP地址,并获得了另... 查看详情

如何在不使用大型结果集的情况下检查一个字符串是不是是另一个字符串的子字符串?

】如何在不使用大型结果集的情况下检查一个字符串是不是是另一个字符串的子字符串?【英文标题】:Howtocheckifastringisasubstringofanother,withoutusinglargeResultSets?如何在不使用大型结果集的情况下检查一个字符串是否是另一个字符串... 查看详情