Подключаемый модуль ipv4_lookup
Подключаемый модуль ipv4_lookup
ищет значение IPv4 в таблице подстановки и возвращает строки с совпадающими значениями. Подключаемый модуль вызывается с evaluate
помощью оператора .
Синтаксис
T|
evaluate
ipv4_lookup(
LookupTable,
SourceIPv4Key,
IPv4LookupKey [,
ExtraKey1 [.. ,
ExtraKeyN [,
return_unmatched ]]] )
Параметры
Имя | Тип | Обязательно | Описание |
---|---|---|---|
T | string |
✔️ | Табличные входные данные, столбец которого SourceIPv4Key используется для сопоставления IPv4. |
LookupTable | string |
✔️ | Табличное или табличное выражение с данными подстановки IPv4, столбец LookupKey которого используется для сопоставления IPv4. Значения IPv4 можно маскировать с помощью нотации IP-префикса. |
SourceIPv4Key | string |
✔️ | Столбец T со строкой IPv4 для поиска в LookupTable. Значения IPv4 можно маскировать с помощью нотации IP-префикса. |
IPv4LookupKey | string |
✔️ | Столбец LookupTable со строкой IPv4, которая сопоставляется с каждым значением SourceIPv4Key . |
ExtraKey1 .. ExtraKeyN | string |
Дополнительные ссылки на столбцы, используемые для поиска совпадений. join Аналогично операции: записи с равными значениями считаются совпадающими. Ссылки на имена столбцов должны существовать как в исходной таблице T , так и LookupTable в . |
|
return_unmatched | bool |
Логический флаг, определяющий, должен ли результат включать все или только совпадающие строки (по умолчанию: false — возвращаются только соответствующие строки). |
Нотация ip-префикса
Нотация IP-префикса (также известная как нотация CIDR) — это краткий способ представления IP-адреса и связанной с ним маски сети. Формат — <base IP>/<prefix length>
, где длина префикса — это число ведущих 1 бита в маске сети. Длина префикса определяет диапазон IP-адресов, принадлежащих сети.
Для IPv4 длина префикса — это число от 0 до 32. Таким образом, нотация 192.168.2.0/24 представляет IP-адрес 192.168.2.0 с маской сети 255.255.255.0. Эта маска сети имеет 24 начального 1 бита или длину префикса 24.
Для IPv6 длина префикса — это число от 0 до 128. Таким образом, нотация fe80::85d:e82c:9446:7994/120 представляет IP-адрес fe80::85d:e82c:9446:7994 с маской сети ffff:ffff:ffff:ffff:ffff:ffff. Эта маска сети содержит 120 ведущих 1 бит или длину префикса 120.
Возвращаемое значение
Подключаемый ipv4_lookup
модуль возвращает результат соединения (поиска) на основе ключа IPv4. Схема таблицы представляет собой объединение исходной таблицы и таблицы подстановки, аналогично результату lookup
оператора .
Если аргумент return_unmatched имеет значение true
, результирующая таблица содержит как совпадаемые, так и несопоставимые строки (заполненные значениями NULL).
Если аргумент return_unmatched имеет значение false
или опущен (используется значение false
по умолчанию), результирующая таблица содержит столько же записей, сколько соответствующих результатов. Этот вариант поиска имеет лучшую производительность по сравнению с выполнением return_unmatched=true
.
Примечание
- Этот подключаемый модуль охватывает сценарий соединения на основе IPv4, при условии, что таблица подстановки небольшого размера (100–200 000 строк) при необходимости имеет больший размер входной таблицы.
- Производительность подключаемого модуля будет зависеть от размеров таблиц подстановки и источников данных, количества столбцов и количества соответствующих записей.
Примеры
Поиск по протоколу IPv4 — только соответствующие строки
// IP lookup table: IP_Data
// Partial data from: https://raw.githubusercontent.com/datasets/geoip2-ipv4/master/data/geoip2-ipv4.csv
let IP_Data = datatable(network:string, continent_code:string ,continent_name:string, country_iso_code:string, country_name:string)
[
"111.68.128.0/17","AS","Asia","JP","Japan",
"5.8.0.0/19","EU","Europe","RU","Russia",
"223.255.254.0/24","AS","Asia","SG","Singapore",
"46.36.200.51/32","OC","Oceania","CK","Cook Islands",
"2.20.183.0/24","EU","Europe","GB","United Kingdom",
];
let IPs = datatable(ip:string)
[
'2.20.183.12', // United Kingdom
'5.8.1.2', // Russia
'192.165.12.17', // Unknown
];
IPs
| evaluate ipv4_lookup(IP_Data, ip, network)
Выходные данные
ip | network | continent_code | continent_name | country_iso_code | country_name |
---|---|---|---|---|---|
2.20.183.12 | 2.20.183.0/24 | EU | Европа | ГБ | United Kingdom |
5.8.1.2 | 5.8.0.0/19 | EU | Европа | RU | Россия |
Подстановка IPv4 — возвращает как совпадающие, так и несовпадющие строки.
// IP lookup table: IP_Data
// Partial data from:
// https://raw.githubusercontent.com/datasets/geoip2-ipv4/master/data/geoip2-ipv4.csv
let IP_Data = datatable(network:string,continent_code:string ,continent_name:string ,country_iso_code:string ,country_name:string )
[
"111.68.128.0/17","AS","Asia","JP","Japan",
"5.8.0.0/19","EU","Europe","RU","Russia",
"223.255.254.0/24","AS","Asia","SG","Singapore",
"46.36.200.51/32","OC","Oceania","CK","Cook Islands",
"2.20.183.0/24","EU","Europe","GB","United Kingdom",
];
let IPs = datatable(ip:string)
[
'2.20.183.12', // United Kingdom
'5.8.1.2', // Russia
'192.165.12.17', // Unknown
];
IPs
| evaluate ipv4_lookup(IP_Data, ip, network, return_unmatched = true)
Выходные данные
ip | network | continent_code | continent_name | country_iso_code | country_name |
---|---|---|---|---|---|
2.20.183.12 | 2.20.183.0/24 | EU | Европа | ГБ | United Kingdom |
5.8.1.2 | 5.8.0.0/19 | EU | Европа | RU | Россия |
192.165.12.17 |
Поиск по протоколу IPv4 — использование источника в external_data()
let IP_Data = external_data(network:string,geoname_id:long,continent_code:string,continent_name:string ,country_iso_code:string,country_name:string,is_anonymous_proxy:bool,is_satellite_provider:bool)
['https://raw.githubusercontent.com/datasets/geoip2-ipv4/master/data/geoip2-ipv4.csv'];
let IPs = datatable(ip:string)
[
'2.20.183.12', // United Kingdom
'5.8.1.2', // Russia
'192.165.12.17', // Sweden
];
IPs
| evaluate ipv4_lookup(IP_Data, ip, network, return_unmatched = true)
Выходные данные
ip | network | geoname_id | continent_code | continent_name | country_iso_code | country_name | is_anonymous_proxy | is_satellite_provider |
---|---|---|---|---|---|---|---|---|
2.20.183.12 | 2.20.183.0/24 | 2635167 | EU | Европа | ГБ | Соединенное Королевство | 0 | 0 |
5.8.1.2 | 5.8.0.0/19 | 2017370 | EU | Европа | RU | Россия | 0 | 0 |
192.165.12.17 | 192.165.8.0/21 | 2661886 | EU | Европа | SE | Швеция | 0 | 0 |
Поиск по протоколу IPv4 — использование дополнительных столбцов для сопоставления
let IP_Data = external_data(network:string,geoname_id:long,continent_code:string,continent_name:string ,country_iso_code:string,country_name:string,is_anonymous_proxy:bool,is_satellite_provider:bool)
['https://raw.githubusercontent.com/datasets/geoip2-ipv4/master/data/geoip2-ipv4.csv'];
let IPs = datatable(ip:string, continent_name:string, country_iso_code:string)
[
'2.20.183.12', 'Europe', 'GB', // United Kingdom
'5.8.1.2', 'Europe', 'RU', // Russia
'192.165.12.17', 'Europe', '', // Sweden is 'SE' - so it won't be matched
];
IPs
| evaluate ipv4_lookup(IP_Data, ip, network, continent_name, country_iso_code)
Выходные данные
ip | continent_name | country_iso_code | network | geoname_id | continent_code | country_name | is_anonymous_proxy | is_satellite_provider |
---|---|---|---|---|---|---|---|---|
2.20.183.12 | Европа | ГБ | 2.20.183.0/24 | 2635167 | EU | Соединенное Королевство | 0 | 0 |
5.8.1.2 | Европа | RU | 5.8.0.0/19 | 2017370 | EU | Россия | 0 | 0 |
См. также
- Общие сведения о функциях IPv4/IPv6
- Общие сведения о функциях сопоставления текста IPv4
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по