geoip_fl()
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer
geoip_fl()
é uma função definida pelo usuário que recupera informações geográficas do endereço IP.
Observação
- Use a função nativa geo_info_from_ip_address() em vez da função descrita neste documento. A função nativa fornece a mesma funcionalidade e é melhor para desempenho e escalabilidade. Este documento é fornecido apenas para fins de referência.
- Esta função recuperou dados geográficos de dados GeoLite2 criados por MaxMind, disponíveis em http://www.maxmind.com. Por favor, revise o Contrato de Licença de Usuário Final do GeoLite2.
Pré-requisitos
- O plug-in Python deve ser habilitado no cluster. Isso é necessário para o Python embutido usado na função.
- O plug-in Python deve estar habilitado no banco de dados. Isso é necessário para o Python embutido usado na função.
Sintaxe
T | invoke geoip_fl(
,
ip_col country_col ,
state_col ,
city_col,
longitude_col latitude_col,
)
Saiba mais sobre as convenções de sintaxe.
Parâmetros
Nome | Digitar | Obrigatória | Descrição |
---|---|---|---|
ip_col | string |
✔️ | O nome da coluna que contém os endereços IP a serem resolvidos. |
country_col | string |
✔️ | O nome da coluna para armazenar o país recuperado. |
state_col | string |
✔️ | O nome da coluna para armazenar o estado recuperado. |
city_col | string |
✔️ | O nome da coluna para armazenar a cidade recuperada. |
longitude_col | real |
✔️ | O nome da coluna para armazenar a longitude recuperada. |
latitude_col | real |
✔️ | O nome da coluna para armazenar a latitude recuperada. |
Definição de função
Você pode definir a função inserindo seu código como uma função definida por consulta ou criando-a como uma função armazenada em seu banco de dados, da seguinte maneira:
Defina a função usando a instrução let a seguir. Nenhuma permissão é necessária.
Importante
Uma instrução let não pode ser executada sozinha. Ele deve ser seguido por uma instrução de expressão tabular. Para executar um exemplo funcional de geoip_fl()
, consulte Exemplo.
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.
Exemplo
O exemplo a seguir usa o operador invoke para executar a função.
Para usar uma função definida por consulta, invoque-a após a definição da função inserida.
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')
Saída
ip | country | estado | city | longitude | latitude |
---|---|---|---|---|---|
20.103.85.33 | Países Baixos | Norte da Holanda | Amsterdã | 4.8883 | 52.3716 |
20.53.203.50 | Austrália | Nova Gales do Sul | Sydney | 151.2006 | -33.8715 |
20.81.111.85 | Estados Unidos | Virgínia | Tappahannock | -76.8545 | 37.9273 |
20.84.181.62 | Estados Unidos | Iowa | Des Moines | -93.6124 | 41.6021 |
205.251.242.103 | Estados Unidos | Virgínia | Ashburn | -77.4903 | 39.0469 |
8.8.8.8 | Estados Unidos | Califórnia | Los Angeles | -118.2441 | 34.0544 |