我的主要目标是通过将IPv4格式转换为整数来过滤掉一系列IP地址。所以,例如,我想过滤从192.168.1.1到192.168.1.100的IP范围,但我首先需要将它们转换为整数:3232235777到3232235876。
有没有办法在BigQuery(标准SQL)中执行此操作?我查看了BigQuery文档,但我NET.IP_FROM_STRING()
和NET.IPV4_TO_INT64()
函数的组合不断抛出此错误:No matching signature for function NET.IPV4_TO_INT64 for argument types: STRING.
SELECT addr_str, ip_from_string, FORMAT("0x%X",
NET.IPV4_TO_INT64(ip_from_string)) AS ipv4_to_int64
FROM
(
SELECT addr_str, FORMAT("%T", NET.IP_FROM_STRING(addr_str)) AS ip_from_string
FROM UNNEST(['192.168.1.1','192.168.1.100']) AS addr_str
)
答案 0 :(得分:2)
NET.IPV4_TO_INT64
函数需要二进制(BYTES)作为输入,但是你"意外地"通过应用FORMAT
函数将ip_from_string转换为字符串。
删除它!
答案 1 :(得分:1)
为什么要对FORMAT
的结果致电NET.IP_FROM_STRING
? NET.IP_FROM_STRING
以字节形式返回IP地址,使用它可以使用NET.IPV4_TO_INT64
转换为INT64。
#standardSQL
SELECT
addr_str,
ip_from_string,
NET.IPV4_TO_INT64(ip_from_string) AS ipv4_to_int64
FROM (
SELECT
addr_str,
NET.IP_FROM_STRING(addr_str) AS ip_from_string
FROM UNNEST(['192.168.1.1','192.168.1.100']) AS addr_str
);
答案 2 :(得分:0)
这个answer涵盖了将IPv4转换为整数的算法。 BigQuery中是否有可用的数学运算符?