Запросы

Язык структурированных запросов SQL представляет собой мощный язык запросов для извлечения и обработки данных.  SberMobile SberMobile Server изначально поддерживает SQL, тем самым обеспечивая легкий доступ как к внутренним данным, так и к данным оборудования. Специальный диалект SQL, поддерживаемый SberMobile Server, называется "Язык запросов SberMobile".

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

Запросы нужны для:

  • Просмотра/редактирования нескольких свойств множества ресурсов/устройств в одной сводной таблице
  • Нахождения/фильтрации данных и активации тревог, если выбранные табличные данные удовлетворяют некому условию
  • Построения отчета
  • Экспорта данных во внешнюю систему или файл
  • Сортировки и фильтрации существующих табличных данных

Данный раздел не является руководством по языку SQL. Предполагается, что вы уже знакомы с SQL и его синтаксисом. Мы не пытаемся усложнить вашу задачу - язык запросов SQL представляет собой объемную тему, по которой написано достаточное количество книг и руководств. Поэтому, если вы не знакомы с SQL, вам необходимо получить общее представление о предмете. Как только вы этого добьетесь, возвращайтесь к данному разделу, чтобы узнать, как мы его выполняем в SberMobile. В разделе ссылки SQL мы привели перечень источников, где вы можете найти более подробную информацию о языке запросов SQL.

Цель языка запроса

