Источники внешних словарей
Внешний словарь можно подключить из множества источников.
Общий вид XML-конфигурации:
<clickhouse>
<dictionary>
...
<source>
<source_type>
<!-- Source configuration -->
</source_type>
</source>
...
</dictionary>
...
</clickhouse>
Аналогичный DDL-запрос:
CREATE DICTIONARY dict_name (...)
...
SOURCE(SOURCE_TYPE(param1 val1 ... paramN valN)) -- Source configuration
...
Источник настраивается в разделе source
.
Для типов источников Локальный файл, Исполняемый файл, HTTP(s), ClickHouse доступны дополнительные настройки:
<source>
<file>
<path>/opt/dictionaries/os.tsv</path>
<format>TabSeparated</format>
</file>
<settings>
<format_csv_allow_single_quotes>0</format_csv_allow_single_quotes>
</settings>
</source>
или
SOURCE(FILE(path './user_files/os.tsv' format 'TabSeparated'))
SETTINGS(format_csv_allow_single_quotes = 0)
Типы источников (source_type
):
Локальный файл
Пример настройки:
<source>
<file>
<path>/opt/dictionaries/os.tsv</path>
<format>TabSeparated</format>
</file>
</source>
или
SOURCE(FILE(path './user_files/os.tsv' format 'TabSeparated'))
Поля настройки:
path
— абсолютный путь к файлу.format
— формат файла. Поддерживаются все форматы, описанные в разделе Форматы.
Если словарь с источником FILE
создается с помощью DDL-команды (CREATE DICTIONARY ...
), источник словаря должен быть расположен в каталоге user_files
. Иначе пользователи базы данных будут иметь доступ к произвольному файлу на узле ClickHouse.
Смотрите также
Исполняемый файл
Работа с исполняемым файлом зависит от размещения словаря в памяти. Если тип размещения словаря cache
и complex_key_cache
, то ClickHouse запрашивает необходимые ключи, отправляя запрос в STDIN
исполняемого файла.
Пример настройки:
<source>
<executable>
<command>cat /opt/dictionaries/os.tsv</command>
<format>TabSeparated</format>
<implicit_key>false</implicit_key>
</executable>
</source>
Поля настройки:
command
— абсолютный путь к исполняемому файлу или имя файла (если каталог программы прописан вPATH
).format
— формат файла. Поддерживаются все форматы, описанные в разделе Форматы.implicit_key
— исходный исполняемый файл может возвращать только значения, а соответствие запрошенным ключам определено неявно — порядком строк в результате. Значение по умолчанию: false. Необязательный параметр.
Этот источник словаря может быть настроен только с помощью XML-конфигурации. Создание словарей с исполняемым источником с помощью DDL запрещено. Иначе пользователь сможет выполнить произвольный бинарный файл на сервере ClickHouse.
Исполняемый пул
Исполняемый пул позволяет загружать данные из пула процессов. Этот источник не работает со словарями, которые требуют загрузки всех данных из источника. Исполняемый пул работает словарями, которые размещаются следующими способами: cache
, complex_key_cache
, ssd_cache
, complex_key_ssd_cache
, direct
, complex_key_direct
.
Исполняемый пул генерирует пул процессов с помощью указанной команды и оставляет их активными, пока они не завершатся. Программа считывает данные из потока STDIN пока он доступен и выводит результат в поток STDOUT, а затем ожидает следующего блока данных из STDIN. ClickHouse не закрывает поток STDIN после обработки блока данных и отправляет в него следующую порцию данных, когда это требуется. Исполняемый скрипт должен быть готов к такому способу обработки данных — он должен заранее опрашивать STDIN и отправлять данные в STDOUT.
Пример настройки:
<source>
<executable_pool>
<command><command>while read key; do printf "$key\tData for key $key\n"; done</command</command>
<format>TabSeparated</format>
<pool_size>10</pool_size>
<max_command_execution_time>10<max_command_execution_time>
<implicit_key>false</implicit_key>
</executable_pool>
</source>
Поля настройки:
command
— абсолютный путь к файлу или имя файла (если каталог программы записан вPATH
).format
— формат файла. Поддерживаются все форматы, описанные в “Форматы”.pool_size
— размер пула. Если в полеpool_size
указан 0, то размер пула не ограничен.command_termination_timeout
— скрипт исполняемого пула должен включать основной цикл чтени я-записи. После уничтожения словаря канал закрывается. При этом исполняемый файл имеетcommand_termination_timeout
секунд для завершения работы, прежде чем ClickHouse пошлет сигнал SIGTERM дочернему процессу. Указывается в секундах. Значение по умолчанию: 10. Необязательный параметр.max_command_execution_time
— максимальное количество времени для исполняемого скрипта на обработку блока данных. Указывается в секундах. Значение по умолчанию: 10. Необязательный параметр.implicit_key
— исходный исполняемый файл может возвращать только значения, а соответствие запрошенным ключам определено неявно — порядком строк в результате. Значение по умолчанию: false. Необязательный параметр.
Этот источник словаря может быть настроен только с помощью XML-конфигурации. Создание словарей с исполняемым источником с помощью DDL запрещено. Иначе пользователь сможет выполнить произвольный бинарный файл на сервере ClickHouse.
HTTP(s)
Работа с HTTP(s) сервером зависит от размещения словаря в памяти. Если тип размещения словаря cache
и complex_key_cache
, то ClickHouse запрашивает необходимые ключи, отправляя запрос методом POST
.
Пример настройки:
<source>
<http>
<url>http://[::1]/os.tsv</url>
<format>TabSeparated</format>
<credentials>
<user>user</user>
<password>password</password>
</credentials>
<headers>
<header>
<name>API-KEY</name>
<value>key</value>
</header>
</headers>
</http>
</source>
или
SOURCE(HTTP(
url 'http://[::1]/os.tsv'
format 'TabSeparated'
credentials(user 'user' password 'password')
headers(header(name 'API-KEY' value 'key'))
))
Чтобы ClickHouse смог обратиться к HTTPS-ресурсу, необходимо настроить openSSL в конфигурации сервера.
Поля настройки:
url
— URL источника.format
— формат файла. Поддерживаются все форматы, описанные в разделе «Форматы».credentials
– базовая HTTP-аутентификация. Необязательный параметр.user
– имя пользователя, необходимое для аутентификации.password
– пароль, необходимый для аутентификации.headers
– все пользовательские записи HTTP-заголовков, используемые для HTTP-запроса. Необязательный параметр.header
– одна запись HTTP-заголовка.name
– идентифицирующее имя, используемое для отправки заголовка запроса.value
– значение, заданное для конкретного идентифицирующего имени.
При создании словаря с помощью DDL-команды (CREATE DICTIONARY ...
) удаленные хосты для HTTP-словарей проверяются в разделе remote_url_allow_hosts
из конфигурации сервера. Иначе пользователи базы данных будут иметь доступ к произвольному HTTP-серверу.