|
|
| Строка 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-дневную бесплатную пробную версию, чтобы опробовать приложение.
| |