IP地理函数可用于判断IP地址属于内网还是外网,也可用于分析IP地址所属的国家、省份、城市。本文介绍IP地理函数的基本语法及示例。

函数语法

说明 如下函数中的KEY参数表示日志字段(例如client_ip),其值必须为IP地址。
函数名称 说明 示例
ip_to_domain(KEY) 判断目标IP地址是内网地址还是外网地址。
返回结果为intranetinternet
  • intranet表示内网。
  • internet表示外网。
* | SELECT ip_to_domain(client_ip)
ip_to_country(KEY) 分析目标IP地址所属国家或地区。

返回结果为国家或地区的中文名称。

* | SELECT ip_to_country(client_ip)
ip_to_country(KEY,'en') 分析目标IP地址所属国家或地区。

返回结果为国家或地区的代码。

* | SELECT ip_to_country(client_ip,'en')
ip_to_country_code(KEY) 分析目标IP地址所属国家或地区。

返回结果为国家或地区的代码。

* | SELECT ip_to_country_code(client_ip)
ip_to_province(KEY) 分析目标IP地址所属省份

返回结果为省份的中文名称。

* | SELECT ip_to_province(client_ip)
ip_to_province(KEY,'en') 分析目标IP地址所属省份

返回结果为省份的行政区划代码。

* | SELECT ip_to_province(client_ip,'en')
ip_to_city(KEY) 分析目标IP地址所属城市。

返回结果为城市的中文名称。

* | SELECT ip_to_city(client_ip)
ip_to_city(KEY,'en') 分析目标IP地址所属城市。

返回结果为城市的行政区划代码。

* | SELECT ip_to_city(client_ip,'en')
ip_to_geo(KEY) 分析目标IP地址所在位置的经纬度。

返回结果格式为纬度,经度

关于geohash函数的详细信息,请参见地理函数

* | SELECT ip_to_geo(client_ip)
ip_to_city_geo(KEY) 分析目标IP地址所属城市的经纬度。此函数返回的是城市经纬度,每个城市只有一个经纬度。

返回结果格式为纬度,经度

* | SELECT ip_to_city_geo(client_ip)
ip_to_provider(KEY) 分析目标IP地址对应的网络运营商。

返回结果为网络运营商名称。

* | SELECT ip_to_provider(client_ip)

示例

此处列举了IP地理函数在不同场景下的查询和分析示例。您在执行查询和分析操作后,还可以选择合适的统计图表展示查询和分析结果。
说明 如下示例中的client_iplatencyrequestId为日志字段。
  • 统计不是来自内网的请求总数。
    * | SELECT count(*) AS PV where ip_to_domain(client_ip)!='intranet'
    不来自内网的请求
  • 统计请求总数Top10的省份
    * | SELECT count(*) as PV, ip_to_province(client_ip) AS province GROUP BY province ORDER BY PV desc LIMIT 10
    top10省份
    如果上述结果中包含了内网请求,且您希望过滤这部分请求,可参考如下查询和分析语句。
    * | SELECT count(*) AS PV, ip_to_province(client_ip) AS province WHERE ip_to_domain(client_ip) != 'intranet'  GROUP BY province ORDER BY PV DESC LIMIT 10
  • 统计不同国家(地区)的平均响应延时、最大响应延时以及最大延时对应的请求。
    * | SELECT AVG(latency) AS avg_latency, MAX(latency) AS max_latency, MAX_BY(requestId, latency) AS requestId, ip_to_country(client_ip) AS country GROUP BY country
    延时情况
  • 统计不同网络运营商的平均延时。
    * | SELECT AVG(latency) AS avg_latency, ip_to_provider(client_ip) AS provider GROUP BY provider ORDER BY avg_latency
    运营商延时
  • 统计IP地址的经纬度,确认客户端分布情况。
    * | SELECT count(*) AS PV , ip_to_geo(client_ip) AS geo GROUP BY geo ORDER BY PV DESC
    客户端分布