標準 SQL のネット関数

NET.IP_FROM_STRING

NET.IP_FROM_STRING(addr_str)

説明

IPv4 または IPv6 アドレスをネットワーク バイト順でテキスト形式(STRING)からバイナリ形式(BYTES)に変換します。

この関数は、addr_str で次の形式をサポートします。

この関数は、10.1.2.3/32 のような CIDR 表記をサポートしていません。

この関数は、NULL 入力を受信すると NULL を返します。入力が無効と判断されると、OUT_OF_RANGE エラーが発生します。

戻りデータの型

BYTES

SELECT
  addr_str, FORMAT("%T", NET.IP_FROM_STRING(addr_str)) AS ip_from_string
FROM UNNEST([
  '48.49.50.51',
  '::1',
  '3031:3233:3435:3637:3839:4041:4243:4445',
  '::ffff:192.0.2.128'
]) AS addr_str;
addr_str ip_from_string
48.49.50.51 b"0123"
::1 b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"
3031:3233:3435:3637:3839:4041:4243:4445 b"0123456789@ABCDE"
::ffff:192.0.2.128 b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xc0\x00\x02\x80"

NET.SAFE_IP_FROM_STRING

NET.SAFE_IP_FROM_STRING(addr_str)

説明

NET.IP_FROM_STRING と似ていますが、入力が無効な場合はエラーをスローせずに NULL を返します。

戻りデータの型

BYTES

SELECT
  addr_str,
  FORMAT("%T", NET.SAFE_IP_FROM_STRING(addr_str)) AS safe_ip_from_string
FROM UNNEST([
  '48.49.50.51',
  '::1',
  '3031:3233:3435:3637:3839:4041:4243:4445',
  '::ffff:192.0.2.128',
  '48.49.50.51/32',
  '48.49.50',
  '::wxyz'
]) AS addr_str;
addr_str safe_ip_from_string
48.49.50.51 b"0123"
::1 b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"
3031:3233:3435:3637:3839:4041:4243:4445 b"0123456789@ABCDE"
::ffff:192.0.2.128 b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xc0\x00\x02\x80"
48.49.50.51/32 NULL
48.49.50 NULL
::wxyz NULL

NET.IP_TO_STRING

NET.IP_TO_STRING(addr_bin)

説明 IPv4 または IPv6 アドレスをネットワーク バイト順でバイナリ形式(BYTES)からテキスト形式(STRING)に変換します。

入力が 4 バイトの場合、この関数は IPv4 アドレスを STRING として返します。入力が 16 バイトの場合、IPv6 アドレスを STRING として返します。

この関数は、NULL 入力を受信すると NULL を返します。入力の長さが 4 または 16 以外の場合、OUT_OF_RANGE エラーが発生します。

戻りデータの型

STRING

SELECT FORMAT("%T", x) AS addr_bin, NET.IP_TO_STRING(x) AS ip_to_string
FROM UNNEST([
  b"0123",
  b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01",
  b"0123456789@ABCDE",
  b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xc0\x00\x02\x80"
]) AS x;
addr_bin ip_to_string
b"0123" 48.49.50.51
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" ::1
b"0123456789@ABCDE" 3031:3233:3435:3637:3839:4041:4243:4445
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xc0\x00\x02\x80" ::ffff:192.0.2.128

NET.IP_NET_MASK

NET.IP_NET_MASK(num_output_bytes, prefix_length)

説明

num_output_bytes の長さと等しいバイト シーケンスでネットワーク マスクを返します。最初の prefix_length ビットは 1 に設定され、他のビットは 0 に設定されます。num_output_bytesprefix_length は INT64 です。num_output_bytes が 4(IPv4 の場合)または 16(IPv6 の場合)でない場合、エラーが発生します。prefix_length が負の数または 8 * num_output_bytes よりも大きい場合にもエラーが発生します。

戻りデータの型

BYTES

SELECT x, y, FORMAT("%T", NET.IP_NET_MASK(x, y)) AS ip_net_mask
FROM UNNEST([
  STRUCT(4 as x, 0 as y),
  (4, 20),
  (4, 32),
  (16, 0),
  (16, 1),
  (16, 128)
]);
x y ip_net_mask
4 0 b"\x00\x00\x00\x00"
4 20 b"\xff\xff\xf0\x00"
4 32 b"\xff\xff\xff\xff"
16 0 b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
16 1 b"\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
16 128 b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"

NET.IP_TRUNC

NET.IP_TRUNC(addr_bin, prefix_length)

