Еще одна недокументированная, на данный момент, возможность — это получение информации по IP-адресу.
В ClickHouse существует механизм словарей, для работы с IP-адресами необходимо выбрать в качестве способа размещения словаря в памяти (layout) — ip_trie
. Описание словаря никак не отличается от обычного и в качестве источника можно выбирать любой из доступных.
Рассмотрим на примере локального файла в формате CSV.
<?xml version="1.0" encoding="UTF-8"?>
<dictionaries>
<dictionary>
<name>GEOIP</name>
<source>
<file>
<path>/tmp/ip_trie.csv</path>
<format>CSV</format>
</file>
</source>
<lifetime>300</lifetime>
<layout>
<ip_trie />
</layout>
<structure>
<key>
<attribute>
<name>prefix</name>
<type>String</type>
</attribute>
</key>
<attribute>
<name>Country</name>
<type>String</type>
<null_value />
</attribute>
<attribute>
<name>Owner</name>
<type>String</type>
<null_value />
</attribute>
</structure>
</dictionary>
</dictionaries>
При этом в файле для prefix
указывается сеть и длина префикса.
87.250.250.0/24,RU,YANDEX
8.8.8.0/24,USA,Google LLC
Для получения информации обращаемся к словарю с помощью стандартных функций.
Пример получения страны по IP-адресу:
:) SELECT dictGetString('GEOIP', 'Owner', tuple(IPv4StringToNum('8.8.8.8')))
SELECT dictGetString('GEOIP', 'Owner', tuple(IPv4StringToNum('8.8.8.8')))
┌─dictGetString(\'GEOIP\', \'Owner\', tuple(IPv4StringToNum(\'8.8.8.8\')))─┐
│ Google LLC │
└────────────────────────────────────────────────────────────────────────────────────┘