在BigQuery标准SQL中将IPv6转换为整数 [英] Converting IPv6 to integer in BigQuery standard SQL

查看:0
本文介绍了在BigQuery标准SQL中将IPv6转换为整数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试将IP地址转换为整数。它对IPv4有效,但在执行IPv6时,我收到错误信息:

NET.IPV4_TO_INT64()遇到非IPv4地址。应为%4个字节,但实际为%16

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

ipv6

如果您需要将ipv6转换为十进制值,您可以使用JavaScript推荐答案,如下所示。请记住,此操作产生的数值需要表示为字符串,因为它太大,无法放入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

这篇关于在BigQuery标准SQL中将IPv6转换为整数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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