Net 函数对于 IPv4 和 IPv6 的行为略有不同。为什么?
Net functions behave slightly different for IPv4 from IPv6. Why?
我正在使用 BigQuery 截断 IPv4 和 IP46 IP 地址。我的意思是我想删除可能用于识别真人的部分。
下面是一些演示代码:
select *,
NET.IP_TO_STRING(NET.IP_TRUNC(NET.IP_FROM_STRING(v.IPv4Address), 24)),
NET.IP_TO_STRING(NET.IP_TRUNC(NET.IP_FROM_STRING(v.IPv6Address), 64))
from (
select struct(
"254.34.78.20" as `IPV4Address`,
"2a02:c7e:3f0d:e00:48e:abff:d697:9cc2" as `IPv6Address`
) as v
)
它returns:
v
f0_
f1_
{ "IPV4Address": "254.34.78.20", "IPv6Address": "2a02:c7e:3f0d:e00:48e:abff:d697:9cc2" }
254.34.78.0
2a02:c7e:3f0d:e00::
我只是想知道为什么这些函数 return IPv4 地址的截断部分为 0 而 IPv6 地址的截断部分没有。
我知道这本身并不是真正的 BigQuery 问题,因为它更多地是关于网络的,我怀疑 BigQuery 只是在做任何其他此类库会做的事情……但有兴趣知道为什么仍然如此。也许我也会用 IPv6
标记它
I'd simply like to know why these functions return a 0 for the
truncated portion of the IPv4 address but nothing for the truncated
portion of the IPv6 address.
它是返回0
作为IPv6地址的t运行分类部分。
IPv6 地址可以有多种形式,但规范形式要求您用双冒号 (::
) 缩短 0
字段中最长的 运行。那是在你的地址 2a02:c7e:3f0d:e00::
的末尾,这意味着它 2a02:c7e:3f0d:e00:0:0:0:0
被适当地缩短了。
我正在使用 BigQuery 截断 IPv4 和 IP46 IP 地址。我的意思是我想删除可能用于识别真人的部分。
下面是一些演示代码:
select *,
NET.IP_TO_STRING(NET.IP_TRUNC(NET.IP_FROM_STRING(v.IPv4Address), 24)),
NET.IP_TO_STRING(NET.IP_TRUNC(NET.IP_FROM_STRING(v.IPv6Address), 64))
from (
select struct(
"254.34.78.20" as `IPV4Address`,
"2a02:c7e:3f0d:e00:48e:abff:d697:9cc2" as `IPv6Address`
) as v
)
它returns:
v | f0_ | f1_ |
---|---|---|
{ "IPV4Address": "254.34.78.20", "IPv6Address": "2a02:c7e:3f0d:e00:48e:abff:d697:9cc2" } | 254.34.78.0 | 2a02:c7e:3f0d:e00:: |
我只是想知道为什么这些函数 return IPv4 地址的截断部分为 0 而 IPv6 地址的截断部分没有。
我知道这本身并不是真正的 BigQuery 问题,因为它更多地是关于网络的,我怀疑 BigQuery 只是在做任何其他此类库会做的事情……但有兴趣知道为什么仍然如此。也许我也会用 IPv6
标记它
I'd simply like to know why these functions return a 0 for the truncated portion of the IPv4 address but nothing for the truncated portion of the IPv6 address.
它是返回0
作为IPv6地址的t运行分类部分。
IPv6 地址可以有多种形式,但规范形式要求您用双冒号 (::
) 缩短 0
字段中最长的 运行。那是在你的地址 2a02:c7e:3f0d:e00::
的末尾,这意味着它 2a02:c7e:3f0d:e00:0:0:0:0
被适当地缩短了。