geoip_fl()
geoip_fl()
is een door de gebruiker gedefinieerde functie waarmee geografische gegevens van het IP-adres worden opgehaald.
Notitie
- Gebruik de systeemeigen functie geo_info_from_ip_address() in plaats van de functie die in dit document wordt beschreven. De systeemeigen functie biedt dezelfde functionaliteit en is beter voor prestaties en schaalbaarheid. Dit document wordt uitsluitend ter referentie verstrekt.
- Met deze functie zijn geografische gegevens opgehaald uit GeoLite2-gegevens die zijn gemaakt door MaxMind, beschikbaar via http://www.maxmind.com. Raadpleeg de gebruiksrechtovereenkomst voor GeoLite2.
Vereisten
- De Python-invoegtoepassing moet zijn ingeschakeld op het cluster. Dit is vereist voor de inline Python die in de functie wordt gebruikt.
- De Python-invoegtoepassing moet zijn ingeschakeld voor de database. Dit is vereist voor de inline Python die in de functie wordt gebruikt.
Syntax
T | invoke geoip_fl(
,
ip_col,
country_col,
state_col,
city_col,
longitude_collatitude_col)
Meer informatie over syntaxisconventies.
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
ip_col | string |
✔️ | De naam van de kolom met de IP-adressen die moeten worden omgezet. |
country_col | string |
✔️ | De naam van de kolom voor het opslaan van het opgehaalde land. |
state_col | string |
✔️ | De naam van de kolom voor het opslaan van de opgehaalde status. |
city_col | string |
✔️ | De naam van de kolom voor het opslaan van de opgehaalde plaats. |
longitude_col | real |
✔️ | De naam van de kolom voor het opslaan van de opgehaalde lengtegraad. |
latitude_col | real |
✔️ | De naam van de kolom voor het opslaan van de opgehaalde breedtegraad. |
Functiedefinitie
U kunt de functie als volgt definiëren door de code in te sluiten als een door een query gedefinieerde functie of door deze te maken als een opgeslagen functie in uw database:
Definieer de functie met behulp van de volgende let-instructie. Er zijn geen machtigingen vereist.
Belangrijk
Een let-instructie kan niet zelfstandig worden uitgevoerd. Deze moet worden gevolgd door een tabellaire expressie-instructie. Zie Voorbeeld als u een werkend voorbeeld van geoip_fl()
wilt uitvoeren.
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.
Voorbeeld
In het volgende voorbeeld wordt de operator aanroepen gebruikt om de functie uit te voeren.
Als u een querygedefinieerde functie wilt gebruiken, roept u deze aan na de definitie van de ingesloten functie.
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')
Uitvoer
IP | country | staat | city | lengtegraad | breedtegraad |
---|---|---|---|---|---|
20.103.85.33 | Nederland | North Holland | Amsterdam | 4.8883 | 52.3716 |
20.53.203.50 | Australië | New South Wales | Sydney | 151.2006 | -33.8715 |
20.81.111.85 | Verenigde Staten | Virginia | Tappahannock | -76.8545 | 37.9273 |
20.84.181.62 | Verenigde Staten | Iowa | Des Moines | -93.6124 | 41.6021 |
205.251.242.103 | Verenigde Staten | Virginia | Ashburn | -77.4903 | 39.0469 |
8.8.8.8 | Verenigde Staten | Californië | Los Angeles | -118.2441 | 34.0544 |
Deze functie wordt niet ondersteund.
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor