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

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

重要

在日志服务分析语句中,表示字符串的字符必须使用单引号('')包裹,无符号包裹或被双引号("")包裹的字符表示字段名或列名。例如:'status'表示字符串status,status"status"表示日志字段status。

函数类型

函数名称

语法

说明

支持SQL

支持SPL

IPv4地址函数

ip_to_city函数

ip_to_city(x)

分析目标IPv4地址所属城市。

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

×

ip_to_city(x, 'en')

分析目标IPv4地址所属城市。

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

×

ip_to_city_geo函数

ip_to_city_geo(x)

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

×

ip_to_country函数

ip_to_country(x)

分析目标IPv4地址所属国家或地区。

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

×

ip_to_country(x, 'en')

分析目标IPv4地址所属国家或地区。

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

×

ip_to_country_code函数

ip_to_country_code(x)

分析目标IPv4地址所属国家或地区。

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

×

ip_to_domain函数

ip_to_domain(x)

判断目标IPv4地址是内网地址还是外网地址。

×

ip_to_geo函数

ip_to_geo(x)

分析目标IPv4地址所在位置的经纬度。

×

ip_to_provider函数

ip_to_provider(x)

分析目标IPv4地址所对应的网络运营商。

×

ip_to_province函数

ip_to_province(x)

分析目标IPv4地址所属省份

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

×

ip_to_province(x, 'en')

分析目标IPv4地址所属省份

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

×

IPv4网段函数

ip_prefix函数

ip_prefix(x, prefix_bits)

获取目标IPv4地址的前缀。

×

is_prefix_subnet_of函数

is_prefix_subnet_of(x, y)

判断目标IPv4网段是否为某网段的子网。

×

is_subnet_of函数

is_subnet_of(x, y)

判断目标IPv4地址是否在某网段内。

×

ip_subnet_max函数

ip_subnet_max(x)

获取IPv4网段中的最大IP地址。

×

ip_subnet_min函数

ip_subnet_min(x)

获取IPv4网段中的最小IP地址。

×

ip_subnet_range函数

ip_subnet_range(x)

获取IPv4网段范围。

×

IPv6地址函数

ipv6_to_city函数

ipv6_to_city(x)

分析目标IPv6地址所属城市的名称。

×

ipv6_to_city_code函数

ipv6_to_city_code(x)

分析目标IPv6地址所属城市的行政区划代码。

×

ipv6_to_city_geo函数

ipv6_to_city_geo(x)

分析目标IPv6地址所属城市的经纬度。

×

ipv6_to_country函数

ipv6_to_country(x)

分析目标IPv6地址所属国家或地区。

×

ipv6_to_country_code函数

ipv6_to_country_code(x)

分析目标IPv6地址所属国家或地区的代码。

×

ipv6_to_domain函数

ipv6_to_domain(x)

判断目标IPv6地址是内网地址还是外网地址。

×

ipv6_to_provider函数

ipv6_to_provider(x)

分析目标IPv6地址所对应的网络运营商。

×

ipv6_to_province函数

ipv6_to_province(x)

分析目标IPv6地址所属省份。

×

ipv6_to_province_code函数

ipv6_to_province_code(x)

分析目标IPv6地址所属省份的行政区划代码。

×

ip_to_city函数

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

语法

  • 返回城市的中文名称。

    ip_to_city(x)
  • 返回城市的行政区划代码。

    ip_to_city(x,'en')

参数说明

参数

说明

x

参数值为IPv4地址。

返回值类型

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函数用于分析目标IPv4地址所属城市的经纬度。此函数返回的是城市经纬度,每个城市只有一个经纬度。

语法

ip_to_city_geo(x)

参数说明

参数

说明

x

参数值为IPv4地址。

返回值类型

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

示例

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

  • 查询和分析语句

    * |
    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函数用于分析目标IPv4地址所属国家或地区。

语法

  • 返回国家或地区的中文名称。

    ip_to_country(x)
  • 返回国家或地区的代码。

    ip_to_country(x,'en')

参数说明

参数

说明

x

参数值为IPv4地址。

返回值类型

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函数用于分析目标IPv4地址所属国家或地区,返回国家或地区的代码。

语法

ip_to_country_code(x)

参数说明

参数

说明

x

参数值为IPv4地址。

返回值类型

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函数用于判断目标IPv4地址是内网地址还是外网地址。

语法

ip_to_domain(x)

参数说明

参数

说明

x

参数值为IPv4地址。

返回值类型

varchar类型,返回intranet或internet。

  • intranet表示内网。

  • internet表示外网。

示例

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

  • 查询和分析语句

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

ip_to_geo函数

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

语法

ip_to_geo(x)

参数说明

参数

说明

x

参数值为IPv4地址。

返回值类型

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

示例

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

  • 查询和分析语句

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

ip_to_provider函数

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

语法

ip_to_provider(x)

参数说明

参数

说明

x

参数值为IPv4地址。

返回值类型

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函数分析目标IPv4地址所属省份

语法

  • 返回省份的中文名称。

    ip_to_province(x)
  • 返回省份的行政区划代码。

    ip_to_province(x,'en')

参数说明

参数

说明

x

参数值为IPv4地址。

返回值类型

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函数用于获取目标IPv4地址的前缀。返回子网掩码格式的IPv4地址,例如192.168.1.0/24。

语法

ip_prefix(x, prefix_bits)

参数说明

参数

说明

x

参数值为IPv4地址。

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(x, y)

参数说明

参数

说明

x

参数值为IPv4网段。y网段是否属于x网段内。

y

参数值为IPv4网段。

返回值类型

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函数用于判断目标IPv4地址是否在某网段内。

