IP函数

更新时间:
复制 MD 格式

本文介绍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
  • 查询和分析结果返回3条记录,分别对应天津市(avg_request_time44.85,max_request_time80.0,requestIdi-02)、丽江市(avg_request_time46.47,max_request_time80.0,requestIdi-01)和鹤岗市(avg_request_time43.87,max_request_time80.0,requestIdi-01)。

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
  • 查询和分析结果如下。查询结果返回两行数据:第一行 PV 为 9113,geo 为 39.9288,116.389(对应北京地区);第二行 PV 为 5784,geo 为 31.2222,121.458060(对应上海地区)。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
  • 查询和分析结果。查询结果返回3行数据:中国香港的 avg_request_time45.27、max_request_time80.0、requestIdi-02;澳大利亚的 avg_request_time47.08、max_request_time80.0、requestIdi-01;印度的 avg_request_time39.39、max_request_time77.0、requestIdi-01。

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
  • 查询和分析结果返回两行数据:第一行 avg_request_time 为 45.012,max_request_time 为 80.0,requestId 为 i-01,country 为 MO;第二行 avg_request_time 为 46.286,max_request_time 为 77.0,requestId 为 i-02,country 为 GB

ip_to_domain函数

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

语法

ip_to_domain(x)

参数说明

参数

说明

x

参数值为IPv4地址。

返回值类型

varchar类型,返回intranetinternet。

  • intranet表示内网。

  • internet表示外网。

示例

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

  • 查询和分析语句

    * |
    SELECT
      count(*) AS PV
    where
      ip_to_domain(client_ip) != 'intranet'
  • 查询和分析结果:PV 值为 941786

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
  • 查询和分析结果包含两行示例数据:PV5122、geo39.1423,117.173,PV4960、geo29.5569,106.553。ip_to_geo函数返回"纬度,经度"格式的坐标字符串。

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
  • 查询和分析结果返回三行数据:avg_request_time 分别为 18.0、25.0、26.0,对应的 provider 分别为信实通信、CAT、网宿。

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
  • 查询和分析结果:执行第一条查询语句后,返回结果为包含 PVprovince 两列的表格,按PV降序排列,示例结果中广东省以368PV排名第一,部分IP无法解析省份时 province 列为空值。

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
  • 查询和分析结果返回结果为 client_ip 列,包含多个 /24 网段前缀值(如 xx.xx.xx.0/24)。

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'))
  • 查询和分析结果返回结果为 _col0 列两行数据,值均为 false,表示对应日志中的 client_ip 不属于 192.168.0.1/24 子网。

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)

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'))
  • 查询和分析结果返回一行数据,列名为 _col0,显示 client_ip 所在 /24 子网的最小IP地址(部分内容已脱敏)。

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'))
  • 查询和分析结果返回一行数据,_col0 列显示 ip_subnet_max 函数的计算结果,值为该 /24 子网的最大 IP 地址(部分内容已脱敏)。

ip_subnet_range函数

ip_subnet_range用于获取IPv4网段范围。

语法

ip_subnet_range(x)

参数说明

参数

说明

x

参数值为IPv4网段。

返回值类型

JSON类型。

示例

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

  • 查询和分析语句

    * | SELECT ip_subnet_range(concat(client_ip,'/24'))
  • 查询和分析结果返回 _col0 列,值为JSON数组格式的IP子网范围,例如 ["xxx.xxx.xxx.0","xxx.xxx.xxx.255"],表示该子网的起始地址和结束地址。

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
  • 查询和分析结果返回各城市名称及对应记录数,例如:安阳市(18)、保定市(42)、保山市(3)、滨州市(9)。

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 地址经 ipv6_to_city_code 函数转换后,返回的 cityCode 值为 350100

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
  • 查询和分析结果:查询结果返回 geoPV 两列,示例数据:133.397995,-24.9121 对应 PV 6270;10.45415,51.164181 对应 PV 3813;-2.23001,54.314072 对应 PV 2055;121.5654268,25.0329636 对应 PV 1893。

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
  • 查询和分析结果:查询结果返回10条记录,示例数据:德国(3813)、台湾(2337)、英国(2055)、瑞典(1119)、荷兰(1014)、美国(942)、俄罗斯(930)、马来西亚(867)等。

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 地址解析为国家代码 CN(中国)。

ipv6_to_domain函数

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

语法

ipv6_to_domain(x)

参数说明

参数

说明

x

参数值为IPv6的地址。

返回值类型

varchar类型,返回intranetinternet。

  • intranet表示内网。

  • internet表示外网。

示例

统计内外网请求的总数。

  • 查询和分析语句

    * |
    SELECT
      ipv6_to_domain(ipv6Address) AS domain,
      count(*) AS count
    GROUP BY
      domain
  • 查询和分析结果以表格形式展示,包含 domaincount 两列。其中 intranet 的请求数量为 9,internet 的请求数量为 38067。

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
  • 查询和分析结果:查询结果返回按访问次数降序排列的网络提供商列表,包括 edu.tw(2235)、colt.net(1512)、maxis.com.my(780)、citictel-cpc.com(453)、科技网(348)、ntt.com(261)、att.com(258)、libertyglobal.com(174)等,共10条记录。

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
  • 查询和分析结果:查询结果返回PVprovince两列,按PV降序排列,示例数据包括江苏省(564)、广东省(558)、吉隆坡联邦直辖区(555)、山东省(507)、河南省(435)、四川省(354)、浙江省(336)、安徽省(312)等,总计10条记录。

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 <> ''
  • 查询和分析结果:查询结果返回 4 行数据,ipv6Address 列显示若干 IPv6 地址(已脱敏),code 列的值均为 350000,表示对应的省份编码。