如何在雪花中查找CIDR的起始和结束IP地址 [英] How to find start and End IP address for CIDR in snowflake
本文介绍了如何在雪花中查找CIDR的起始和结束IP地址的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
parse_ip以十六进制格式提供结果。但我需要以IP地址格式输出。 例如 对于CIDR 2c0f:eb00:400::/40(jw.org) ip_start应为-2c0f:eb00:400:: ip_end将是-2c0f:eb00:4ff:ffff:ffff
推荐答案
使用PARSE_IP:
返回由有效INET(Internet协议)或CIDR(无类Internet域路由)IPv4或IPv6字符串中的所有组件组成的JSON对象。
可以通过JavaScript UDF执行格式化。 函数体:How do I convert hex (buffer) to IPv6 in javascript:
create or replace function format_ip(IP STRING)
returns STRING
language javascript
AS
$$
return IP.match(/.{1,4}/g)
.map((val) => val.replace(/^0+/, ''))
.join(':')
.replace(/0000:/g, ':')
.replace(/:{2,}/g, '::');
$$;
查询:
SELECT PARSE_IP('2c0f:eb00:400::/40', 'CIDR')AS res,
FORMAT_IP(res:hex_ipv6_range_start::string) as ip_start,
FORMAT_IP(res:hex_ipv6_range_end::string) as ip_end;
/*
RES
{ "family": 6,
"hex_ipv6": "2C0FEB00040000000000000000000000",
"hex_ipv6_range_end": "2C0FEB0004FFFFFFFFFFFFFFFFFFFFFF",
"hex_ipv6_range_start": "2C0FEB00040000000000000000000000",
"host": "2c0f:eb00:400::",
"ip_fields": [ 739240704, 67108864, 0, 0 ],
"ip_type": "cidr",
"netmask_prefix_length": 40,
"snowflake$type": "ip_address"
}
IP_START 2C0F:EB00:400::
IP_END 2C0F:EB00:4FF:FFFF:FFFF:FFFF:FFFF:FFFF
*/
这篇关于如何在雪花中查找CIDR的起始和结束IP地址的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文