簡體   English   中英

geolite_city_bq_b2數據集的准確性

[英]Accuracy of the geolite_city_bq_b2 dataset

我認為BigQuery fh-bigquery.geocode.geolite_city_bq_b2數據集中存在不准確之處,並且很好奇是否有人也注意到了這一點。

背景:我正在運行Ramtin M. Seraj的BigQuery代碼,他/我的邏輯似乎很合理。 但是,有些IP地址已知代表某些地方,例如Tokyo @ 150.249.199.17,但Ramtin的查詢指出這些IP地址位於紐約的羅切斯特或美國的渥太華。 如果查詢邏輯合理,那么唯一的結論就是基礎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

ps我會投票贊成第一個答案,或添加評論,但我的Reputons還不夠!

2019,大大改善的答案

#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/felipehoffahttps://medium.com/@hoffa 然后我也會更新此答案。

如此說來,為了回答標題這個問題的准確性部分,Maxmind說:

GeoLite2數據庫是免費的IP地理位置數據庫,可與MaxMind的GeoIP2數據庫相比,但准確性較差

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM