mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-21 09:10:48 +00:00
Merge pull request #1113 from BayoNet/master
<invalidate_query> setting of external dictionary <source> section is described
This commit is contained in:
commit
34dc2e5279
@ -6,12 +6,13 @@
|
||||
|
||||
Существует возможность подключать собственные словари из различных источников данных. Источником данных для словаря может быть локальный текстовый/исполняемый файл, HTTP(s) ресурс или другая СУБД. Подробнее смотрите в разделе ":ref:`dicts-external_dicts_dict_sources`".
|
||||
|
||||
ClickHouse может полностью или частично хранить словари в оперативной памяти, периодически обновлять их и динамически подгружать отсутствующие значения.
|
||||
ClickHouse:
|
||||
|
||||
* Полностью или частично хранить словари в оперативной памяти.
|
||||
* Периодически обновляет их и динамически подгружает отсутствующие значения. Т.е. словари можно подгружать динамически.
|
||||
|
||||
Конфигурация внешних словарей находится в одном или нескольких файлах. Путь к конфигурации указывается в параметре :ref:`server_settings-dictionaries_config`.
|
||||
|
||||
Периодически ClickHouse обновляет конфигурацию словарей и словари. Т.о. словари можно подгружать динамически.
|
||||
|
||||
Словари могут загружаться при старте сервера или при первом использовании, в зависимости от настройки :ref:`server_settings-dictionaries_lazy_load`.
|
||||
|
||||
Конфигурационный файл словарей имеет вид:
|
||||
@ -19,7 +20,7 @@ ClickHouse может полностью или частично хранить
|
||||
.. code-block:: xml
|
||||
|
||||
<dictionaries>
|
||||
<comment>Необязательный элемент с любым содержимым. Полностью игнорируется.</comment>
|
||||
<comment>Необязательный элемент с любым содержимым. Игнорируется сервером ClickHouse.</comment>
|
||||
|
||||
<dictionary>
|
||||
<!-- Конфигурация словаря -->
|
||||
@ -36,7 +37,7 @@ ClickHouse может полностью или частично хранить
|
||||
|
||||
Смотрите также ":ref:`ext_dict_functions`" .
|
||||
|
||||
.. attention:: Вы можете преобразовать значения по небольшому словарю, описав его в запросе ``SELECT`` (см. функцию ":ref:`other_functions-transform`"). Эта функциональность не связана с внешними словарями.
|
||||
.. attention:: Вы можете преобразовывать значения по небольшому словарю, описав его в запросе ``SELECT`` (см. функцию ":ref:`other_functions-transform`"). Эта функциональность не связана с внешними словарями.
|
||||
|
||||
.. toctree::
|
||||
:glob:
|
||||
|
@ -15,10 +15,6 @@
|
||||
* Вызывать функцию для работы со словарём после ``GROUP BY``.
|
||||
* Помечать извлекаемые атрибуты как инъективные. Атрибут называется инъективным, если разным ключам соответствуют разные значения атрибута. Тогда при использовании в ``GROUP BY`` функции, достающей значение атрибута по ключу, эта функция автоматически выносится из ``GROUP BY``.
|
||||
|
||||
ClickHouse периодически обновляет словари. Сначала проверяется время модификации файла/таблицы, затем, если файл/таблица обновились, обновляется словарь. Если словарь хранится в таблице типа MyISAM, то время модификации проверяется запросом ``SHOW TABLE STATUS``. Для таблиц InnoDB нельзя получить время модификации, поэтому словарь обновляется каждый раз.
|
||||
|
||||
Обновление словарей (кроме загрузки при первом использовании) не блокирует запросы - во время обновления используется старая версия словаря. Если при обновлении возникнет ошибка, то ошибка пишется в лог сервера, а запросы продолжат использовать старую версию словарей.
|
||||
|
||||
При ошибках работы со словарями ClickHouse генерирует исключения. Например, в следующих ситуациях:
|
||||
|
||||
* При обращении к словарю, который не удалось загрузить.
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
ClickHouse периодически обновляет словари. Интервал обновления для полностью загружаемых словарей и интервал инвалидации для кэшируемых словарей определяется в теге ``<lifetime>`` в секундах.
|
||||
|
||||
Обновление словарей (кроме загрузки при первом использовании) не блокирует запросы, во время обновления используется старая версия словаря. Если при обновлении возникнет ошибка, то ошибка пишется в лог сервера, а запросы продолжат использовать старую версию словарей.
|
||||
Обновление словарей (кроме загрузки при первом использовании) не блокирует запросы - во время обновления используется старая версия словаря. Если при обновлении возникнет ошибка, то ошибка пишется в лог сервера, а запросы продолжат использовать старую версию словарей.
|
||||
|
||||
Пример настройки:
|
||||
|
||||
@ -36,3 +36,28 @@ ClickHouse периодически обновляет словари. Инте
|
||||
</lifetime>
|
||||
...
|
||||
</dictionary>
|
||||
|
||||
|
||||
При обновлении словарей сервер ClickHouse применяет различную логику в зависимости от типа :ref:`источника <dicts-external_dicts_dict_sources>`:
|
||||
|
||||
* У текстового файла проверяется время модификации. Если время изменилось по отношению к запомненному ранее, то словарь обновляется.
|
||||
* Для таблиц типа MyISAM, время модификации проверяется запросом ``SHOW TABLE STATUS``.
|
||||
* Словари из других источников по умолчанию обновляются каждый раз.
|
||||
|
||||
Для источников MySQL (InnoDB), ODBC можно настроить запрос, который позволит обновлять словари только в случае их фактического изменения, а не каждый раз. Чтобы это сделать необходимо выполнить следующие условия/действия:
|
||||
|
||||
* В таблице словаря должно быть поле, которое гарантированно изменяется при обновлении данных в источнике.
|
||||
* В настройках источника указывается запрос, который получает изменяющееся поле. Результат запроса сервер ClickHouse интерпретирует как строку и если эта строка изменилась по отношению к предыдущему состоянию, то словарь обновляется. Запрос следует указывать в поле ``<invalidate_query>`` настроек :ref:`источника <dicts-external_dicts_dict_sources>`.
|
||||
|
||||
Пример настройки:
|
||||
|
||||
.. code-block:: xml
|
||||
|
||||
<dictionary>
|
||||
...
|
||||
<odbc>
|
||||
...
|
||||
<invalidate_query>SELECT update_time FROM dictionary_source where id = 1</invalidate_query>
|
||||
</odbc>
|
||||
...
|
||||
</dictionary>
|
||||
|
@ -125,13 +125,15 @@ ODBC
|
||||
<db>DatabaseName</db>
|
||||
<table>TableName</table>
|
||||
<connection_string>DSN=some_parameters</connection_string>
|
||||
<invalidate_query>SQL_REQUEST</invalidate_query>
|
||||
</odbc>
|
||||
|
||||
Поля настройки:
|
||||
|
||||
* ``db`` - Имя базы данных. Не указывать, если имя базы задано в параметрах ``<connection_string>``.
|
||||
* ``table`` - Имя таблицы.
|
||||
* ``connection_string`` - Строка соединения.
|
||||
* ``db`` - имя базы данных. Не указывать, если имя базы задано в параметрах ``<connection_string>``.
|
||||
* ``table`` - имя таблицы.
|
||||
* ``connection_string`` - строка соединения.
|
||||
* ``invalidate_query`` - запрос для проверки статуса словаря. Необязательный параметр. Читайте подробнее в разделе :ref:`dicts-external_dicts_dict_lifetime`.
|
||||
|
||||
|
||||
Пример подключения PostgreSQL
|
||||
@ -308,6 +310,7 @@ MySQL
|
||||
<db>conv_main</db>
|
||||
<table>counters</table>
|
||||
<where>id=10</where>
|
||||
<invalidate_query>SQL_REQUEST</invalidate_query>
|
||||
</mysql>
|
||||
</source>
|
||||
|
||||
@ -323,7 +326,8 @@ MySQL
|
||||
* ``replica/priority`` - приоритет реплики. При попытке соединения ClickHouse обходит реплики в соответствии с приоритетом. Чем меньше цифра, тем выше приоритет.
|
||||
* ``db`` - имя базы данных.
|
||||
* ``table`` - имя таблицы.
|
||||
* ``where`` - условие выбора. Может отсутствовать.
|
||||
* ``where`` - условие выбора. Необязательный параметр.
|
||||
* ``invalidate_query`` - запрос для проверки статуса словаря. Необязательный параметр. Читайте подробнее в разделе :ref:`dicts-external_dicts_dict_lifetime`.
|
||||
|
||||
.. _dicts-external_dicts_dict_sources-clickhouse:
|
||||
|
||||
@ -385,4 +389,4 @@ MongoDB
|
||||
* ``user`` - имя пользователя MongoDB.
|
||||
* ``password`` - пароль пользователя MongoDB.
|
||||
* ``db`` - имя базы данных.
|
||||
* ``collection`` - имя коллекции.
|
||||
* ``collection`` - имя коллекции.
|
Loading…
Reference in New Issue
Block a user