2017-03-09 54 views
1

私の主な目標は、IPv4形式のIPアドレスの範囲を整数に変換して除外することです。例えば、192.168.1.1から192.168.1.100までのIP範囲をフィルタリングしたいのですが、まずそれらを整数に変換する必要があります:3232235777から3232235876へBigQueryでIPアドレスを整数に変換するにはどうすればよいですか?

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 
) 

答えて

1

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 
); 
+0

ありがとう、Elliot。私は「FORMAT」機能と呼んでいますが、それは単にGoogleのドキュメントのhahaにあったからです。 – dnaeye

0

このanswerは整数にはIPv4の変換の数学をカバーしています。 BigQueryに数学演算子がありますか?

2

NET.IPV4_TO_INT64関数は、入力としてバイナリ(バイト)を期待していますが、「偶然」FORMAT機能を適用することによって、文字列にip_from_stringキャスト。

ただ削除してください。

+0

いつものように、ミハイル! – dnaeye

関連する問題