Compartir a través de


geoip_fl()

Se aplica a: ✅Microsoft FabricAzure 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 .

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