如何在雪花中查找CIDR的起始和结束IP地址 [英] How to find start and End IP address for CIDR in snowflake

查看:17
本文介绍了如何在雪花中查找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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