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

问题描述:

我的主要目标是通过将它们转换为整数来过滤IPv4格式的一系列IP地址。所以,例如,我想筛选IP范围从192.168.1.1到192.168.1.100,但我首先需要将它们转换为整数:3232235777到3232235876.如何将IP地址转换为BigQuery中的整数?

有没有一种方法可以在BigQuery中执行此操作(标准SQL)?我看了大量查询资料,但我的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 
) 

你为什么要给NET.IP_FROM_STRING的结果致电FORMATNET.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 
); 
+0

谢谢,艾略特。我无意识地称之为'FORMAT'函数,因为这就是Google文档中的内容。 – dnaeye

answer涵盖转换的IPv4到一个整数的数学。 BigQuery中可以使用数学运算符吗?

NET.IPV4_TO_INT64函数需要二进制(字节)作为输入,而是通过应用FORMAT功能,你“不小心”投ip_from_string字符串。

只要删除它!

+0

一如既往,米哈伊尔! – dnaeye