Как использовать DQL-запросы: различия между версиями

Материал из Документация Ключ-АСТРОМ
Полностью удалено содержимое страницы
 
Строка 1: Строка 1:
Язык запросов Ключ-АСТРОМ ('''DQL''') знакомит вас с важными концепциями, которые следует усвоить при начале работы.


'''DQL'''-запрос — это запрос, доступный только для чтения, на обработку данных и возврат результатов. Запрос формируется простым текстом с использованием конвейерной модели потока данных, которую легко читать, создавать и автоматизировать.
== Объединение команд с помощью оператора ==
'''DQL'''-запрос содержит как минимум одну или несколько команд, каждая из которых возвращает табличный вывод, содержащий записи (строки) и поля (столбцы). Все команды разделены символом «'''|'''» (конвейером). Данные передаются потоком или по воронке от одной команды к другой. На каждом этапе данные фильтруются или обрабатываются, а затем передаются на следующий этап.
[[Файл:Image4040.png|граница]]
После каждой операции '''DQL''' возвращает таблицу или набор таблиц с данными. Оператор конвейера передаёт эти таблицы в следующую операцию, где они подвергаются дальнейшей обработке или изменению. Это позволяет легко выстраивать пошаговые цепочки операций до достижения конечного, желаемого результата.
Поскольку передача информации от одного оператора к другому является последовательной, порядок операторов запроса важен и может влиять как на результаты, так и на производительность.
Лучший способ изучить '''DQL''' — начать с базовых запросов.
== Загрузить данные ==
Команда '''DQL''' <code>fetch</code> определяет, какие данные следует загрузить из Ключ-АСТРОМ и при необходимости обработать на следующих этапах конвейера обработки.
Команда <code>fetch</code> требует указания типа данных, которые должен получить конвейер первичной обработки. В следующем примере используются логи.
{| class="wikitable"
|fetch logs
<nowiki>|</nowiki> filter loglevel == "ERROR"
<nowiki>|</nowiki> summarize numErr = count()
|}
Оператор начинается с загрузки (<code>fetch</code>) всех загруженных логов. Поскольку на первом этапе временной интервал запроса не был указан, применяется временной диапазон, указанный в пользовательском интерфейсе Ключ-АСТРОМ. Он содержит три команды: <code>fetch</code>, <code>filter</code>, и <code>summarize</code>, разделенные вертикальной чертой.
Записи логовередаются в команду фильтра, которая сокращает количество выходных записей на основе указанного выражения фильтра. Последняя строка возвращает таблицу с одним полем и одной записью, содержащей количество оставшихся строк.
{| class="wikitable"
!numErr
|-
|<code>34</code>
|}
Вы также можете изменить тип данных <code>events</code>, используя команду <code>fetch</code>, добавив после неё <code>events</code>. В примере запроса показано суммарное значение для поля <code>amount</code> в наборе данных событий.
{| class="wikitable"
|fetch events
<nowiki>|</nowiki> summarize Total_amount = sum(amount)
|}
{| class="wikitable"
!Total_amount
|-
|<code>1,064,497</code>
|}
== Укажите временные рамки ==
Мы предлагаем использовать элементы управления, предлагаемые пользовательским интерфейсом, для выбора временного интервала запроса.
Однако оператор '''DQL''' позволяет переопределить выбор пользовательского интерфейса, используя параметр <code>from</code> или <code>to</code> для указания желаемого временного диапазона. Если в приложении или '''API''' не указано иное, временной интервал по умолчанию составляет 2 часа.
В этом примере с относительными временными диапазонами выполняются запросы к журналам за последние два часа:
{| class="wikitable"
|fetch logs, from:now() - 2h
|}
В этом примере запрашиваются журналы за последние 24 часа, за исключением последних двух часов:
{| class="wikitable"
|fetch logs, from:now() - 24h, to:now() - 2h
|}
Вы также можете использовать абсолютные временные диапазоны с параметром <code>timeframe</code>:
{| class="wikitable"
|fetch logs, timeframe:"2021-10-20T00:00:00Z/2021-10-28T12:00:00Z"
|}
== Фильтр по логическому выражению ==
Уточните список запрашиваемых записей с помощью <code>filter</code>. Используйте операторы типа <code>==</code> или <code>!=</code> для включения или исключения полей с определёнными значениями. Функции типа <code>endsWith</code> или <code>contains</code> позволяют включать поля, которые заканчиваются или содержат определённую строку.
{| class="wikitable"
|fetch logs, from:now() - 2h
<nowiki>|</nowiki> filter loglevel == "SEVERE" or loglevel == "ERROR" and not endsWith(log.source,"audit.log")
|}
== Выберите подмножество полей ==
{| class="wikitable"
|fetch logs
<nowiki>|</nowiki> fields timestamp, loglevel, log.source, content
|}
== Упорядочить результаты с помощью сортировки ==
По умолчанию команда '''sort''' сортирует записи по возрастанию. В следующем примере мы сортируем результаты по убыванию.
{| class="wikitable"
|fetch logs
<nowiki>|</nowiki> filter loglevel == "SEVERE" or loglevel == "ERROR"
<nowiki>|</nowiki> fields timestamp, loglevel, dt.process.name, host.name, content
<nowiki>|</nowiki> limit 5
<nowiki>|</nowiki> sort timestamp desc
|}
== Агрегации ==
В этом примере рассчитывается количество событий <code>booking.process.started</code>. Агрегация намеренно учитывает только рабочие дни и часы (пн-пт, с 8:00 до 17:00).
{| class="wikitable"
|fetch events
<nowiki>|</nowiki> filter event.type=="booking.process.started"
<nowiki>|</nowiki> fieldsAdd hour=formatTimestamp(timestamp,format:"hh"), day_of_week=formatTimestamp(timestamp,format:"EE")
<nowiki>|</nowiki> filterOut (day_of_week  == "Sat" or day_of_week == "Sun") or (toLong(hour) <= 08 or toLong(hour) >= 17)
<nowiki>|</nowiki> summarize numStarts = count(), by:{product}
|}
== Агрегации с течением времени ==
'''DQL''' предоставляет специальные команды, такие как <code>makeTimeseries</code>, для агрегации списка необработанных записей событий в виде временного ряда, пригодного для построения графика. Давайте рассмотрим логи, сгруппированные по уровню логов и 5-минутному интервалу агрегации:
{| class="wikitable"
|fetch logs
<nowiki>|</nowiki> filter loglevel == "SEVERE" or loglevel == "ERROR"
<nowiki>|</nowiki> makeTimeseries count = count(), by:loglevel, interval:5m
|}
== Изучите приложение DQL ==
Вы можете изучить '''DQL''', используя практический опыт с помощью интерактивных обучающих программ в приложении '''Learn''' '''DQL'''. Вы можете использовать приложение, если являетесь клиентом с доступом к SaaS-среде Ключ-АСТРОМ или зарегистрированным участником сообщества Ключ-АСТРОМ. Вы также можете зарегистрироваться на 15-дневную бесплатную пробную версию, чтобы опробовать приложение.

Текущая версия от 17:21, 22 октября 2026