geoip_fl()
geoip_fl()
to funkcja zdefiniowana przez użytkownika , która pobiera informacje geograficzne o adresie IP.
Uwaga
- Użyj funkcji natywnej geo_info_from_ip_address() zamiast funkcji opisanej w tym dokumencie. Funkcja natywna zapewnia tę samą funkcjonalność i zapewnia lepszą wydajność i skalowalność. Ten dokument jest dostarczany tylko do celów referencyjnych.
- Ta funkcja pobrała dane geograficzne z danych GeoLite2 utworzonych przez maxMind, dostępnych z usługi http://www.maxmind.com. Zapoznaj się z umową licencyjną użytkownika końcowego GeoLite2.
Wymagania wstępne
- Wtyczka języka Python musi być włączona w klastrze. Jest to wymagane dla wbudowanego języka Python używanego w funkcji.
- Wtyczka języka Python musi być włączona w bazie danych. Jest to wymagane dla wbudowanego języka Python używanego w funkcji.
Składnia
T | invoke geoip_fl(
,
ip_col,
country_col,
state_col,
city_col,
longitude_collatitude_col)
Dowiedz się więcej o konwencjach składniowych.
Parametry
Nazwa | Typ | Wymagane | Opis |
---|---|---|---|
ip_col | string |
✔️ | Nazwa kolumny zawierającej adresy IP do rozpoznania. |
country_col | string |
✔️ | Nazwa kolumny do przechowywania pobranego kraju. |
state_col | string |
✔️ | Nazwa kolumny do przechowywania pobranego stanu. |
city_col | string |
✔️ | Nazwa kolumny do przechowywania pobranego miasta. |
longitude_col | real |
✔️ | Nazwa kolumny do przechowywania pobranej długości geograficznej. |
latitude_col | real |
✔️ | Nazwa kolumny do przechowywania pobranej szerokości geograficznej. |
Definicja funkcji
Funkcję można zdefiniować, osadzając kod jako funkcję zdefiniowaną przez zapytanie lub tworząc ją jako funkcję przechowywaną w bazie danych w następujący sposób:
Zdefiniuj funkcję przy użyciu następującej instrukcji let. Nie są wymagane żadne uprawnienia.
Ważne
Instrukcja let nie może być uruchamiana samodzielnie. Należy po nim wykonać instrukcję wyrażenia tabelarycznego. Aby uruchomić działający przykład programu geoip_fl()
, zobacz Przykład.
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.
Przykład
W poniższym przykładzie użyto operatora invoke do uruchomienia funkcji.
Aby użyć funkcji zdefiniowanej przez zapytanie, wywołaj ją po osadzonej definicji funkcji.
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')
Dane wyjściowe
IP | country | stan | city | Długość geograficzna | latitude |
---|---|---|---|---|---|
20.103.85.33 | Holandia | Holandia Północna | Amsterdam | 4.8883 | 52.3716 |
20.53.203.50 | Australia | Nowa Południowa Walia | Sydney | 151.2006 | -33.8715 |
20.81.111.85 | Stany Zjednoczone | Wirginia | Tappahannock | -76.8545 | 37.9273 |
20.84.181.62 | Stany Zjednoczone | Iowa | Des Moines | -93.6124 | 41.6021 |
205.251.242.103 | Stany Zjednoczone | Wirginia | Ashburn | -77.4903 | 39.0469 |
8.8.8.8 | Stany Zjednoczone | Kalifornia | Los Angeles | -118.2441 | 34.0544 |
Ta funkcja nie jest obsługiwana.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla