2017-03-09 239 views
1

我的主要目標是通過將它們轉換爲整數來過濾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 
) 

回答

1

你爲什麼要給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

0

answer涵蓋轉換的IPv4到一個整數的數學。 BigQuery中可以使用數學運算符嗎?

2

NET.IPV4_TO_INT64函數需要二進制(字節)作爲輸入,而是通過應用FORMAT功能,你「不小心」投ip_from_string字符串。

只要刪除它!

+0

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