geoip_fl()
geoip_fl()
je uživatelem definovaná funkce , která načítá geografické informace IP adresy.
Poznámka
- Místo funkce popsané v tomto dokumentu použijte nativní funkci geo_info_from_ip_address( ). Nativní funkce poskytuje stejné funkce a je lepší z hlediska výkonu a škálovatelnosti. Tento dokument je k dispozici pouze pro referenční účely.
- Tato funkce načetla geografická data z dat GeoLite2 vytvořených nástrojem MaxMind, která jsou k dispozici z http://www.maxmind.com. Přečtěte si prosím licenční smlouvu s koncovým uživatelem GeoLite2.
Požadavky
- V clusteru musí být povolený modul plug-in Pythonu. To se vyžaduje pro vložený Python použitý ve funkci.
- V databázi musí být povolený modul plug-in Pythonu. To se vyžaduje pro vložený Python použitý ve funkci.
Syntax
T | invoke geoip_fl(
,
ip_col,
country_col,
state_col,
city_col,
longitude_collatitude_col)
Přečtěte si další informace o konvencích syntaxe.
Parametry
Název | Typ | Vyžadováno | Popis |
---|---|---|---|
ip_col | string |
✔️ | Název sloupce obsahujícího IP adresy, které se mají přeložit. |
country_col | string |
✔️ | Název sloupce pro uložení načtené země. |
state_col | string |
✔️ | Název sloupce pro uložení načteného stavu. |
city_col | string |
✔️ | Název sloupce pro uložení načteného města. |
longitude_col | real |
✔️ | Název sloupce pro uložení načtené zeměpisné délky. |
latitude_col | real |
✔️ | Název sloupce pro uložení načtené zeměpisné šířky. |
Definice funkce
Funkci můžete definovat tak, že buď vložíte její kód jako funkci definovanou dotazem, nebo ji vytvoříte jako uloženou funkci v databázi, a to následujícím způsobem:
Definujte funkci pomocí následujícího příkazu let. Nejsou vyžadována žádná oprávnění.
Důležité
Příkaz let nemůže běžet samostatně. Za ním musí následovat příkaz tabulkového výrazu. Pokud chcete spustit funkční příklad , geoip_fl()
podívejte se na příklad.
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.
Příklad
Následující příklad používá operátor invoke ke spuštění funkce.
Pokud chcete použít funkci definovanou dotazem, vyvoláte ji po definici vložené funkce.
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')
Výstup
Ip | country | state | city | Délky | zeměpisná šířka |
---|---|---|---|---|---|
20.103.85.33 | Nizozemsko | North Holland | Amsterdam | 4.8883 | 52.3716 |
20.53.203.50 | Austrálie | New South Wales | 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 | California | Los Angeles | -118.2441 | 34.0544 |
Tato funkce není podporovaná.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro