【问题标题】:Postgress INET to Snowflake CompatiblePostgres INET 与雪花兼容
【发布时间】:2020-06-02 22:23:46
【问题描述】:

我需要帮助将 postgres 函数迁移到雪花函数。

目前,我有以下函数,它接受一个 ip_address 并返回 ip_address 的起始范围:

...
begin
  if (p_ip_address is not null) then
    return p_ip_address::inet - '0.0.0.0';
  else
    return null;
  end if;
end
... 

我知道我们在雪花中有 PARSE_IP 提供 JSON 文件,但我只需要这个 json 的一部分 (ipv4_range_start)

例如:

Input  = 192.168.242.188
Output = 3232297472

【问题讨论】:

    标签: snowflake-cloud-data-platform greenplum


    【解决方案1】:

    如果您只想要一些信息,请选择它。

    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')。对于我的源数据,它给了我 NULLs {code} SELECT parse_ip('127.0.0.0/24','INET') AS a, parse_ip('71.227.8.18','INET') AS b, a:ipv4_range_start AS s1 , a:ipv4_range_end AS e1, b:ipv4_range_start AS s2, b:ipv4_range_end AS e2; {代码}
    • 这是因为71.227.8.18 是主机地址,而不是网络地址。 127.0.0.0/24 是一个网络,因此该函数可以为您提供起始地址,即 127.0.0.0.0,结束地址是 127.0.0.255,因为有时也写入 255.255.255.0 的 /24 显示了地址是网络,哪些是主机地址。如果您已经知道网络的掩码,则可以使用位操作进行掩码(但实际上 PARSE_IP 更简单)但是如果您没有掩码,则不再有定义的标准以前叫“网络类”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    • 2023-02-21
    相关资源
    最近更新 更多