Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: ✅Microsoft Fabric✅Azure Data Explorer
geoip_fl()
es una función definida por el usuario que recupera información geográfica de la dirección IP.
Nota:
- Use la función nativa geo_info_from_ip_address() en lugar de la función descrita en este documento. La función nativa proporciona la misma funcionalidad y es mejor para el rendimiento y la escalabilidad. Este documento solo se proporciona con fines de referencia.
- Esta función recuperó datos geográficos de los datos de GeoLite2 creados por MaxMind, disponibles en http://www.maxmind.com. Revise el Contrato de licencia de usuario final de GeoLite2.
Requisitos previos
- El complemento de Python debe estar habilitado en el clúster. Esto es necesario para python insertado que se usa en la función .
- El complemento de Python debe estar habilitado en la base de datos. Esto es necesario para python insertado que se usa en la función .
Sintaxis
T | invoke geoip_fl(
,
country_col,
country_col state_col city_col,
city_col,
longitude_col latitude_col ip_col,
)
Obtenga más información sobre las convenciones de sintaxis.
Parámetros
Nombre | Type | Obligatorio | Descripción |
---|---|---|---|
ip_col | string |
✔️ | Nombre de la columna que contiene las direcciones IP que se van a resolver. |
country_col | string |
✔️ | Nombre de la columna que se va a almacenar el país recuperado. |
state_col | string |
✔️ | Nombre de la columna que se va a almacenar el estado recuperado. |
city_col | string |
✔️ | Nombre de la columna que se va a almacenar la ciudad recuperada. |
longitude_col | real |
✔️ | Nombre de la columna que se va a almacenar la longitud recuperada. |
latitude_col | real |
✔️ | Nombre de la columna que se va a almacenar la latitud recuperada. |
Definición de función
Puede definir la función insertando su código como una función definida por la consulta o creandola como una función almacenada en la base de datos, como se indica a continuación:
Defina la función mediante la siguiente instrucción let. No se requieren permisos.
Importante
Una instrucción let no se puede ejecutar por sí sola. Debe ir seguido de una instrucción de expresión tabular. Para ejecutar un ejemplo de trabajo de geoip_fl()
, vea Ejemplo.
let geoip_fl=(tbl:(*), ip_col:string, country_col:string, state_col:string, city_col:string, longitude_col:string, latitude_col:string)
{
let kwargs = bag_pack('ip_col', ip_col, 'country_col', country_col, 'state_col', state_col, 'city_col', city_col, 'longitude_col', longitude_col, 'latitude_col', latitude_col);
let code= ```if 1:
from sandbox_utils import Zipackage
Zipackage.install('geoip2.zip')
import geoip2.database
ip_col = kargs['ip_col']
country_col = kargs['country_col']
state_col = kargs['state_col']
city_col = kargs['city_col']
longitude_col = kargs['longitude_col']
latitude_col = kargs['latitude_col']
result=df
reader = geoip2.database.Reader(r'C:\\Temp\\GeoLite2-City.mmdb')
def geodata(ip):
try:
gd = reader.city(ip)
geo = pd.Series((gd.country.name, gd.subdivisions.most_specific.name, gd.city.name, gd.location.longitude, gd.location.latitude))
except:
geo = pd.Series((None, None, None, None, None))
return geo
result[[country_col, state_col, city_col, longitude_col, latitude_col]] = result[ip_col].apply(geodata)
```;
tbl
| evaluate python(typeof(*), code, kwargs,
external_artifacts =
pack('geoip2.zip', 'https://artifactswestus.blob.core.windows.net/public/geoip2-4.6.0.zip',
'GeoLite2-City.mmdb', 'https://artifactswestus.blob.core.windows.net/public/GeoLite2-City-20230221.mmdb')
)
};
// Write your query to use the function here.
Ejemplo
En el ejemplo siguiente se usa el operador invoke para ejecutar la función .
Para usar una función definida por la consulta, invoquela después de la definición de función incrustada.
let geoip_fl=(tbl:(*), ip_col:string, country_col:string, state_col:string, city_col:string, longitude_col:string, latitude_col:string)
{
let kwargs = bag_pack('ip_col', ip_col, 'country_col', country_col, 'state_col', state_col, 'city_col', city_col, 'longitude_col', longitude_col, 'latitude_col', latitude_col);
let code= ```if 1:
from sandbox_utils import Zipackage
Zipackage.install('geoip2.zip')
import geoip2.database
ip_col = kargs['ip_col']
country_col = kargs['country_col']
state_col = kargs['state_col']
city_col = kargs['city_col']
longitude_col = kargs['longitude_col']
latitude_col = kargs['latitude_col']
result=df
reader = geoip2.database.Reader(r'C:\\Temp\\GeoLite2-City.mmdb')
def geodata(ip):
try:
gd = reader.city(ip)
geo = pd.Series((gd.country.name, gd.subdivisions.most_specific.name, gd.city.name, gd.location.longitude, gd.location.latitude))
except:
geo = pd.Series((None, None, None, None, None))
return geo
result[[country_col, state_col, city_col, longitude_col, latitude_col]] = result[ip_col].apply(geodata)
```;
tbl
| evaluate python(typeof(*), code, kwargs,
external_artifacts =
pack('geoip2.zip', 'https://artifactswestus.blob.core.windows.net/public/geoip2-4.6.0.zip',
'GeoLite2-City.mmdb', 'https://artifactswestus.blob.core.windows.net/public/GeoLite2-City-20230221.mmdb')
)
};
datatable(ip:string) [
'8.8.8.8',
'20.53.203.50',
'20.81.111.85',
'20.103.85.33',
'20.84.181.62',
'205.251.242.103',
]
| extend country='', state='', city='', longitude=real(null), latitude=real(null)
| invoke geoip_fl('ip','country', 'state', 'city', 'longitude', 'latitude')
Salida
ip | country | estado | city | longitude | latitude |
---|---|---|---|---|---|
20.103.85.33 | Países Bajos | Holanda Septentrional | Ámsterdam | 4.8883 | 52.3716 |
20.53.203.50 | Australia | Nueva Gales del Sur | Sidney | 151.2006 | -33.8715 |
20.81.111.85 | Estados Unidos | Virginia | Tappahannock | -76.8545 | 37.9273 |
20.84.181.62 | Estados Unidos | Iowa | Des Moines | -93.6124 | 41.6021 |
205.251.242.103 | Estados Unidos | Virginia | Ashburn | -77.4903 | 39.0469 |
8.8.8.8 | Estados Unidos | California | Los Angeles | -118.2441 | 34.0544 |