本文介绍IP地理函数的基本语法及示例。

日志服务支持如下IP地理函数。

说明
  • 日志服务IP地理函数数据来源于淘宝IP地址库
  • 在日志服务分析语句中,表示字符串的字符必须使用单引号('')包裹,无符号包裹或被双引号("")包裹的字符表示字段名或列名。例如:'status'表示字符串status,status"status"表示日志字段status。
类型 函数名称 语法 说明
IP地址函数 ip_to_city函数 ip_to_city(key) 分析目标IP地址所属城市。

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

ip_to_city(key,'en') 分析目标IP地址所属城市。

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

ip_to_city_geo函数 ip_to_city_geo(key) 分析目标IP地址所属城市的经纬度。此函数返回的是城市经纬度,每个城市只有一个经纬度。
ip_to_country函数 ip_to_country(key) 分析目标IP地址所属国家或地区。

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

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

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

ip_to_country_code函数 ip_to_country_code(key) 分析目标IP地址所属国家或地区。

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

ip_to_domain函数 ip_to_domain(key) 判断目标IP地址是内网地址还是外网地址。
ip_to_geo函数 ip_to_geo(key) 分析目标IP地址所在位置的经纬度。
ip_to_provider函数 ip_to_provider(key) 分析目标IP地址所对应的网络运营商。
ip_to_province函数 ip_to_province(key) 分析目标IP地址所属省份

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

ip_to_province(key,'en') 分析目标IP地址所属省份

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

IP网段函数 ip_prefix函数 ip_prefix(key,prefix_bits) 获取目标IP地址的前缀。
is_prefix_subnet_of函数 is_prefix_subnet_of('IP网段',key) 判断目标网段是否为某网段的子网。
is_subnet_of函数 is_subnet_of('IP网段',key) 判断目标IP地址是否在某网段内。
ip_subnet_max函数 ip_subnet_max(key) 获取IP网段中的最大IP地址。
ip_subnet_min函数 ip_subnet_min(key) 获取IP网段中的最小IP地址。
ip_subnet_range函数 ip_subnet_range(key) 获取IP网段范围。

ip_to_city函数

ip_to_city函数用于分析目标IP地址所属城市。

语法

  • 返回城市的中文名称。
    ip_to_city(key)
  • 返回城市的行政区划代码。
    ip_to_city(key,'en')

参数说明

key:字段名称,字段值为IP地址。

返回值类型

varchar类型。

示例

统计来自不同城市的请求的平均时间、最大时间以及最大时间对应的请求ID。

  • 查询和分析语句
    * |
    SELECT
      AVG(request_time) AS avg_request_time,
      MAX(request_time) AS max_request_time,
      MAX_BY(requestId, request_time) AS requestId,
      ip_to_city(client_ip) AS city
    GROUP BY
      city
  • 查询和分析结果ip_to_city

ip_to_city_geo函数

ip_to_city_geo函数用于分析目标IP地址所属城市的经纬度。此函数返回的是城市经纬度,每个城市只有一个经纬度。

语法

ip_to_city_geo(key)

参数说明

key:字段名称,字段值为IP地址。

返回值类型

varchar类型,格式为纬度,经度

示例

统计IP地址的经纬度,确认客户端分布情况。

  • 查询和分析语句
    * |
    SELECT
      count(*) AS PV,
      ip_to_city_geo(client_ip) AS geo
    GROUP BY
      geo
    ORDER BY
      PV DESC
  • 查询和分析结果ip_to_city_geo

ip_to_country函数

ip_to_country函数用于分析目标IP地址所属国家或地区。

语法

  • 返回国家或地区的中文名称。
    ip_to_country(key)
  • 返回国家或地区的代码。
    ip_to_country(key,'en')

参数说明

key:字段名称,字段值为IP地址。

返回值类型

varchar类型。

示例

统计来自不同国家或地区的请求的平均时间、最大时间以及最大时间对应的请求ID。

  • 查询和分析语句
    * |
    SELECT
      AVG(request_time) AS avg_request_time,
      MAX(request_time) AS max_request_time,
      MAX_BY(requestId, request_time) AS requestId,
      ip_to_country(client_ip) AS country
    GROUP BY
      country
  • 查询和分析结果延时情况

ip_to_country_code函数

ip_to_country_code函数用于分析目标IP地址所属国家或地区,返回国家或地区的代码。

语法

ip_to_country_code(key)

参数说明

key:字段名称,字段值为IP地址。

返回值类型

varchar类型。

示例

统计来自不同国家或地区的请求的平均时间、最大时间以及最大时间对应的请求ID。

  • 查询和分析语句
    * |
    SELECT
      AVG(request_time) AS avg_request_time,
      MAX(request_time) AS max_request_time,
      MAX_BY(requestId, request_time) AS requestId,
      ip_to_country_code(client_ip) AS country
    GROUP BY
      country
  • 查询和分析结果ip_to_country_code

ip_to_domain函数

ip_to_domain函数用于判断目标IP地址是内网地址还是外网地址。