説明: IPv4 または IPv6 アドレスをネットワーク バイト順のバイナリ形式(BYTES)で表した addr_bin を取り、同じ形式でサブネット アドレスを返します。結果の長さは addr_bin と同じになります。最初の prefix_length ビットは addr_bin と等しくなり、残りのビットは 0 になります。

LENGTH(addr_bin) が 4 または 16 でない場合、あるいは prefix_len が負の数または LENGTH(addr_bin) * 8 より大きい場合、エラーが発生します。

戻りデータの型

BYTES

SELECT
  FORMAT("%T", x) as addr_bin, prefix_length,
  FORMAT("%T", NET.IP_TRUNC(x, prefix_length)) AS ip_trunc
FROM UNNEST([
  STRUCT(b"\xAA\xBB\xCC\xDD" as x, 0 as prefix_length),
  (b"\xAA\xBB\xCC\xDD", 11), (b"\xAA\xBB\xCC\xDD", 12),
  (b"\xAA\xBB\xCC\xDD", 24), (b"\xAA\xBB\xCC\xDD", 32),
  (b'0123456789@ABCDE', 80)
]);
addr_bin prefix_length ip_trunc
b"\xaa\xbb\xcc\xdd" 0 b"\x00\x00\x00\x00"
b"\xaa\xbb\xcc\xdd" 11 b"\xaa\xa0\x00\x00"
b"\xaa\xbb\xcc\xdd" 12 b"\xaa\xb0\x00\x00"
b"\xaa\xbb\xcc\xdd" 24 b"\xaa\xbb\xcc\x00"
b"\xaa\xbb\xcc\xdd" 32 b"\xaa\xbb\xcc\xdd"
b"0123456789@ABCDE" 80 b"0123456789\x00\x00\x00\x00\x00\x00"

NET.IPV4_FROM_INT64

NET.IPV4_FROM_INT64(integer_value)

説明

IPv4 アドレスをネットワーク バイト順に整数形式からバイナリ形式(BYTES)に変換します。整数入力の場合、ホストまたはクライアントのアーキテクチャに関係なく、IP アドレスの最下位ビットが整数の最下位ビットに保存されます。たとえば、10.0.0.1 を意味し、0x1FF0.0.1.255 を意味します。

この関数は、最上位の 32 ビットがすべて 0 またはすべて 1 になっているかどうか確認します(32 ビット整数からの符号拡張)。つまり、入力が [-0x80000000, 0xFFFFFFFF] の範囲でないとエラーが発生します。

この関数は IPv6 をサポートしていません。

戻りデータの型

BYTES

SELECT x, x_hex, FORMAT("%T", NET.IPV4_FROM_INT64(x)) AS ipv4_from_int64
FROM (
  SELECT CAST(x_hex AS INT64) x, x_hex
  FROM UNNEST(["0x0", "0xABCDEF", "0xFFFFFFFF", "-0x1", "-0x2"]) AS x_hex
);
x x_hex ipv4_from_int64
0 0x0 b"\x00\x00\x00\x00"
11259375 0xABCDEF b"\x00\xab\xcd\xef"
4294967295 0xFFFFFFFF b"\xff\xff\xff\xff"
-1 -0x1 b"\xff\xff\xff\xff"
-2 -0x2 b"\xff\xff\xff\xfe"

NET.IPV4_TO_INT64

NET.IPV4_TO_INT64(addr_bin)

説明

IPv4 アドレスをネットワーク バイト順にバイナリ形式(BYTES)から整数形式に変換します。整数出力の場合、ホストまたはクライアントのアーキテクチャに関係なく、IP アドレスの最下位ビットが整数の最下位ビットに保存されます。たとえば、10.0.0.1 を意味し、0x1FF0.0.1.255 を意味します。出力は [0, 0xFFFFFFFF] の範囲になります。

入力長が 4 でない場合、エラーが発生します。

この関数は IPv6 をサポートしていません。

戻りデータの型

INT64

SELECT
  FORMAT("%T", x) AS addr_bin,
  FORMAT("0x%X", NET.IPV4_TO_INT64(x)) AS ipv4_to_int64
FROM
UNNEST([b"\x00\x00\x00\x00", b"\x00\xab\xcd\xef", b"\xff\xff\xff\xff"]) AS x;
addr_bin ipv4_to_int64
b"\x00\x00\x00\x00" 0x0
b"\x00\xab\xcd\xef" 0xABCDEF
b"\xff\xff\xff\xff" 0xFFFFFFFF

NET.HOST

NET.HOST(url)

説明

URL を STRING として取得し、ホストを STRING として返します。最適な結果を得るには、URL 値を RFC 3986 で定義されている形式に一致させる必要があります。URL 値が RFC 3986 の形式設定に準拠していない場合、この関数は入力を解析し、関連する結果を返します。入力を解析できない場合、NULL を返します。

