Share via


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|evaluateipv4_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 TLookupTablede 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 trueen , la tabla resultante incluye filas coincidentes y no coincidentes (rellenas con valores NULL).

Si el argumento return_unmatched se establece falseen 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