SQL estándar de Google para BigQuery es compatible con las siguientes funciones de Net:
NET.IP_FROM_STRING
NET.IP_FROM_STRING(addr_str)
Descripción
Convierte una dirección IPv4 o IPv6 de formato de texto (STRING) a formato binario (BYTES) en orden de bytes de red.
Esta función admite los siguientes formatos para addr_str
:
- IPv4: notación en cuatro segmentos separados por puntos. Por ejemplo,
10.1.2.3
- IPv6: formato separado por dos puntos. Por ejemplo,
1234:5678:90ab:cdef:1234:5678:90ab:cdef
. Para obtener más ejemplos, consulta la arquitectura de direccionamiento de IP versión 6.
Esta función no admite la notación CIDR, como 10.1.2.3/32
.
Si esta función recibe una entrada NULL
, muestra NULL
. Si la entrada se considera no válida, se produce un error OUT_OF_RANGE
.
Tipo de datos mostrados
BYTES
Ejemplo
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)
Descripción
Similar a NET.IP_FROM_STRING
, pero muestra NULL
en lugar de arrojar un error si la entrada no es válida.
Tipo de datos mostrados
BYTES
Ejemplo
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)
Descripción Convierte una dirección IPv4 o IPv6 de formato binario (BYTES) en formato de orden de bytes de red a texto (STRING).
Si la entrada es de 4 bytes, esta función muestra una dirección IPv4 como una STRING. Si la entrada es de 16 bytes, muestra una dirección IPv6 como STRING.
Si esta función recibe una entrada NULL
, muestra NULL
. Si la entrada tiene una longitud diferente de 4 o 16, se produce un error OUT_OF_RANGE
.
Tipo de datos mostrados
STRING
Ejemplo
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)
Descripción
Muestra una máscara de red: una secuencia de bytes con una longitud igual a num_output_bytes
, en la que los primeros bits de prefix_length
se establecen en 1 y los otros bits se establecen en 0. num_output_bytes
y prefix_length
son INT64.
Esta función muestra un error si num_output_bytes
no es 4 (para IPv4) o 16 (para IPv6). También muestra un error si prefix_length
es negativo o mayor que 8 * num_output_bytes
.
Tipo de datos mostrados
BYTES
Ejemplo
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)
Descripción Toma addr_bin
, una dirección IPv4 o IPv6 en formato binario (BYTES) en orden de bytes de red, y muestra una dirección de subred con el mismo formato. El resultado tiene la misma longitud que addr_bin
, en el que los primeros bits de prefix_length
son iguales a los de addr_bin
y los bits restantes son 0.
Esta función arroja un error si LENGTH(addr_bin)
no es 4 o 16, o si prefix_len
es negativo o mayor que LENGTH(addr_bin) * 8
.
Tipo de datos mostrados
BYTES
Ejemplo
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)
Descripción
Convierte una dirección IPv4 de formato de número entero en formato binario (BYTES) en orden de bytes de red. En la entrada de número entero, el bit de menos importancia de la dirección IP se almacena en el bit menos importante del número entero, sin importar la arquitectura del host o del cliente. Por ejemplo, 1
significa 0.0.0.1
, y 0x1FF
significa 0.0.1.255
.
Esta función comprueba que todos los 32 bits más importantes sean 0 o que todos los 33 bits más importantes sean 1 (signo extendido desde un número entero de 32 bits).
En otras palabras, la entrada debe estar en el rango [-0x80000000, 0xFFFFFFFF]
; de lo contrario, esta función muestra un error.
Esta función no es compatible con IPv6.
Tipo de datos mostrados
BYTES
Ejemplo
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)
Descripción
Convierte una dirección IPv4 de formato binario (BYTES) en orden de bytes de red al formato de número entero. En la salida del número entero, el bit menos importante de la dirección IP se almacena en el bit menos importante del entero, sin importar la arquitectura del host o del cliente. Por ejemplo, 1
significa 0.0.0.1
y 0x1FF
significa 0.0.1.255
. El resultado está en el rango [0, 0xFFFFFFFF]
.
Si la longitud de entrada no es 4, esta función produce un error.
Esta función no es compatible con IPv6.
Tipo de datos mostrados
INT64
Ejemplo
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)
Descripción
Toma una URL como STRING y muestra el host como una STRING. Para obtener los mejores resultados, los valores de URL deben cumplir con el formato que define RFC 3986. Si el valor de la URL no cumple con el formato RFC 3986, esta función hace el mejor esfuerzo para analizar la entrada y mostrar un resultado relevante. Si la función no puede analizar la entrada, muestra NULL.
Nota: La función no realiza ninguna normalización.
Tipo de datos mostrados
STRING
Ejemplo
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"
);
entrada | descripción | host | sufijo | dominio |
---|---|---|---|---|
"" | entrada no válida | NULL | NULL | NULL |
"http://abc.xyz" | URL estándar | "abc.xyz" | "xyz" | "abc.xyz" |
"//user:password@a.b:80/path?query" | URL estándar con esquema relativo, puerto, ruta y consulta, pero sin sufijo público | "a.b" | NULL | NULL |
"https://[::1]:80" | URL estándar con host IPv6 | "[::1]" | NULL | NULL |
"http://例子.卷筒纸.中国" | URL estándar con nombre de dominio internacionalizado | "例子.卷筒纸.中国" | "中国" | "卷筒纸.中国" |
" www.Example.Co.UK " | URL no estándar con espacios, letras mayúsculas y sin esquema | "www.Example.Co.UK" | "Co.UK" | "Example.Co.UK" |
"mailto:?to=&subject=&body=" | URI en lugar de URL: no compatible | "mailto" | NULL | NULL |
NET.PUBLIC_SUFFIX
NET.PUBLIC_SUFFIX(url)
Descripción
Toma una URL como STRING y muestra el sufijo público (por ejemplo, com
, org
o net
) como una STRING. Un sufijo público es un dominio de ICANN registrado en publicsuffix.org. Para obtener los mejores resultados, los valores de URL deben cumplir con el formato que define RFC 3986. Si el valor de la URL no cumple con el formato RFC 3986, esta función hace el mejor esfuerzo para analizar la entrada y mostrar un resultado relevante.
Esta función muestra NULL si se cumple alguna de las siguientes condiciones:
- No puede analizar el host a partir de la entrada ingresada;
- El host analizado contiene puntos adyacentes en el medio (no al principio ni al final); o bien
- El host analizado no contiene ningún sufijo público.
Antes de buscar el sufijo público, esta función normaliza temporalmente el host por medio de la conversión de las letras en inglés en mayúsculas a minúsculas y la codificación de todos los caracteres que no son ASCII con Punycode. La función luego muestra el sufijo público como parte del host original en lugar del host normalizado.
Nota: La función no realiza la normalización de Unicode.
Nota: Los datos del sufijo público en publicsuffix.org también contienen dominios privados. Esta función ignora los dominios privados.
Nota: Los datos del sufijo público pueden cambiar con el tiempo. En consecuencia, la entrada que produce un resultado NULL ahora puede producir un valor distinto de NULL en el futuro.
Tipo de datos mostrados
STRING
Ejemplo
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"
);
entrada | descripción | host | sufijo | dominio |
---|---|---|---|---|
"" | entrada no válida | NULL | NULL | NULL |
"http://abc.xyz" | URL estándar | "abc.xyz" | "xyz" | "abc.xyz" |
"//user:password@a.b:80/path?query" | URL estándar con esquema relativo, puerto, ruta y consulta, pero sin sufijo público | "a.b" | NULL | NULL |
"https://[::1]:80" | URL estándar con host IPv6 | "[::1]" | NULL | NULL |
"http://例子.卷筒纸.中国" | URL estándar con nombre de dominio internacionalizado | "例子.卷筒纸.中国" | "中国" | "卷筒纸.中国" |
" www.Example.Co.UK " | URL no estándar con espacios, letras mayúsculas y sin esquema | "www.Example.Co.UK" | "Co.UK" | "Example.Co.UK |
"mailto:?to=&subject=&body=" | URI en lugar de URL: no compatible | "mailto" | NULL | NULL |
NET.REG_DOMAIN
NET.REG_DOMAIN(url)
Descripción
Toma una URL como una STRING y muestra el dominio registrado o registrable (el sufijo público más una etiqueta anterior), como una STRING. Para obtener los mejores resultados, los valores de URL deben cumplir con el formato que define RFC 3986. Si el valor de la URL no cumple con el formato RFC 3986, esta función hace el mejor esfuerzo para analizar la entrada y mostrar un resultado relevante.
Esta función muestra NULL si se cumple alguna de las siguientes condiciones:
- No puede analizar el host a partir de la entrada ingresada;
- El host analizado contiene puntos adyacentes en el medio (no al principio ni al final);
- El host analizado no contiene ningún sufijo público; o bien
- El host analizado contiene solo un sufijo público sin ninguna etiqueta anterior.
Antes de buscar el sufijo público, esta función normaliza temporalmente el host por medio de la conversión de las letras mayúsculas en inglés a minúsculas y la codificación de todos los caracteres no ASCII con Punycode. Luego, la función muestra el dominio registrado o registrable como parte del host original en lugar del host normalizado.
Nota: La función no realiza la normalización de Unicode.
Nota: Los datos del sufijo público en publicsuffix.org también contienen dominios privados. Esta función no trata un dominio privado como un sufijo público. Por ejemplo, si "us.com" es un dominio privado en los datos del sufijo público, NET.REG_DOMAIN ("foo.us.com") muestra "us.com" (el sufijo público "com" más la etiqueta anterior "us") en lugar de "foo.us.com" (el dominio privado "us.com" más la etiqueta anterior "foo").
Nota: Los datos del sufijo público pueden cambiar con el tiempo. En consecuencia, la entrada que produce un resultado NULL ahora puede producir un valor distinto de NULL en el futuro.
Tipo de datos mostrados
STRING
Ejemplo
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"
);
entrada | descripción | host | sufijo | dominio |
---|---|---|---|---|
"" | entrada no válida | NULL | NULL | NULL |
"http://abc.xyz" | URL estándar | "abc.xyz" | "xyz" | "abc.xyz" |
"//user:password@a.b:80/path?query" | URL estándar con esquema relativo, puerto, ruta y consulta, pero sin sufijo público | "a.b" | NULL | NULL |
"https://[::1]:80" | URL estándar con host IPv6 | "[::1]" | NULL | NULL |
"http://例子.卷筒纸.中国" | URL estándar con nombre de dominio internacionalizado | "例子.卷筒纸.中国" | "中国" | "卷筒纸.中国" |
" www.Example.Co.UK " | URL no estándar con espacios, letras mayúsculas y sin esquema | "www.Example.Co.UK" | "Co.UK" | "Example.Co.UK" |
"mailto:?to=&subject=&body=" | URI en lugar de URL: no compatible | "mailto" | NULL | NULL |