语法

ip_to_domain(key)

参数说明

key:字段名称,字段值为IP地址。

返回值类型

varchar类型,返回intranet或internet。
  • intranet表示内网。
  • internet表示外网。

示例

统计不是来自内网的请求总数。

  • 查询和分析语句
    * | SELECT count(*) AS PV where ip_to_domain(client_ip)!='intranet'
  • 查询和分析结果不来自内网的请求

ip_to_geo函数

ip_to_geo函数用于分析目标IP地址所在位置的经纬度。关于geohash函数的详细信息,请参见地理函数

语法

ip_to_geo(key)

参数说明

key:字段名称,

返回值类型

varchar类型,格式为纬度,经度

示例

统计IP地址的经纬度,确认客户端分布情况。

  • 查询和分析语句
    * |
    SELECT
      count(*) AS PV,
      ip_to_geo(client_ip) AS geo
    GROUP BY
      geo
    ORDER BY
      PV DESC
  • 查询和分析结果客户端分布

ip_to_provider函数

ip_to_provider函数用于分析目标IP地址对应的网络运营商。

语法

ip_to_provider(key)

参数说明

key:字段名称,字段值为IP地址。

返回值类型

varchar类型。

示例

统计通过不同网络运营商发起的请求的平均请求时间。

  • 查询和分析语句
    * |
    SELECT
      avg(request_time) AS avg_request_time,
      ip_to_provider(client_ip) AS provider
    GROUP BY
      provider
    ORDER BY
      avg_request_time
  • 查询和分析结果运营商延时

ip_to_province函数

ip_to_province函数分析目标IP地址所属省份。

语法

  • 返回省份的中文名称。
    ip_to_province(key)
  • 返回省份的行政区划代码。
    ip_to_province(key,'en')

参数说明

key:字段名称,字段值为IP地址。

返回值类型

varchar类型。

示例

统计请求总数Top10的省份

  • 查询和分析语句
    * | SELECT count(*) as PV, ip_to_province(client_ip) AS province GROUP BY province ORDER BY PV desc LIMIT 10
    如果上述结果中包含了内网请求,且您希望过滤这部分请求,可参考如下查询和分析语句。
    * | 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
  • 查询和分析结果top10省份

ip_prefix函数

ip_prefix函数用于获取目标IP地址的前缀。返回子网掩码格式的IP地址,例如192.168.1.0/24。

语法

ip_prefix(key,prefix_bits)

参数说明

  • key:字段名称,字段值为IP地址。
  • prefix_bits:前缀位数。

返回值类型

varchar类型。

示例

获取client_ip字段值的IP地址前缀。

  • 查询和分析语句
    * | SELECT ip_prefix(client_ip,24) AS client_ip
  • 查询和分析结果ip_prefix

is_prefix_subnet_of函数

is_prefix_subnet_of函数用于判断目标网段是否为某网段的子网。

语法

is_prefix_subnet_of('IP网段',key)

参数说明

key:字段名称,字段值为IP网段。

返回值类型

boolean类型。

示例

判断client_ip字段值所在网段是否属于192.168.0.1/24网段内。

  • 查询和分析语句
    * | SELECT is_prefix_subnet_of('192.168.0.1/24',concat(client_ip,'/24'))
  • 查询和分析结果is_subnet_of

is_subnet_of函数

is_subnet_of函数用于判断目标IP地址是否在某网段内。

语法

is_subnet_of('IP网段',key)

参数说明

key:字段名称,字段值为IP地址。

返回值类型

boolean类型。

示例

判断client_ip字段值是否属于192.168.0.1/24网段内。

  • 查询和分析语句
    * | SELECT is_subnet_of('192.168.0.1/24',client_ip)
  • 查询和分析结果is_subnet_of

ip_subnet_min函数

ip_subnet_min函数用于获取IP网段中的最小IP地址。

语法

ip_subnet_min(key)

参数说明

key:字段名称,字段值为IP网段。

返回值类型

varchar类型。

示例

获取client_ip字段值所在网段的最小IP地址。

  • 查询和分析语句
    * | SELECT ip_subnet_min(concat(client_ip,'/24'))
  • 查询和分析结果ip_subnet_min

ip_subnet_max函数

ip_subnet_max函数用于获取IP网段中最大IP地址。

语法

ip_subnet_max(key)

参数说明

vac

key:字段名称,字段值为IP网段。

返回值类型

varchar类型。

示例

获取client_ip字段值所在网段的最大IP地址。

  • 查询和分析语句
    * | SELECT ip_subnet_max(concat(client_ip,'/24'))
  • 查询和分析结果ip_subnet_max

ip_subnet_range函数

ip_subnet_range用于获取IP网段范围。

语法

ip_subnet_range(key)

参数说明

key:字段名称,字段值为IP网段。

返回值类型

JSON类型。

示例

获取client_ip字段值所在网段的范围。

  • 查询和分析语句
    * | SELECT ip_subnet_range(concat(client_ip,'/24'))
  • 查询和分析结果ip_subnet_range