如何在BigQuery中将IP地址转换为整数?

时间:2017-03-09 17:54:24

标签: sql google-bigquery

我的主要目标是通过将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
)

3 个答案:

答案 0 :(得分:2)

NET.IPV4_TO_INT64函数需要二进制(BYTES)作为输入,但是你"意外地"通过应用FORMAT函数将ip_from_string转换为字符串。

删除它!

答案 1 :(得分:1)

为什么要对FORMAT的结果致电NET.IP_FROM_STRINGNET.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中是否有可用的数学运算符?