Snowflake cloud data platform Postgress INET与雪花兼容

Snowflake cloud data platform Postgress INET与雪花兼容,snowflake-cloud-data-platform,greenplum,Snowflake Cloud Data Platform,Greenplum,我需要帮助将postgres函数迁移到snowflake函数 目前,我有以下函数,它接受ip_地址并返回ip_地址的起始范围: ... begin if (p_ip_address is not null) then return p_ip_address::inet - '0.0.0.0'; else return null; end if; end ... 我知道我们在snowflake中提供了JSON文件,但我只需要这个JSON的一部分(ipv4\u ran

我需要帮助将postgres函数迁移到snowflake函数

目前,我有以下函数,它接受ip_地址并返回ip_地址的起始范围:

...
begin
  if (p_ip_address is not null) then
    return p_ip_address::inet - '0.0.0.0';
  else
    return null;
  end if;
end
... 
我知道我们在snowflake中提供了JSON文件,但我只需要这个JSON的一部分(ipv4\u range\u start)

例如:

Input  = 192.168.242.188
Output = 3232297472

如果您只需要一组信息,请选择它

select parse_ip('127.0.0.0/24','INET') as a
    ,a:ipv4_range_end;
给出:

A   A:IPV4_RANGE_END
{    "family": 4,    "host": "127.0.0.0",    "ip_fields": [      2130706432,      0,      0,      0    ],    "ip_type": "inet",    "ipv4": 2130706432,    "ipv4_range_end": 2130706687,    "ipv4_range_start": 2130706432,    "netmask_prefix_length": 24,    "snowflake$type": "ip_address"  } 2130706687

如果您只需要一组信息,请选择它

select parse_ip('127.0.0.0/24','INET') as a
    ,a:ipv4_range_end;
给出:

A   A:IPV4_RANGE_END
{    "family": 4,    "host": "127.0.0.0",    "ip_fields": [      2130706432,      0,      0,      0    ],    "ip_type": "inet",    "ipv4": 2130706432,    "ipv4_range_end": 2130706687,    "ipv4_range_start": 2130706432,    "netmask_prefix_length": 24,    "snowflake$type": "ip_address"  } 2130706687

感谢Simeon的快速响应。我拥有的数据格式不同(“71.227.8.18”)。对于我的源数据,它给了我空值{code}选择parse_ip('127.0.0.0/24','INET')作为a,parse_ip('71.227.8.18','INET')作为b,a:ipv4_范围_开始为s1,a:ipv4_范围_结束为e1,b:ipv4_范围_开始为s2,b:ipv4_范围_结束为e2;{code}那是因为
71.227.8.18
是主机地址,而不是网络地址
127.0.0.0/24
是一个网络,因此该函数可以为您提供起始地址127.0.0.0,结束地址127.0.0.255,因为/24有时也写在255.255.255.0中,它显示地址的哪些位是网络,哪些位是主机地址。。如果你已经知道一个网络的掩码,你可以通过位操作来进行掩码(但实际上解析IP更简单),但是如果你没有掩码,就不再有一个定义的标准来定义过去所谓的“网络类”,感谢Simeon的快速响应。我拥有的数据格式不同(“71.227.8.18”)。对于我的源数据,它给了我空值{code}选择parse_ip('127.0.0.0/24','INET')作为a,parse_ip('71.227.8.18','INET')作为b,a:ipv4_范围_开始为s1,a:ipv4_范围_结束为e1,b:ipv4_范围_开始为s2,b:ipv4_范围_结束为e2;{code}那是因为
71.227.8.18
是主机地址,而不是网络地址
127.0.0.0/24
是一个网络,因此该函数可以为您提供起始地址127.0.0.0,结束地址127.0.0.255,因为/24有时也写在255.255.255.0中,它显示地址的哪些位是网络,哪些位是主机地址。。如果你已经知道一个网络的掩码,你可以通过位操作来做掩码(但实际上解析IP更简单),但是如果你没有掩码,就不再有一个定义的标准来定义过去被称为“网络类”的东西