Выбор и обработка событий

Часто бывает необходимым найти, отфильтровать и агрегировать определенное количество событий устройства. Это может оказаться полезным для:

Общий знаменатель всех перечисленных задач заключается в том, что нам следует извлечь выбранные исторические данные из базы данных SberMobile Server и преобразовать их в таблицу данных. Эта таблицы данных будут использоваться для заполнения отчета или общей таблицы, заполнения скрипта данными ввода или предоставления администратору.

Есть три разных способа выбора событий и конвертирования их в таблицу данных:

Ниже представлено краткое сравнение этих методов:


Язык выражения

Язык запросов

SQL

Выполнение фильтрации и выбора

высокое

низкое

высокое

Агрегация (общая, средняя, минимальная/максимальная и пр.)

не доступно

доступно

доступно

Потребление памяти

среднее

высокое

низкое

Издержки на хранение событий

нет

нет

удваивает использование диска

Подсказка выбора метода:

  • Если Вам необходимо обработать большое количество событий (100000 и более), используйте собственный SQL
  • Если количество событий небольшое, но требуется агрегация, используйте язык запросов  SberMobile
  • Во всех остальных случаях используйте язык выражений
  • Выбор событий с использованием языка выражений SberMobile

Чтобы выбрать события при помощи языка выражения, следует использовать функцию получить историю событий контекста событий. Определите имя/маску контекста, имя события, выражение фильтрации и дату начала в параметрах ввода.

Давайте создадим отчет, показывающий события входа в систему для пользователя john. Выражение данных источника этого отчета будет вызывать функцию Получить историю событий, имеющую другое выражение (используемое для фильтрации событий), заданное в виде строки в списке параметров функции:

Обратите внимание, что последний параметр (Дата начала) опущен, и вместо него используется значение по умолчанию NULL.

{events:get("users", "login", "{username} == 'john'")}

Выбор событий с использованием языка запросов SberMobile

Вы этом случае мы выбираем сырые данные события, используя ту же самую функцию Получить историю событий (описанную ранее), но выражение фильтрации при этом не задается. Затем мы запускаем Запрос SberMobile в этой таблице для фильтрации и агрегирования данных, используя стандартные операции SQL.

Ниже приводится запрос, который возвращает все события входа в систему пользователя john (см. выше):

SELECT

 *

FROM

 events:get("users", "login") as logins

WHERE

 logins.get$username = 'john'

Чтобы данный запрос использовался в качестве отчета Выражение данных источника, используйте следующее выражение:

{:executeQuery("SELECT * FROM events:get('users', 'login') as logins WHERE logins.get$username = 'john'")}

Выбор событий с использованием SQL

Что касается настройки, этот метод наиболее сложный, поэтому его следует использовать только в том случае, если другие методы не подходят. Чтобы выбрать события, используя SQL, следует выполнить следующее:

  • установите писчик пользовательских событий, который будет хранить определенное событие в назначенной таблице БД с полями, предназначенными для событий. Писчик событий автоматически создаст таблицу.
  • проверьте структуру таблицы, используя утилиту управления базой данных, чтобы определить, какие поля доступны
  • создайте новое устройство и выберите Базу Данных SQL в качестве драйвера устройства
  • скопируйте устройство БД (Драйвер БД, URL, имя пользователя, пароль и пр.) из глобальной настройки БД SberMobile Server .

После этого Вы можете выполнить любой SQL-запрос по таблице пользовательских событий, используя операцию Выполнить запрос, предоставленную драйвером устройства БД.

Например, чтобы выбрать события, используя SQL, следует использовать следующий отчет Выражение данных источника:  

{users.admin.devices.linkserver_database:executeQuery("SELECT * FROM logins WHERE username = 'john'")}