在BigQuery标准SQL中将IPv6转换为整数



我厌倦了将IP地址转换为整数。它适用于IPv4,但在使用IPv6时,我在说时出错

NET。IPV4_TO_INT64((遇到非IPV4地址。应为4个字节,但得到16个

如何转换IPv4和IPv6的IP地址;IPv6?

如果需要将IPV6转换为十进制值,可以使用JavaScriptUDF,如下所示。请记住,此操作产生的数值需要表示为字符串,因为它太大,无法放入BigQuery数字类型的

CREATE TEMP FUNCTION ipv6_to_number(ip STRING)
RETURNS STRING
LANGUAGE js AS """
var parts = [];
ip.split(":").forEach(function(it) {
var bin = parseInt(it, 16).toString(2);
while (bin.length < 16) {
bin = "0" + bin;
}
parts.push(bin);
})
var bin = parts.join("");
var dec = BigInt("0b"+ bin)
return dec;
""";
Select "2001:0db8:0:0:8d3:0:0:0" ip, ipv6_to_number("2001:0db8:0:0:8d3:0:0:0") number

结果:

Row ip                         number   
1   2001:0db8:0:0:8d3:0:0:0    42540766411282592857539836924043198464

最新更新