geolite_city_bq_b2数据集的准确性



我认为BigQueryfh-bigquery.geocode.geolite_city_bq_b2数据集中存在不准确之处,很好奇其他人是否也注意到了这一点。

背景:我有Ramtin M.Seraj的BigQuery代码在运行,他/我的逻辑似乎是合理的。然而,已知有代表某些地方的IP地址,例如Tokyo@150.249.199.199.17,但Ramtin的查询表明这些地址位于Rochester NY-USA或Ottawa ON-CA。如果查询逻辑是合理的,那么唯一的结论是底层的Geolite数据集不是。

要进行验证,请查看此查询的结果:

SELECT *
FROM `fh-bigquery.geocode.geolite_city_bq_b2b`
WHERE classB = 38649

从这些结果中注意到,startIp=150.245.0.0和endIp=150.249.255.255,因此地址150.249.199.17在此IP范围内。

现在将结果与https://ipinfo.io/150.249.199.17,以及以下BigQuery的结果。请注意,所有计算的值,如IP地址的IPV4_TO_INT64(),都在上述查询返回的范围内。

SELECT '150.249.199.17' as ipAddress
, NET.IPV4_TO_INT64(NET.IP_FROM_STRING('150.249.199.17')) AS clientIpNum_int
, TRUNC(NET.IPV4_TO_INT64(NET.IP_FROM_STRING('150.249.199.17'))/(256*256)) AS classB
, CAST(TRUNC(NET.IPV4_TO_INT64(NET.IP_FROM_STRING('150.249.199.17'))/(256*256)) as INT64) as client_classB_int

附言:我会对第一个答案投赞成票,或者加一条评论,但我还没有足够的Reputons!

2019,大大改进了答案:

  • https://medium.com/@hoffa/geolocation-with-bigquery-de-identity-7600万ip-地址在20秒内-e9e652480bd2
#standardSQL
# replace with your source of IP addresses
# here I'm using the same Wikipedia set from the previous article
WITH source_of_ip_addresses AS (
SELECT REGEXP_REPLACE(contributor_ip, 'xxx', '0')  ip, COUNT(*) c
FROM `publicdata.samples.wikipedia`
WHERE contributor_ip IS NOT null  
GROUP BY 1
)
SELECT country_name, SUM(c) c
FROM (
SELECT ip, country_name, c
FROM (
SELECT *, NET.SAFE_IP_FROM_STRING(ip) & NET.IP_NET_MASK(4, mask) network_bin
FROM source_of_ip_addresses, UNNEST(GENERATE_ARRAY(9,32)) mask
WHERE BYTE_LENGTH(NET.SAFE_IP_FROM_STRING(ip)) = 4
)
JOIN `fh-bigquery.geocode.201806_geolite2_city_ipv4_locs`  
USING (network_bin, mask)
)
GROUP BY 1
ORDER BY 2 DESC

我即将在BigQuery中发布一个改进版的Geolite。敬请关注https://twitter.com/felipehoffa和https://medium.com/@霍法。然后我也会更新这个答案。

话虽如此,为了回答这个问题的准确性部分,Maxmind说:

GeoLite2数据库是免费的IP地理定位数据库,可与MaxMind的GeoIP2数据库相比,但准确性较低

  • https://dev.maxmind.com/geoip/geoip2/geolite2/

相关内容

  • 没有找到相关文章

最新更新