注: この関数は正規化を行いません。

戻りデータの型

STRING

SELECT
  FORMAT("%T", input) AS input,
  description,
  FORMAT("%T", NET.HOST(input)) AS host,
  FORMAT("%T", NET.PUBLIC_SUFFIX(input)) AS suffix,
  FORMAT("%T", NET.REG_DOMAIN(input)) AS domain
FROM (
  SELECT "" AS input, "invalid input" AS description
  UNION ALL SELECT "http://abc.xyz", "standard URL"
  UNION ALL SELECT "//user:password@a.b:80/path?query",
                   "standard URL with relative scheme, port, path and query, but no public suffix"
  UNION ALL SELECT "https://[::1]:80", "standard URL with IPv6 host"
  UNION ALL SELECT "http://例子.卷筒纸.中国", "standard URL with internationalized domain name"
  UNION ALL SELECT "    www.Google.Co.UK    ",
                   "non-standard URL with spaces, upper case letters, and without scheme"
  UNION ALL SELECT "mailto:?to=&subject=&body=", "URI rather than URL--unsupported"
);
入力 説明 ホスト サフィックス ドメイン
"" 無効な入力 NULL NULL NULL
"http://abc.xyz" 標準の URL "abc.xyz" "xyz" "abc.xyz"
"//user:password@a.b:80/path?query" 相対スキーム、ポート、パス、クエリを含む標準の URL。ただし、パブリック サフィックスはありません。 "a.b" NULL NULL
"https://[::1]:80" IPv6 ホスト付きの標準 URL "[::1]" NULL NULL
"http://例子.卷筒纸.中国" 国際化ドメイン名付きの標準 URL "例子.卷筒纸.中国" "中国" "卷筒纸.中国"
"    www.Google.Co.UK    " スペース、大文字を含み、スキームのない非標準 URL "www.Google.Co.UK" "Co.UK" "Google.Co.UK"
"mailto:?to=&subject=&body=" URL ではなく URI(サポート対象外) "mailto" NULL NULL

NET.PUBLIC_SUFFIX

NET.PUBLIC_SUFFIX(url)

説明

STRING の URL を受け取り、パブリック サフィックス(comorgnet など)を STRING として返します。パブリック サフィックスは、publicsuffix.org に登録されている ICANN ドメインです。最適な結果を得るには、URL 値を RFC 3986 で定義されている形式に一致させる必要があります。URL 値が RFC 3986 の形式設定に準拠していない場合、この関数は入力を解析し、関連する結果を返すために最善の努力を行います。

次の条件を満たす場合、この関数は NULL を返します。

  • 入力からホストを解析できない。
  • 解析したホストで、先頭または末尾以外の場所でドットが連続している。
  • 解析したホストにパブリック サフィックスが含まれていない。

パブリック サフィックスを検索する前に、この関数はホストを一時的に正規化します。大文字の英字を小文字に変換し、ASCII 以外の文字を Punycode でエンコードします。 次に、正規化されたホストではなく、元のホストの一部としてパブリック サフィックスを返します。

注: この関数は Unicode の正規化を行いません。

注: publicsuffix.org のパブリック サフィックス データにはプライベート ドメインも含まれています。この関数は、プライベート ドメインを無視します。

注: パブリック サフィックス データは変更される可能性があります。今後、NULL 結果を生成する入力で NULL 以外の値が生成される可能性があります。

戻りデータの型

STRING

SELECT
  FORMAT("%T", input) AS input,
  description,
  FORMAT("%T", NET.HOST(input)) AS host,
  FORMAT("%T", NET.PUBLIC_SUFFIX(input)) AS suffix,
  FORMAT("%T", NET.REG_DOMAIN(input)) AS domain
