Complemento ipv4_lookup
El complemento ipv4_lookup
busca un valor de IPv4 en una tabla de búsqueda y devuelve las filas con valores coincidentes. El complemento se invoca con el evaluate
operador .
Syntax
T|
evaluate
ipv4_lookup(
LookupTable,
SourceIPv4Key,
IPv4LookupKey [,
ExtraKey1 [.. ,
ExtraKeyN [,
return_unmatched ]]] )
Parámetros
Nombre | Tipo | Requerido | Descripción |
---|---|---|---|
T | string |
✔️ | Entrada tabular cuya columna SourceIPv4Key se usa para la coincidencia de IPv4. |
LookupTable | string |
✔️ | Expresión tabular o tabla con datos de búsqueda IPv4, cuya columna LookupKey se usa para la coincidencia de IPv4. Los valores IPv4 se pueden enmascarar mediante la notación de prefijo IP. |
SourceIPv4Key | string |
✔️ | Columna de T con cadena IPv4 que se va a buscar en LookupTable. Los valores IPv4 se pueden enmascarar mediante la notación de prefijo IP. |
IPv4LookupKey | string |
✔️ | Columna de LookupTable con cadena IPv4 que coincide con cada valor SourceIPv4Key . |
ExtraKey1 .. ExtraKeyN | string |
Referencias de columna adicionales que se usan para buscar coincidencias. Similar a la join operación: los registros con valores iguales se consideran coincidentes. Las referencias de nombre de columna deben existir tanto en la tabla T LookupTable de origen como en . |
|
return_unmatched | bool |
Marca booleana que define si el resultado debe incluir todas o solo filas coincidentes (valor predeterminado: false solo filas coincidentes devueltas). |
Notación de prefijo IP
La notación de prefijo IP (también conocida como notación CIDR) es una forma concisa de representar una dirección IP y su máscara de red asociada. El formato es <base IP>/<prefix length>
, donde la longitud del prefijo es el número de 1 bits iniciales en la máscara de red. La longitud del prefijo determina el intervalo de direcciones IP que pertenecen a la red.
Para IPv4, la longitud del prefijo es un número entre 0 y 32. Por lo tanto, la notación 192.168.2.0/24 representa la dirección IP 192.168.2.0 con una máscara de red de 255.255.255.0. Esta máscara de red tiene 24 bits iniciales o una longitud de prefijo de 24.
Para IPv6, la longitud del prefijo es un número entre 0 y 128. Por lo tanto, la notación fe80::85d:e82c:9446:7994/120 representa la dirección IP fe80::85d:e82c:9446:7994 con una máscara de red de ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00. Esta máscara de red tiene 120 bits iniciales o una longitud de prefijo de 120.
Devoluciones
El ipv4_lookup
complemento devuelve un resultado de la combinación (búsqueda) basada en la clave IPv4. El esquema de la tabla es la unión de la tabla de origen y la tabla de búsqueda, similar al resultado del lookup
operador .
Si el argumento return_unmatched se establece true
en , la tabla resultante incluye filas coincidentes y no coincidentes (rellenas con valores NULL).
Si el argumento return_unmatched se establece false
en o se omite (se usa el valor predeterminado de false
), la tabla resultante tiene tantos registros como resultados coincidentes. Esta variante de búsqueda tiene un mejor rendimiento en comparación con la return_unmatched=true
ejecución.
Nota
- Este complemento cubre el escenario de combinación basada en IPv4, suponiendo que un tamaño de tabla de búsqueda pequeño (100 000 000 000 filas), con la tabla de entrada, opcionalmente, tiene un tamaño mayor.
- El rendimiento del complemento dependerá de los tamaños de las tablas de origen de datos y búsqueda, el número de columnas y el número de registros coincidentes.
Ejemplos
Búsqueda IPv4: solo filas coincidentes
// IP lookup table: IP_Data
// Partial data from: https://raw.githubusercontent.com/datasets/geoip2-ipv4/master/data/geoip2-ipv4.csv
let IP_Data = datatable(network:string, continent_code:string ,continent_name:string, country_iso_code:string, country_name:string)
[
"111.68.128.0/17","AS","Asia","JP","Japan",
"5.8.0.0/19","EU","Europe","RU","Russia",
"223.255.254.0/24","AS","Asia","SG","Singapore",
"46.36.200.51/32","OC","Oceania","CK","Cook Islands",
"2.20.183.0/24","EU","Europe","GB","United Kingdom",
];
let IPs = datatable(ip:string)
[
'2.20.183.12', // United Kingdom
'5.8.1.2', // Russia
'192.165.12.17', // Unknown
];
IPs
| evaluate ipv4_lookup(IP_Data, ip, network)
Salida
ip | red | continent_code | continent_name | country_iso_code | country_name |
---|---|---|---|---|---|
2.20.183.12 | 2.20.183.0/24 | EU | Europa | GB | Reino Unido |
5.8.1.2 | 5.8.0.0/19 | EU | Europa | RU | Rusia |
Búsqueda IPv4: devuelve filas coincidentes y no coincidentes
// IP lookup table: IP_Data
// Partial data from:
// https://raw.githubusercontent.com/datasets/geoip2-ipv4/master/data/geoip2-ipv4.csv
let IP_Data = datatable(network:string,continent_code:string ,continent_name:string ,country_iso_code:string ,country_name:string )
[
"111.68.128.0/17","AS","Asia","JP","Japan",
"5.8.0.0/19","EU","Europe","RU","Russia",
"223.255.254.0/24","AS","Asia","SG","Singapore",
"46.36.200.51/32","OC","Oceania","CK","Cook Islands",
"2.20.183.0/24","EU","Europe","GB","United Kingdom",
];
let IPs = datatable(ip:string)
[
'2.20.183.12', // United Kingdom
'5.8.1.2', // Russia
'192.165.12.17', // Unknown
];
IPs
| evaluate ipv4_lookup(IP_Data, ip, network, return_unmatched = true)
Salida
ip | red | continent_code | continent_name | country_iso_code | country_name |
---|---|---|---|---|---|
2.20.183.12 | 2.20.183.0/24 | EU | Europa | GB | Reino Unido |
5.8.1.2 | 5.8.0.0/19 | EU | Europa | RU | Rusia |
192.165.12.17 |
Búsqueda IPv4: uso del origen en external_data()
let IP_Data = external_data(network:string,geoname_id:long,continent_code:string,continent_name:string ,country_iso_code:string,country_name:string,is_anonymous_proxy:bool,is_satellite_provider:bool)
['https://raw.githubusercontent.com/datasets/geoip2-ipv4/master/data/geoip2-ipv4.csv'];
let IPs = datatable(ip:string)
[
'2.20.183.12', // United Kingdom
'5.8.1.2', // Russia
'192.165.12.17', // Sweden
];
IPs
| evaluate ipv4_lookup(IP_Data, ip, network, return_unmatched = true)
Salida
ip | red | geoname_id | continent_code | continent_name | country_iso_code | country_name | is_anonymous_proxy | is_satellite_provider |
---|---|---|---|---|---|---|---|---|
2.20.183.12 | 2.20.183.0/24 | 2635167 | EU | Europa | GB | Reino Unido | 0 | 0 |
5.8.1.2 | 5.8.0.0/19 | 2017370 | EU | Europa | RU | Rusia | 0 | 0 |
192.165.12.17 | 192.165.8.0/21 | 2661886 | EU | Europa | SE | Suecia | 0 | 0 |
Búsqueda IPv4: uso de columnas adicionales para buscar coincidencias
let IP_Data = external_data(network:string,geoname_id:long,continent_code:string,continent_name:string ,country_iso_code:string,country_name:string,is_anonymous_proxy:bool,is_satellite_provider:bool)
['https://raw.githubusercontent.com/datasets/geoip2-ipv4/master/data/geoip2-ipv4.csv'];
let IPs = datatable(ip:string, continent_name:string, country_iso_code:string)
[
'2.20.183.12', 'Europe', 'GB', // United Kingdom
'5.8.1.2', 'Europe', 'RU', // Russia
'192.165.12.17', 'Europe', '', // Sweden is 'SE' - so it won't be matched
];
IPs
| evaluate ipv4_lookup(IP_Data, ip, network, continent_name, country_iso_code)
Salida
ip | continent_name | country_iso_code | red | geoname_id | continent_code | country_name | is_anonymous_proxy | is_satellite_provider |
---|---|---|---|---|---|---|---|---|
2.20.183.12 | Europa | GB | 2.20.183.0/24 | 2635167 | EU | Reino Unido | 0 | 0 |
5.8.1.2 | Europa | RU | 5.8.0.0/19 | 2017370 | EU | Rusia | 0 | 0 |
Contenido relacionado
- Introducción a las funciones IPv4/IPv6
- Información general sobre las funciones de coincidencia de texto IPv4
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente las Cuestiones de GitHub como mecanismo de retroalimentación para el contenido y lo sustituiremos por un nuevo sistema de retroalimentación. Para más información, consulta:Enviar y ver comentarios de