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_bytes
와 prefix_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 주소의 최하위 비트는 호스트 또는 클라이언트 아키텍처에 상관없이 정수의 최하위 비트에 저장됩니다. 예를 들어 1
은 0.0.0.1
을 뜻하며, 0x1FF
는 0.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 주소의 최하위 비트는 호스트 또는 클라이언트 아키텍처에 상관없이 정수의 최하위 비트에 저장됩니다. 예를 들어 1
은 0.0.0.1
을 뜻하며, 0x1FF
는 0.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"
);
input | description | host | suffix | domain |
---|---|---|---|---|
"" | invalid input | NULL | NULL | NULL |
"http://abc.xyz" | standard 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"
);
input | description | host | suffix | domain |
---|---|---|---|---|
"" | invalid input | NULL | NULL | NULL |
"http://abc.xyz" | standard 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"
);
input | description | host | suffix | domain |
---|---|---|---|---|
"" | invalid input | NULL | NULL | NULL |
"http://abc.xyz" | standard 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 |