FROM (
  SELECT "" AS input, "invalid input" AS description
  UNION ALL SELECT "http://abc.xyz", "standard URL"
  UNION ALL SELECT "//user:password@a.b:80/path?query",
                   "standard URL with relative scheme, port, path and query, but no public suffix"
  UNION ALL SELECT "https://[::1]:80", "standard URL with IPv6 host"
  UNION ALL SELECT "http://例子.卷筒纸.中国", "standard URL with internationalized domain name"
  UNION ALL SELECT "    www.Google.Co.UK    ",
                   "non-standard URL with spaces, upper case letters, and without scheme"
  UNION ALL SELECT "mailto:?to=&subject=&body=", "URI rather than URL--unsupported"
);
入力 説明 ホスト サフィックス ドメイン
"" 無効な入力 NULL NULL NULL
"http://abc.xyz" 標準の URL "abc.xyz" "xyz" "abc.xyz"
"//user:password@a.b:80/path?query" 相対スキーム、ポート、パス、クエリを含む標準の URL。ただし、パブリック サフィックスはありません。 "a.b" NULL NULL
"https://[::1]:80" IPv6 ホスト付きの標準 URL "[::1]" NULL NULL
"http://例子.卷筒纸.中国" 国際化ドメイン名付きの標準 URL "例子.卷筒纸.中国" "中国" "卷筒纸.中国"
"    www.Google.Co.UK    " スペース、大文字を含み、スキームのない非標準 URL "www.Google.Co.UK" "Co.UK" "Google.Co.UK"
"mailto:?to=&subject=&body=" URL ではなく URI(サポート対象外) "mailto" NULL NULL

NET.REG_DOMAIN

NET.REG_DOMAIN(url)

説明

STRING の URL を受け取り、登録済みまたは登録可能なドメイン(1 つの先行ラベルが付加されたパブリック サフィックス)を STRING として返します。最適な結果を得るには、URL 値を RFC 3986 で定義されている形式に一致させる必要があります。URL 値が RFC 3986 の形式設定に準拠していない場合、この関数は入力を解析し、関連する結果を返します。

次の条件を満たす場合、この関数は NULL を返します。

  • 入力からホストを解析できない。
  • 解析したホストで、先頭または末尾以外の場所でドットが連続している。
  • 解析したホストにパブリック サフィックスが含まれていない。
  • 解析したホストにパブリック サフィックスが含まれているが、先頭にラベルがない。

パブリック サフィックスを検索する前に、この関数はホストを一時的に正規化します。大文字の英字を小文字に変換し、ASCII 以外のすべての文字を Punycode でエンコードします。次に、正規化されたホストではなく、元のホストの一部として登録済みまたは登録可能なドメインを返します。

注: この関数は Unicode の正規化を行いません。

注: publicsuffix.org のパブリック サフィックス データにはプライベート ドメインも含まれています。この関数は、プライベート ドメインをパブリック サフィックスとして扱いません。たとえば、「us.com」がパブリック サフィックス データのプライベート ドメインである場合、NET.REG_DOMAIN(「foo.us.com」)は、「foo.us.com」(プライベート ドメイン「us.com」と先行するラベル「foo」)ではなく、「us.com」(パブリック サフィックス「com」と先行するラベル「us」)を返します。

注: パブリック サフィックス データは変更される可能性があります。今後、NULL 結果を生成する入力で NULL 以外の値が生成される可能性があります。

戻りデータの型

STRING

SELECT
  FORMAT("%T", input) AS input,
  description,
  FORMAT("%T", NET.HOST(input)) AS host,
  FORMAT("%T", NET.PUBLIC_SUFFIX(input)) AS suffix,
  FORMAT("%T", NET.REG_DOMAIN(input)) AS domain
FROM (
  SELECT "" AS input, "invalid input" AS description
  UNION ALL SELECT "http://abc.xyz", "standard URL"
  UNION ALL SELECT "//user:password@a.b:80/path?query",
                   "standard URL with relative scheme, port, path and query, but no public suffix"
  UNION ALL SELECT "https://[::1]:80", "standard URL with IPv6 host"
  UNION ALL SELECT "http://例子.卷筒纸.中国", "standard URL with internationalized domain name"
  UNION ALL SELECT "    www.Google.Co.UK    ",
                   "non-standard URL with spaces, upper case letters, and without scheme"
  UNION ALL SELECT "mailto:?to=&subject=&body=", "URI rather than URL--unsupported"
);
入力 説明 ホスト サフィックス ドメイン
"" 無効な入力 NULL NULL NULL
"http://abc.xyz" 標準の URL "abc.xyz" "xyz" "abc.xyz"
"//user:password@a.b:80/path?query" 相対スキーム、ポート、パス、クエリを含む標準の URL。ただし、パブリック サフィックスはありません。 "a.b" NULL NULL
"https://[::1]:80" IPv6 ホスト付きの標準 URL "[::1]" NULL NULL
"http://例子.卷筒纸.中国" 国際化ドメイン名付きの標準 URL "例子.卷筒纸.中国" "中国" "卷筒纸.中国"
"    www.Google.Co.UK    " スペース、大文字を含み、スキームのない非標準 URL "www.Google.Co.UK" "Co.UK" "Google.Co.UK"
"mailto:?to=&subject=&body=" URL ではなく URI(サポート対象外) "mailto" NULL NULL
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。