如何将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
的结果致电FORMAT
? 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
);
答
NET.IPV4_TO_INT64
函数需要二进制(字节)作为输入,而是通过应用FORMAT
功能,你“不小心”投ip_from_string字符串。
只要删除它!
+0
一如既往,米哈伊尔! – dnaeye
谢谢,艾略特。我无意识地称之为'FORMAT'函数,因为这就是Google文档中的内容。 – dnaeye