표준 SQL의 Net 함수

NET.IP_FROM_STRING

NET.IP_FROM_STRING(addr_str)

설명

IPv4 또는 IPv6 주소를 텍스트(STRING) 형식에서 네트워크 바이트 순서의 이진(BYTES) 형식으로 변환합니다.

이 함수는 addr_str에 다음 형식을 지원합니다.

  • IPv4: 점으로 구분된 네 자리 형식. 예: 10.1.2.3.
  • IPv6: 콜론으로 구분된 형식. 예: 1234:5678:90ab:cdef:1234:5678:90ab:cdef. 더 많은 예는 IP 버전 6 주소 지정 아키텍처를 참조하세요.

이 함수는 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)

설명 네트워크 바이트 순서로 된 이진(BYTES) 형식의 IPv4 또는 IPv6 주소인 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인지 또는 모든 최상위 33비트가 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.Example.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.Example.Co.UK    " 공백과 대문자가 있고 스키마는 없는 비표준 URL "www.Example.Co.UK" "Co.UK" "Example.Co.UK"
"mailto:?to=&subject=&body=" URL이 아니라 URI -- 지원되지 않음 "mailto" NULL NULL

NET.PUBLIC_SUFFIX

NET.PUBLIC_SUFFIX(url)

설명

URL을 STRING으로 취해 공개 서픽스(예: com, org, net)를 STRING으로 반환합니다. 공개 서픽스는 publicsuffix.org에 등록된 ICANN 도메인입니다. 최상의 결과를 위해서는 URL 값이 RFC 3986에 정의된 형식을 준수해야 합니다. URL 값이 RFC 3986 형식 지정을 준수하지 않는 경우, 이 함수는 입력을 파싱하여 관련된 결과를 반환하기 위해 최선을 다합니다.

이 함수는 다음 중 어느 하나라도 참인 경우 NULL을 반환합니다.

  • 입력에서 호스트를 파싱할 수 없습니다.
  • 파싱된 호스트의 중간에(선행 또는 후행이 아니라) 인접한 점이 포함되어 있습니다.
  • 파싱된 호스트에 공개 서픽스가 포함되어 있지 않습니다.

이 함수는 공개 서픽스를 찾기 전에 대문자를 소문자로 변환하고 모든 비 ASCII 문자를 Punycode로 인코딩하여 호스트를 임시로 정규화합니다. 그런 다음 정규화된 호스트 대신 원본 호스트의 일부로 공개 서픽스를 반환합니다.

참고: 이 함수는 유니코드 정규화를 수행하지 않습니다.

참고: 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.Example.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.Example.Co.UK    " 공백과 대문자가 있고 스키마는 없는 비표준 URL "www.Example.Co.UK" "Co.UK" "Example.Co.UK
"mailto:?to=&subject=&body=" URL이 아니라 URI -- 지원되지 않음 "mailto" NULL NULL

NET.REG_DOMAIN

NET.REG_DOMAIN(url)

설명

URL을 STRING으로 취해 등록되어 있거나 등록 가능한 도메인(공개 서픽스 더하기 앞의 라벨 한 개)을 STRING으로 반환합니다. 최상의 결과를 위해서는 URL 값이 RFC 3986에 정의된 형식을 준수해야 합니다. URL 값이 RFC 3986 형식 지정을 준수하지 않는 경우, 이 함수는 입력을 파싱하여 관련된 결과를 반환하기 위해 최선을 다합니다.

이 함수는 다음 중 어느 하나라도 참인 경우 NULL을 반환합니다.

  • 입력에서 호스트를 파싱할 수 없습니다.
  • 파싱된 호스트의 중간에(선행 또는 후행이 아니라) 인접한 점이 포함되어 있습니다.
  • 파싱된 호스트에 공개 서픽스가 포함되어 있지 않습니다.
  • 파싱된 호스트가 앞에 라벨이 없는 공개 서픽스만 포함합니다.

이 함수는 공개 서픽스를 찾기 전에 대문자를 소문자로 변환하고 모든 비 ASCII 문자를 Punycode로 인코딩하여 호스트를 임시로 정규화합니다. 그런 다음 정규화된 호스트 대신 원본 호스트의 일부로 등록되어 있거나 등록 가능한 도메인을 반환합니다.

참고: 이 함수는 유니코드 정규화를 수행하지 않습니다.

참고: 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.Example.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.Example.Co.UK    " 공백과 대문자가 있고 스키마는 없는 비표준 URL "www.Example.Co.UK" "Co.UK" "Example.Co.UK"
"mailto:?to=&subject=&body=" URL이 아니라 URI -- 지원되지 않음 "mailto" NULL NULL
이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.