Точность набора данных geolite_city_bq_b2 - PullRequest
0 голосов
/ 24 января 2019

Я считаю, что в наборе данных BigQuery fh-bigquery.geocode.geolite_city_bq_b2 есть неточности, и мне любопытно, если бы другие тоже это заметили.

Справочная информация: У меня есть код BigQuery от РамтинМ. Серадж бежит, и его / моя логика кажется здоровой.Однако существуют IP-адреса, которые, как известно, представляют определенные места, например, Токио, 150.249.199.17, но которые указаны в запросе Рамтина в Рочестере, штат Нью-Йорк или в Оттаве, штат Калифорния.Если логика запроса является надежной, то единственный вывод состоит в том, что базовый набор данных 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.Обратите внимание, что все вычисленные значения, такие как IPV4_TO_INT64 () IP-адреса, попадают в диапазоны, возвращаемые запросом выше.

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 Я бы поднял первый ответ или добавил бы комментарий, но яРепутонов пока не хватает!

1 Ответ

0 голосов
/ 25 января 2019

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

Я собираюсь опубликовать значительно улучшенную версию Geolite в BigQuery. Оставайтесь с нами на https://twitter.com/felipehoffa и https://medium.com/@hoffa. И я тоже обновлю этот ответ.

С учетом сказанного, чтобы ответить на вопрос о точности, который задает этот вопрос, Максминд говорит:

Базы данных GeoLite2 - это бесплатные базы данных геолокации IP, сравнимые, но менее точные, чем базы данных MaxMind GeoIP2

...