Язык запроса SberMobile имеет два применения:

  • Получение данных от объектов сервера или оборудования, фильтрация, сортировка, группировка и их представление пользователю в удобной форме (в виде таблицы).
  • Модификация свойств различных контекстов (например, конфигурация различных аппаратных средств) посредством ввода значений для настроек в таблице.
  • Первая задача выполняется, используя запрос выборки обычных данных ("ВЫБРАТЬ"), создавая таблицу данных, которую можно увидеть в пользовательском интерфейсе SberMobile Server (таком как SberMobile IIoT Platform Client).

    Например, вы можете написать запрос, который отображает трафик всех Device Server в системе в виде удобной таблицы:

    Запросы также представляют результаты, которые можно редактировать, позволяя пользователю вводить данные, например, для конфигурации нескольких экземпляров одного устройства. Итак, вы можете использовать запрос для доступа к настройкам всех Device Server в системе и редактировать их в одной таблице:

    Запросы также могут быть использованы в различных средствах SberMobile Server. Например, вы можете установить тревогу, которая будет активирована, если результат запроса удовлетворит некоторому условию (см. пример Проблемы оборудования в главе Тревоги для получения более подробной информации). Результаты запроса могут конвертироваться в пригодный для печатания отчет во время их просмотра (например, используя свойство "Сформировать отчет" редактора таблицы данных в SberMobile IIoT Platform Client). Также могут быть использованы виджеты для представления данных, ранее собранных и обработанных запросом.

    Отличия от классического SQL

    Существует два главных отличия между "обычным" SQL, используемым большинством процессоров баз данных (таких как MySQL или Oracle) и языком запросов SberMobile.

    Первое отличие: Таблицы против контекстов

    Обычный SQL использует таблицы в качестве главного источника данных. Каждый запрос "ВЫБРАТЬ" ссылается на одну или более таблицы, из которых выбираются данные. Ссылка на данные указываются в разделе "ОТ".

    Язык запросов SberMobile работает с данными, которые хранятся в контекстах SberMobile Server. Доступ к этим данным осуществляется при получении контекстных переменных (свойств) или при вызове контекстных функций. Значение каждой переменной контекста представляются таблицей данных, которая имеет поля, записи и ячейки. Эти таблицы данных используются процессором языка запросов в качестве таблиц, из которых выбираются данные.

    Тот же метод может использоваться для ссылки на таблицы, содержащие значения выхода функций контекста. Когда  запрос "ВЫБРАТЬ" ссылается на такую таблицу (содержащую возвращаемые функцией значения), ссылка должна включать входные параметры для данной функции. Когда запрос выполнен, вызов функции осуществляется с данными параметрами. Данная функция затем формирует таблицу данных, содержащую возвращаемые значения, которые, в свою очередь, будет использоваться запросом.

    В статье Синтаксис языка запросов данные ссылки на переменные контекста или функции называются contextReference. Каждая contextReference может иметь альтернативное имя (tableAlias), которое используется для ссылки на нее из других частей запроса.

    Подобно обычному SQL, язык запросов SberMobile поддерживает вложенные запросы, где раздел "ОТ" запроса "ВЫБРАТЬ" содержит другой запрос "ВЫБРАТЬ".

    Второе отличие: Ссылки на поля в разделе

    "

    ОТ

    "

    Второе отличие касается ссылки на поля таблиц, указанные в разделе "ОТ".

    В обычном SQL ссылка на поле таблицы состоит из двух частей: tableAlias.fieldName. Первая часть - имя таблицы, ее алтернативное имя в разделе "ОТ" или альтернативное имя для вложенного запроса "ВЫБРАТЬ". Вторая часть представляет собой имя поля.

    в SberMobile ссылка на поле таблицы состоит из трех частей. Выглядит это таким образом: tableAlias.fieldAlias. tableAlias - альтернативное имя для таблицы, формируемой из данных контекста (см. выше Первое отличие). fieldAlias в форме entityName$fieldName. entityName - имя переменной контекста или функции (такой как childInfo, которая является переменной "Информация о пользователе" контекста пользователь). fieldName является специальным полем переменной или возвращаемым функцией значением (такой как firstname, имя пользователя для контекста userInfo).

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

  • Имена таблиц, используемые в обычном SQL, заменяются на контекстные ссылки. Однако каждая контекстная ссылка используется для построения таблицы до выполнения запроса. Поэтому процессор языка запросов SberMobile обрабатывает таблицы подобно обычному движку базы данных.
  • Имена полей, используемые в обычном SQL, заменяются на ссылки на поля. Но данные ссылки на поля служат так же, как и обычные имена полей в классическом запросе SQL. Просто у них немного отличается синтаксис, позволяя пользователю ссылаться на поля "виртуальных" таблиц, формируемых из контекстных ссылок. Чтобы увидеть точную разницу в синтаксисе и заложенной в нем логике, пожалуйста, прочитайте о ссылках на поля.
  • При выполнении запроса SQL вы получаете информативную таблицу, содержащую только значения данных. Однако при выполнении запроса SberMobile вы получаете то, что мы называем Таблицей данных, которая более рациональна, чем "просто" таблица - она содержит условия данных, типы полей и другие подобные метаданные.
  • Поток выполнения запросов

    Данный раздел представляет пошаговое описание того, как используется текст запроса для формирования результатов запроса.

  • На первой стадии процессор запроса находит все контекстные ссылки в разделе "ОТ" текста запроса. Данные ссылки затем используются для построения специально подобранных для этого таблиц, содержащих данные из действующих контекстов, для которых в дальнейшем будет выполнен запрос. Данный процесс описан здесь.
  • Классический запрос SQL выполняется с использованием таблиц, которые были созданы на предыдущей стадии. Запрос формирует таблицу, построенную согласно синтаксису запроса.
  • Далее эта таблица конвертируется в таблицу данных. Это облегчает понимание: конечная таблица данных содержит описания всех полей, правила форматирования и подтверждения соответствия, а также любые другие метаданные, которые могут быть выбраны из таблиц данных, для которых был выполнен запрос. Итак, в сущности, SberMobile использует запрос для создания таблицы данных. Мы упомянули здесь предыдущий шаг (2) только для того, чтобы дать вам краткое представление о внутреннем устройстве системы.
  • Результат запроса показывается пользователю. Если результат можно редактировать, пользователь может внести изменения в представленные данные.
  • Если пользователь сохраняет измененные результаты, процессор выполнения запроса снова записывает все измененные данные в переменные контекста, из которых они были получены.
  • Как было указано в предыдущей главе, различие между запросом SberMobile и обычным запросом SQL заключается в том, что он выполняется для "виртуальных" таблиц, формируемых из данных контекста, нежели чем из "простых" таблиц.

    Обзор синтаксиса запроса

    Единственной операцией, которую поддерживает язык запросов SberMobile, является операция выборки, которая выполняется с ключевым словом ВЫБРАТЬ. ВЫБРАТЬ получает данные из назначенной таблицы или из нескольких связанных таблиц, которые создаются для данного случая, когда обрабатываются контекстные ссылки в запросе.

    Каждый запрос имеет несколько разделов:

    • Основной раздел ВЫБРАТЬ, определяющий, какие поля оригинальных таблиц должны быть включены в результат запроса.
    • Раздел ОТ, указывающий исходную таблицу или таблицы, из которых извлекаются данные. Раздел ОТ может включать дополнительный раздел ПРИСОЕДИНИТЬ, присоединяя связанные таблицы друг к другу на основе пользовательских критериев.
    • Раздел ГДЕ включает условное выражение, которое используется для фильтрации данных, полученных при выполнения запроса. Раздел ГДЕ применяется до раздела ГРУППИРОВАТЬ ПО. Технически раздел ГДЕ исключает все строки из результатного набора, где условное выражение не является true.
    • Раздел ГРУППИРОВАТЬ ПО используется для комбинирования или группирования строк со связанными значениями. ГРУППИРОВАТЬ ПО часто используется для подсчета статистики (общей, средней и т.д.) схожих строк или исключения повторяющейся строки из результата запроса.
    • Раздел ИМЕТЬ включает условное выражение, используемое для исключения строк после применения раздела ГРУППИРОВАТЬ ПО к результату.
    • Раздел ОБЪЕДИНИТЬ позволяет совмещать результаты двух и более разделов запроса ВЫБРАТЬ в один результат.
    • Раздел УПОРЯДОЧИТЬ ПО используется для определения столбцов, используемых для сортировки полученных данных, а также, должны ли они быть восходящими или нисходящими. Порядок строк, возвращаемых запросом, не определен до тех пор, пока не задан раздел УПОРЯДОЧИТЬ ПО.
    • Раздел ОГРАНИЧИТЬ ограничивает итоговый результат предварительно заданным количеством строк. Это область числовых значений. Например, если запрос выдает результат в 100 записей, а вам нужно 10 произвольных записей (первые десять, последние десять, десять записей, начиная с 15 записи и т.д.), вы можете использовать раздел ОГРАНИЧИТЬ, чтобы получить столько строк, сколько вам необходимо.

    Язык запросов SberMobile поддерживает большинство свойств стандартных запросов выборки SQL. Среди них вложенные запросы ВЫБРАТЬ, функции агрегации SQL, используемые для вычислений различных значений данных (COUNT, MIN, MAX, SUM, AVG и т.д.), и встроенные функции (числовые, строковые, даты/времени и системы).

    Более подробную информацию о синтаксисе языка запросов SberMobile вы найдете здесь.

    Администрирование запросов

    Для администрирования запросов используются два контекста: общий контекст Запросы, который служит контейнером, и контекст Запрос, который содержит информацию об одном запросе. См. ниже описания.

    Каждый пользователь имеет свой набор запросов.

    Встроенные запросы

    Некоторые запросы уже встроены в SberMobile Server и появляются под учетной записью администратора по умолчанию:

    • Все пользователи. Данный запрос позволяет просмотр и редактирование настроек всех учетных записей пользователей в одной таблице.
    • Сводная информация о статусах Device. Отображает статус подключения и синхронизации каждого Device.
    • Отключенные Device. Отображает все отключенные Device.
    • Активные тревоги. Отображает ожидающие и эскалированные тревоги.

    Данные запросы описаны в главе Примеры запросов.

    SQL ссылки

    Для получения более подробной информации о синтаксисе языка SQL перейдите по следующим ссылкам:

    http://en.wikipedia.org/wiki/SQL

    http://www.w3schools.com/sql/sql_select.asp

    http://sqlzoo.net/

    http://www.fluffycat.com/SQL/

    http://www.baycongroup.com/tocsql.htm