语法

is_subnet_of(x, y)

参数说明

参数

说明

x

参数值为IPv4网段。

y

参数值为IPv4地址。

返回值类型

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函数用于获取IPv4网段中的最小IP地址。

语法

ip_subnet_min(x)

参数说明

参数

说明

x

参数值为IPv4网段。

返回值类型

varchar类型。

示例

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

  • 查询和分析语句

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

ip_subnet_max函数

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

语法

ip_subnet_max(x)

参数说明

参数

说明

x

参数值为IPv4网段。

返回值类型

varchar类型。

示例

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

  • 查询和分析语句

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

ip_subnet_range函数

ip_subnet_range用于获取IPv4网段范围。

语法

ip_subnet_range(x)

参数说明

参数

说明

x

参数值为IPv4网段。

返回值类型

JSON类型。

示例

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

  • 查询和分析语句

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

ipv6_to_city函数

ipv6_to_city函数用于分析目标IPv6地址所属城市的名称。

语法

ipv6_to_city(x)

参数说明

参数

说明

x

参数值为IPv6的地址。

返回值类型

varchar类型

示例

统计不同城市请求的数量。

  • 查询和分析语句

    * |
    SELECT
      ipv6_to_city(ipv6Address) AS city,
      count(*) AS count
    GROUP BY
      city
  • 查询和分析结果ipv6_to_city

ipv6_to_city_code函数

ipv6_to_city_code函数用于分析目标IPv6地址所属城市的行政区划代码。

语法

ipv6_to_city_code(x)

参数说明

参数

说明

x

参数值为IPv6的地址。

返回值类型

varchar类型

示例

获取IPv6对应城市的行政区划代码。

  • 查询和分析语句

    * |
    SELECT
      ipv6Address,
      ipv6_to_city_code(ipv6Address) AS cityCode
    WHERE
      cityCode <> ''
  • 查询和分析结果ipv6_to_city_code

ipv6_to_city_geo函数

ipv6_to_city_geo函数用于分析目标IPv6地址所属城市的经纬度。

语法

ipv6_to_city_geo(x)

参数说明

参数

说明

x

参数值为IPv6的地址。

返回值类型

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

示例

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

  • 查询和分析语句

    * |
    SELECT
      ipv6_to_city_geo(ipv6Address) AS geo,
      count(*) AS PV
    GROUP BY
      geo
    ORDER BY
      PV DESC
  • 查询和分析结果ipv6_to_city_geo

ipv6_to_country函数

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

语法

ipv6_to_country(x)

参数说明

参数

说明

x

参数值为IPv6的地址。

返回值类型

varchar类型

示例

统计请求总数Top10的国家或地域。

  • 查询和分析语句

    * |
    SELECT
      count(*) AS PV,
      ipv6_to_country(ipv6Address) AS country
    WHERE
      country <> ''
    GROUP BY
      country
    ORDER BY
      PV DESC
    LIMIT
      10
  • 查询和分析结果ipv6_to_country

ipv6_to_country_code函数

ipv6_to_country_code函数用于分析目标IPv6地址所属国家或地区的代码。

语法

ipv6_to_country_code(x)

参数说明

参数

说明

x

参数值为IPv6的地址。

返回值类型

varchar类型

示例

获取IPv6地址所属国家或地区的代码。

  • 查询和分析语句

    * |
    SELECT
      ipv6Address,
      ipv6_to_country_code(ipv6Address) AS code
    WHERE
      cityCode <> ''
  • 查询和分析结果ipv6_to_country_code

ipv6_to_domain函数

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

语法

ipv6_to_domain(x)

参数说明

参数

说明

x

参数值为IPv6的地址。

返回值类型

varchar类型,返回intranet或internet。

  • intranet表示内网。

  • internet表示外网。

示例

统计内外网请求的总数。

  • 查询和分析语句

    * |
    SELECT
      ipv6_to_domain(ipv6Address) AS domain,
      count(*) AS count
    GROUP BY
      domain
  • 查询和分析结果ipv6_to_domain

ipv6_to_provider函数

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

语法

ipv6_to_provider(x)

参数说明

参数

说明

x

参数值为IPv6的地址。

返回值类型

varchar类型

示例

统计请求总数Top10的网络运营商。

  • 查询和分析语句

    * |
    SELECT
      ipv6_to_provider(ipv6Address) AS provider,
      count(*) AS count
    GROUP BY
      provider
    ORDER BY
      count DESC
    LIMIT
      10
  • 查询和分析结果ipv6_to_provider

ipv6_to_province函数

ipv6_to_province函数用于分析目标IPv6地址所属省份。

语法

ipv6_to_province(x)

参数说明

参数

说明

x

参数值为IPv6的地址。

返回值类型

varchar类型

示例

统计请求总数Top10的省份。

  • 查询和分析语句

    * |
    SELECT
      count(*) AS PV,
      ipv6_to_province(ipv6Address) AS province
    WHERE
      province <> ''
    GROUP BY
      province
    ORDER BY
      PV DESC
    LIMIT
      10
  • 查询和分析结果ipv6_to_province

ipv6_to_province_code函数

ipv6_to_province_code函数用于分析目标IPv6地址所属省份的行政区划代码。

语法

ipv6_to_province_code(x)

参数说明

参数

说明

x

参数值为IPv6的地址。

返回值类型

varchar类型

示例

获取IPv6地址所属省份的行政区划代码。

  • 查询和分析语句

    * |
    SELECT
      ipv6Address,
      ipv6_to_province_code(ipv6Address) AS code
    WHERE
      cityCode <> ''
  • 查询和分析结果ipv6_to_province_code