Настройка BackendClickHouse
Пример секции конфигурации:
<BackendClickHouse name="BackendClickHouse1" dbhost="localhost" dbport="9000" dbuser="" dbpass=""
filter_field="clickhouse" filter_value="1"
tags="TAG1=VAL1 TAG2=VAL2 ..."/>
Где:
- dbhost - host для связи с ClickHouse
- dbport - port для связи с ClickHouse. Default: 9000
- dbuser - user
- dbpass - password
- dbtablename - Имя таблицы в которую писать данные. По умолчанию main_history.
- filter_field - поле у датчика, определяющее, что его нужно сохранять в БД
- filter_value - значение filter_field, определяющее, что датчик нужно сохранять в БД
- tags - теги которые будут добавлены для каждой записи (перечисляются через пробел)
Так же статические теги можно указывать непосредственно у датчиков
<sensors>
...
<item id="54" iotype="AI" name="AI54_S" textname="AI sensor 54" clickhouse="1" clickhouse_tags=""/>
<item id="55" iotype="AI" name="AI55_S" textname="AI sensor 55" clickhouse="1" clickhouse_tags="tag1=val1 tag2=val2"/>
...
</sensors>
Буфер на запись в БД
В данной реализации встроен специальный буфер, который накапливает данные и скидывает их пачкой в БД. Так же он является защитным механизмом на случай если БД временно недоступна. Параметры буфера задаются аргументами командной строки или в конфигурационном файле. Доступны следующие параметры:
- bufSize - размер буфера, при заполнении которого происходит запись данных в БД
- bufMaxSize - максимальный размер буфера, при котором все данные теряются (буфер чиститься)
- bufSyncTimeout - период принудительного сброса данных в БД, миллисек.
- reconnectTime - время на повторную попытку подключения к БД, миллисек.
- sizeOfMessageQueue - Размер очереди сообщений для обработки изменений по датчикам. При большом количестве отслеживаемых датчиков, размер должен быть достаточным, чтобы не терять изменения.
Настройка динамических тегов
Значения тегов настраиваются в секции <clickhouse_tags>
<BackendClickHouse ...>
<clickhouse_tags>
....
</clickhouse_tags>
</BackendClickHouse>
см. также BackendClickHouse: Поддержка динамических тегов
Впомогательная утилита uniset2-clickhouse-admin
В состав проекта так же входит утилита uniset2-clickhouse-admin облегчающая взаимодействие с ClickHouse. В частности утилита позволяет сгенерировать csv-файлы словарей для подключения к проекту.
Usage: uniset2-clickhouse-admin [command] config.xml
uniset2-clickhouse-admin - generate data for clickhouse server
Valid command are:
-h, --help - display help
-d, --dicts - Generate dictionaries data (csv files) for Clickhouse
-c, --create [dbname] - Create database. Default dbname=
uniset
-s, --size - Show table sizes
--outdir dir - write files to directory
Definition Calibration.h:27
В проект входят пример файла для настройки и подключения csv-словарей к ClickHouse. В результате в БД будут доступны словари dict_sensors
, dict_objects
, dict_nodes
позволяющие использовать имена датчиков и другие характеристики в запросах. Пример простого запроса выводящего историю изменения датчиков за последний час
SELECT
timestamp,
value,
dictGetString('dict_sensors', 'name', name_hid),
dictGetString('dict_nodes', 'ip', node_hid)
FROM main_history
WHERE timestamp > now() - toIntervalHour(1)
Или по конкретному датчику
SELECT
timestamp,
value,
dictGetString('dict_sensors', 'name', name_hid),
dictGetString('dict_nodes', 'ip', node_hid)
FROM main_history
WHERE timestamp > now() - toIntervalHour(30) and name_hid = cityHash64('Sensor1_AS')
Пример запрос с использованием тегов
SELECT
timestamp,
value,
tag,
tagvalue
FROM main_history
ARRAY JOIN
tags.name AS tag,
tags.value AS tagvalue
WHERE (tag = 'system') AND (tagvalue = 'temp')
Описание доступных в словарях полей можно посмотреть в файле clickhouse_uniset_dictionary.xml