このトピックでは、IP 関数の基本的な構文と例について説明します。
Simple Log Service は、次の IP 関数をサポートしています。
Log Service の分析文では、文字列をシングルクォーテーション ('') で囲みます。Log Service は、引用符で囲まれていない値やダブルクォーテーション ("") で囲まれた値をフィールド名または列名として解釈します。たとえば、'status' は文字列ですが、status または "status" は status という名前のログフィールドを指します。
|
カテゴリ |
関数 |
構文 |
説明 |
SQL |
SPL |
|
IPv4 アドレス関数 |
|
指定された IPv4 アドレスの都市の中国語名を返します。 |
√ |
× |
|
|
|
指定された IPv4 アドレスの都市の行政区画コードを返します。 |
√ |
× |
||
|
|
指定された IPv4 アドレスの都市の経度と緯度を返します。各都市は、単一の経度と緯度のペアに対応します。 |
√ |
× |
||
|
|
指定された IPv4 アドレスの国または地域の中国語名を返します。 |
√ |
× |
||
|
|
指定された IPv4 アドレスの国または地域コードを返します。 |
√ |
× |
||
|
|
指定された IPv4 アドレスの国または地域コードを返します。 返される結果は国または地域コードです。 |
√ |
× |
||
|
|
指定された IPv4 アドレスがプライベートアドレスかパブリックアドレスかを判断します。 |
√ |
× |
||
|
|
指定された IPv4 アドレスの経度と緯度を返します。 |
√ |
× |
||
|
|
指定された IPv4 アドレスのインターネットサービスプロバイダー (ISP) を返します。 |
√ |
× |
||
|
|
指定された IPv4 アドレスの州の中国語名を返します。 返される結果は、州の中国語名です。 |
√ |
× |
||
|
|
指定された IPv4 アドレスの州の行政区画コードを返します。 結果は、州の行政区画コードです。 |
√ |
× |
||
|
IPv4 CIDR ブロック関数 |
|
指定された IPv4 アドレスとプレフィックス長に対応するネットワークプレフィックスを返します。 |
√ |
× |
|
|
|
ある IPv4 CIDR ブロックが別のブロックのサブネットであるかどうかを判断します。 |
√ |
× |
||
|
|
IPv4 アドレスが指定された IPv4 CIDR ブロック内にあるかどうかを確認します。 |
√ |
× |
||
|
|
指定された IPv4 CIDR ブロック内の最大の IP アドレスを返します。 |
√ |
× |
||
|
|
指定された IPv4 CIDR ブロック内の最小の IP アドレスを返します。 |
√ |
× |
||
|
|
指定された IPv4 CIDR ブロックの IP アドレス範囲を返します。 |
√ |
× |
||
|
IPv6 アドレス関数 |
|
指定された IPv6 アドレスの都市の中国語名を返します。 |
√ |
× |
|
|
|
指定された IPv6 アドレスの都市の行政区画コードを返します。 |
√ |
× |
||
|
|
指定された IPv6 アドレスの都市の経度と緯度を返します。 |
√ |
× |
||
|
|
指定された IPv6 アドレスの国または地域の中国語名を返します。 |
√ |
× |
||
|
|
指定された IPv6 アドレスの国または地域コードを返します。 |
√ |
× |
||
|
|
指定された IPv6 アドレスがプライベートアドレスかパブリックアドレスかを判断します。 |
√ |
× |
||
|
|
指定された IPv6 アドレスのインターネットサービスプロバイダー (ISP) を返します。 |
√ |
× |
||
|
|
指定された IPv6 アドレスの省の中国語名を返します。 |
√ |
× |
||
|
|
指定された 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_time: 44.85, max_request_time: 80.0, requestId: i-02)、麗江 (avg_request_time: 46.47, max_request_time: 80.0, requestId: i-01)、鶴崗 (avg_request_time: 43.87, max_request_time: 80.0, requestId: i-01)。
ip_to_city_geo 関数
ip_to_city_geo 関数は、指定された IPv4 アドレスの都市の経度と緯度を返します。
構文
ip_to_city_geo(x)
パラメーター
|
パラメーター |
説明 |
|
x |
IPv4 アドレス。 |
戻り値の型
latitude,longitude 形式の varchar 文字列。
例
IPv4 アドレスの経度と緯度を取得して、クライアントのディストリビューションをマッピングします。
-
クエリ文
* | SELECT count(*) AS PV, ip_to_city_geo(client_ip) AS geo GROUP BY geo ORDER BY PV DESC -
クエリは 2 つの行を返します。最初の行の
PVは 9113 で、geoの値は 39.9288,116.389 (北京) です。2 番目の行のPVは 5784 で、geoの値は 31.2222,121.458060 (上海) です。
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_time: 45.27,max_request_time: 80.0,requestId: i-02)、オーストラリア (avg_request_time: 47.08,max_request_time: 80.0,requestId: i-01)、インド (avg_request_time: 39.39,max_request_time: 77.0,requestId: i-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 -
クエリは 2 行の結果を返します。最初の行では、avg_request_time は
45.012、max_request_time は80.0、requestId はi-01、country はMOです。2 番目の行では、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 文字列を返します:
-
'intranet':プライベートアドレスを示します。
-
'internet':パブリックアドレスを示します。
例
プライベートネットワークから発信されていないリクエストの数をカウントします。
-
クエリ文
* | SELECT count(*) AS PV where ip_to_domain(client_ip) != 'intranet' -
クエリと分析の結果:PV のカウントは
941786です。
ip_to_geo 関数
ip_to_geo 関数は、指定された IPv4 アドレスの緯度と経度を返します。geo 関数の詳細については、「Geo 関数」をご参照ください。
構文
ip_to_geo(x)
パラメーター
|
パラメーター |
説明 |
|
x |
IPv4 アドレス。 |
戻り値の型
latitude,longitude 形式の varchar 文字列。
例
この例では、IPv4 アドレスの緯度と経度を取得して、クライアントのディストリビューションを特定します。
-
クエリ文
* | SELECT count(*) AS PV, ip_to_geo(client_ip) AS geo GROUP BY geo ORDER BY PV DESC -
クエリと分析の結果には、2 つのサンプルレコードが含まれています:1 つは PV が 5122 で geo が 39.1423,117.173、もう 1 つは PV が 4960 で geo が 29.5569,106.553 です。
ip_to_provider 関数
ip_to_provider 関数は、IPv4 アドレスの ISP を返します。
構文
ip_to_provider(x)
パラメーター
|
パラメーター |
説明 |
|
x |
IPv4 アドレス。 |
戻り値の型
varchar 文字列。
例
ISP ごとの平均リクエスト時間を計算します。
-
クエリ文
* | SELECT avg(request_time) AS avg_request_time, ip_to_provider(client_ip) AS provider GROUP BY provider ORDER BY avg_request_time -
クエリは 3 行を返します。avg_request_time の値は 18.0、25.0、26.0 で、対応する provider の値は Reliance Communications、CAT、Wangsu です。
ip_to_province 関数
ip_to_province 関数は、指定された IPv4 アドレスの州を返します。
構文
-
州の中国語名を返します。
ip_to_province(x) -
州の英語名を返します。
ip_to_province(x,'en')
パラメーター
|
パラメーター |
説明 |
|
x |
検索する IPv4 アドレス。 |
戻り値の型
VARCHAR
例
合計リクエスト数で上位 10 の州を計算します。
-
クエリ文
* | 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 -
クエリ結果:最初のクエリ文を実行すると、PV 列と province 列を持つテーブルが返されます。結果は PV の降順でソートされます。サンプル結果では、広東省が PV 368 で 1 位です。IP アドレスを省に解決できない場合、province 列の値は空になります。
ip_prefix 関数
ip_prefix 関数は、192.168.1.0/24 のような CIDR 表記で、指定された IPv4 アドレスのサブネットプレフィックスを返します。
構文
ip_prefix(x, prefix_bits)
パラメーター
|
パラメーター |
説明 |
|
x |
IPv4 アドレス。 |
|
prefix_bits |
プレフィックス長。 |
戻り値の型
varchar
例
client_ip フィールドの IP アドレスのサブネットプレフィックスを取得します。
-
クエリ文
* | SELECT ip_prefix(client_ip,24) AS client_ip -
クエリは、
xx.xx.xx.0/24のような /24 サブネットプレフィックスを含むclient_ip列を返します。
is_prefix_subnet_of
is_prefix_subnet_of は、ある IPv4 CIDR ブロックが別のブロックのサブネットであるかどうかを確認します。
構文
is_prefix_subnet_of(x, y)
パラメーター
|
パラメーター |
説明 |
|
x |
親の IPv4 CIDR ブロック。 |
|
y |
潜在的なサブネットとしてテストする IPv4 CIDR ブロック。 |
戻り値の型
y が x のサブネットである場合は true、そうでない場合は false のブール値を返します。
例
この例では、client_ip フィールドから派生した CIDR ブロックが 192.168.0.1/24 のサブネットであるかどうかを確認します。
-
クエリ文
* | SELECT is_prefix_subnet_of('192.168.0.1/24',concat(client_ip,'/24')) -
クエリと分析の結果には、
_col0列が含まれ、2 つの行があり、どちらも値はfalseです。false の値は、対応するログの client_ip が 192.168.0.1/24 サブネットにないことを示します。
is_subnet_of 関数
is_subnet_of 関数は、IPv4 アドレスが CIDR ブロック内にあるかどうかを判断します。
構文
is_subnet_of(x, y)
パラメーター
|
パラメーター |
説明 |
|
x |
IPv4 CIDR ブロック。 |
|
y |
IPv4 アドレス。 |
戻り値の型
Boolean
例
client_ip フィールドの値が 192.168.0.1/24 CIDR ブロック内にあるかどうかを確認します。
-
クエリ文
* | SELECT is_subnet_of('192.168.0.1/24',client_ip)
ip_subnet_min 関数
ip_subnet_min 関数は、IPv4 CIDR ブロック内の最小の IP アドレスを返します。
構文
ip_subnet_min(x)
パラメーター
|
パラメーター |
説明 |
|
x |
IPv4 CIDR ブロック。 |
戻り値の型
varchar
例
この例では、client_ip フィールドの IP アドレスを含む CIDR ブロック内の最小の IP アドレスを返します。
-
クエリ文
* | SELECT ip_subnet_min(concat(client_ip,'/24')) -
クエリは、
_col0という名前の列を持つ単一の行を返します。この列には、client_ipを含む /24 CIDR ブロック内の最小の IP アドレスが表示されます。一部のコンテンツはマスクされています。
ip_subnet_max 関数
ip_subnet_max 関数は、IPv4 CIDR ブロック内の最大の IP アドレスを返します。
構文
ip_subnet_max(x)
パラメーター
|
パラメーター |
説明 |
|
x |
IPv4 CIDR ブロック。 |
戻り値の型
varchar
例
client_ip フィールドの IP アドレスの /24 サブネットの最大の IP アドレスを計算します。
-
クエリと分析文
* | SELECT ip_subnet_max(concat(client_ip,'/24')) -
_col0列には、ip_subnet_max関数の結果が表示されます:/24 サブネットの最大の IP アドレスです。一部のコンテンツはマスクされています。
ip_subnet_range
ip_subnet_range 関数は、IPv4 CIDR ブロックの開始アドレスと終了アドレスを返します。
構文
ip_subnet_range(x)
パラメーター
|
パラメーター |
説明 |
|
x |
IPv4 CIDR ブロック。 |
戻り値の型
JSON 配列。
例
client_ip フィールドの IP アドレスを含む IPv4 CIDR ブロックのアドレス範囲を取得します。
-
クエリと分析文
* | SELECT ip_subnet_range(concat(client_ip,'/24')) -
クエリと分析の結果には、
_col0列が含まれます。この列には、["xxx.xxx.xxx.0","xxx.xxx.xxx.255"]のような JSON 配列が含まれており、これは IPv4 CIDR ブロックの開始アドレスと終了アドレスを表します。
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_to_city_code関数は IPv6 アドレスを変換し、350100の cityCode を返します。
ipv6_to_city_geo
ipv6_to_city_geo 関数は、IPv6 アドレスの経度と緯度を返します。
構文
ipv6_to_city_geo(x)
パラメーター
|
パラメーター |
説明 |
|
x |
|
戻り値の型
この関数は、longitude,latitude 形式の varchar 文字列を返します。
例
この例では、クライアントのディストリビューションを分析するために、IPv6 アドレスの経度と緯度を取得する方法を示します。
-
クエリ文
* | SELECT ipv6_to_city_geo(ipv6Address) AS geo, count(*) AS PV GROUP BY geo ORDER BY PV DESC -
クエリは
geoとPVの列を返します。サンプル結果は (geo, PV) のペアで表示され、(133.397995,-24.9121, 6270)、(10.45415,51.164181, 3813)、(-2.23001,54.314072, 2055)、(121.5654268,25.0329636, 1893) が含まれます。
ipv6_to_country 関数
ipv6_to_country 関数は、指定された IPv6 アドレスの国または地域を特定します。
構文
ipv6_to_country(x)
パラメーター
|
パラメーター |
説明 |
|
x |
IPv6 アドレス。 |
戻り値の型
varchar
例
合計リクエスト数で上位 10 の国または地域を計算します。
-
クエリ文
* | 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 関数は、IPv6 アドレスをプライベートアドレスまたはパブリックアドレスに分類します。
構文
ipv6_to_domain(x)
パラメーター
|
パラメーター |
説明 |
|
x |
IPv6 アドレス。 |
戻り値の型
varchar。この関数は、次のいずれかの値を返します:
-
intranet:プライベートアドレス。
-
internet:パブリックアドレス。
例
この例では、プライベートネットワークとパブリックネットワークからのリクエストをカウントします。
-
クエリと分析文
* | SELECT ipv6_to_domain(ipv6Address) AS domain, count(*) AS count GROUP BY domain -
クエリは、domain と count の 2 つの列を持つテーブルを返します。この例では、
intranetのカウントは 9、internetのカウントは 38,067 です。
ipv6_to_provider 関数
ipv6_to_provider 関数は、指定された IPv6 アドレスの ISP を返します。
構文
ipv6_to_provider(x)
パラメーター
|
パラメーター |
説明 |
|
x |
IPv6 アドレス。 |
戻り値の型
varchar
例
この例では、合計リクエスト数で上位 10 の ISP を検索します。
-
クエリと分析文
* | SELECT ipv6_to_provider(ipv6Address) AS provider, count(*) AS count GROUP BY provider ORDER BY count DESC LIMIT 10 -
クエリと分析の結果:クエリは、リクエスト数の降順でソートされた ISP のリストを返します。上位 10 件の結果には、
edu.tw(2235)、colt.net(1512)、maxis.com.my(780)、citictel-cpc.com(453)、CSTNET(348)、ntt.com(261)、att.com(258)、libertyglobal.com(174) などが含まれます。
ipv6_to_province 関数
ipv6_to_province 関数は、IPv6 アドレスの省を返します。
構文
ipv6_to_province(x)
パラメーター
|
パラメーター |
説明 |
|
x |
IPv6 アドレス。 |
戻り値の型
varchar
例
この例では、合計リクエスト数で上位 10 の省を検索します。
-
クエリと分析文
* | SELECT count(*) AS PV, ipv6_to_province(ipv6Address) AS province WHERE province <> '' GROUP BY province ORDER BY PV DESC LIMIT 10 -
クエリと分析の結果:クエリは PV と province の列を返し、PV の降順でソートされます。サンプル結果には、江蘇省 (564)、広東省 (558)、クアラルンプール連邦直轄領 (555)、山東省 (507)、河南省 (435)、四川省 (354)、浙江省 (336)、安徽省 (312) が含まれます。
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 <> '' -
クエリ結果:ipv6Address 列には、マスクされたいくつかの IPv6 アドレスがリストされ、code 列には、対応する省コード
350000が表示されます。