geoip_fl()
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer
geoip_fl()
ist eine benutzerdefinierte Funktion , die geografische Informationen der IP-Adresse abruft.
Hinweis
- Verwenden Sie die systemeigene Funktion geo_info_from_ip_address() anstelle der in diesem Dokument beschriebenen Funktion. Die systemeigene Funktion bietet die gleiche Funktionalität und ist besser für Leistung und Skalierbarkeit. Dieses Dokument wird nur zu Referenzzwecken bereitgestellt.
- Diese Funktion hat geografische Daten aus GeoLite2-Daten abgerufen, die von MaxMind erstellt wurden, verfügbar von http://www.maxmind.com. Bitte lesen Sie den GeoLite2-Endbenutzer-Lizenzvertrag.
Voraussetzungen
- Das Python-Plug-In muss im Cluster aktiviert sein. Dies ist für die inline Python erforderlich, die in der Funktion verwendet wird.
- Das Python-Plug-In muss in der Datenbank aktiviert sein. Dies ist für die inline Python erforderlich, die in der Funktion verwendet wird.
Syntax
T | invoke geoip_fl(
,
ip_col country_col ,
state_col ,
city_col,
longitude_col latitude_col,
)
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
Name | Type | Erforderlich | Beschreibung |
---|---|---|---|
ip_col | string |
✔️ | Der Name der Spalte, die die zu auflösenden IP-Adressen enthält. |
country_col | string |
✔️ | Der Name der Spalte, in der das abgerufene Land gespeichert werden soll. |
state_col | string |
✔️ | Der Name der Spalte zum Speichern des abgerufenen Zustands. |
city_col | string |
✔️ | Der Name der Spalte zum Speichern der abgerufenen Stadt. |
longitude_col | real |
✔️ | Der Name der Spalte zum Speichern des abgerufenen Längengrads. |
latitude_col | real |
✔️ | Der Name der Spalte zum Speichern des abgerufenen Breitengrads. |
Funktionsdefinition
Sie können die Funktion definieren, indem Sie den Code entweder als abfragedefinierte Funktion einbetten oder wie folgt als gespeicherte Funktion in Ihrer Datenbank erstellen:
Definieren Sie die Funktion mithilfe der folgenden Let-Anweisung. Es sind keine Berechtigungen erforderlich.
Wichtig
Eine Let-Anweisung kann nicht alleine ausgeführt werden. Auf sie muss eine tabellarische Ausdrucksanweisung folgen. Informationen zum Ausführen eines funktionierenden Beispiels geoip_fl()
finden Sie unter Beispiel.
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.
Beispiel
Im folgenden Beispiel wird der Aufrufoperator verwendet, um die Funktion auszuführen.
Um eine abfragedefinierte Funktion zu verwenden, rufen Sie sie nach der definition der eingebetteten Funktion auf.
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')
Output
ip | country | state | city | longitude | latitude |
---|---|---|---|---|---|
20.103.85.33 | Niederlande | North Holland | Amsterdam | 4.8883 | 52.3716 |
20.53.203.50 | Australien | Neusüdwales | Sydney | 151.2006 | -33.8715 |
20.81.111.85 | USA | Virginia | Tappahannock | -76.8545 | 37.9273 |
20.84.181.62 | USA | Iowa | Des Moines | -93.6124 | 41.6021 |
205.251.242.103 | USA | Virginia | Ashburn | -77.4903 | 39.0469 |
8.8.8.8 | USA | Kalifornien | Los Angeles | -118.2441 | 34.0544 |