Типы данных DQL
- Latest Dynatrace
Dynatrace Query Language работает со строго типизированными данными: функции и операторы принимают только объявленные типы данных. Тип присваивается данным во время разбора или с помощью функций приведения типов. DQL также распознает типы значений, выраженные в литеральной нотации (например, при использовании константных значений в функциях).
Примитивные типы¶
Boolean¶
Boolean имеет только два возможных значения: true и false.
- Литеральная нотация
Значение Boolean может быть выражено в верхнем или нижнем регистре:
true,TRUE,false,FALSE -
Преобразование в Boolean
-
Преобразует строковые значения
true,TRUEв значение Booleantrue, а остальные значения -- вfalse. - Преобразует числовое значение
0в Booleanfalse. Другие числовые значения преобразуются в Booleantrue.
...
| fields toBoolean("true"), toBoolean("TrUe"), toBoolean("1"), toBoolean(3), toBoolean("test"), toBoolean(0)
boolean_expr1 AND boolean_expr2
boolean_expr1 OR boolean_expr2
boolean_expr1 XOR boolean_expr2
NOT boolean_expr
Long¶
Знаковый тип long имеет минимальное значение -2^63 и максимальное значение 2^63-1.
- Литеральная нотация
LONG может быть выражен в десятичной или шестнадцатеричной нотации:
десятичная:
-9223372036854775808до9223372036854775807шестнадцатеричная:0x0до0xFFFFFFFFFFFFFFFF - Преобразование в Long
Double¶
64-битное число с плавающей запятой двойной точности стандарта IEEE 754.
- Литеральная нотация
десятичная: 2.34
научная: 2.4e2
* Преобразование в Double
Преобразует числовые значения и выражения в значение double.
Timestamp¶
Ссылка на момент времени с точностью до наносекунды.
Основное использование выражений времени -- указание пользовательского временного диапазона запроса в строке запроса DQL:
Функции и сравнение
...
| fields time = toTimestamp("2022-08-01T12:00:00+01:00")
| fieldsAdd time == now(), time > now()-10d, newTime = time + 3d
Timeframe¶
Определенный временной интервал с временем начала и временем окончания в виде меток времени с точностью до наносекунды. Для отображения полного результата запроса, включая наносекунды, измените визуализацию данных в Notebooks на raw.
Duration¶
Длительность между двумя метками времени, состоящая из величины и единицы измерения времени.
Временные литералы
Следующие временные литералы могут использоваться для выражения длительности:
ns: наносекундыms: миллисекундыs: секундыm: минутыh: часыd: дни1w: неделиM: месяцыq: кварталыy: годы
1
При использовании d в вычислениях он рассматривается как календарный день, в противном случае представляет длительность 24h.
Календарные длительности
Вы можете использовать календарные длительности (d, w, M, q и y) в вычислениях, как показано в примере ниже, но не в качестве значений полей.
Создание длительности
Во многих случаях разобранное числовое значение семантически представляет длительность. Функция duration() позволяет создать поле типа duration с указанной единицей измерения, используя доступные временные литералы.
Преобразование в длительность
Преобразование значения в наносекундах в duration:
Преобразование периода между timestamp1 и timestamp2 в duration:
Для иллюстрации мы вычисляем возраст последнего сообщения лога, полученного от определенного хоста.
...
...
fetch logs
| filter dt.entity.host == "HOST-DD5679D1A0C6426C"
| sort timestamp desc
| limit 1
| fields timestamp, age_message = now()-timestamp
String¶
Последовательность символов с указанной кодировкой.
-
Литеральная нотация Заключите строку в двойные кавычки. При необходимости экранируйте двойные кавычки в строке обратной косой чертой
\. Строка может содержать одинарные кавычки. Также вы можете заключать строки в тройные кавычки, например """someString""". -
Внутри тройных кавычек экранирование не требуется.
- Тройные кавычки не допускаются как часть строки. В таком случае вы можете использовать стандартные строки или функцию concat.
- Преобразование в String Все типы данных DQL могут быть преобразованы в строку:
...
| fields toString(toBoolean(1)), toString(array(1,2,3)), toString(1), toString(toTimestamp(now())), toString(toIpAddress("192.168.0.1"))
IpAddress¶
Представляет адрес IPv4 или IPv6.
UID¶
Тип данных, используемый для представления 64-битных и 128-битных идентификаторов.
Вы можете использовать следующие функции DQL для создания данных типа UID:
- uid64
- uid128
- toUid
Составные типы¶
Array¶
Структура данных, содержащая последовательность значений, каждое из которых идентифицируется индексом.
- Доступ к элементам массива
...
| fieldsAdd int_array = array(1,2,2,3,4,5)
| fields first_element = int_array[0], fifth_element = int_array[4]
==.
...
| ...
| fields a=array(1,2), b=array(1,2,3), c=array("a","b"), d=toArray("c,d")
| fields a == b, arraySize(b) > arraySize(c)
Полный список функций DQL для работы с массивами см. для получения дополнительной информации.
Record¶
Набор пар ключ-значение, где значение может быть любым типом данных DQL.
- Доступ к элементам RECORD Доступ к элементам данных осуществляется по ключу:
...
| fields person = record({name="john", age=33, address=record({city="Atlanta", pcode="30308"})})
| fields person[name], person[address][pcode]
record(expression,...) преобразует одно или несколько выражений, возвращающих любой тип данных, в RECORD:
Разбор
Разбор строк JSON или пар ключ-значение приводит к получению данных типа RECORD.
STRUCTURE{matcher_expr, ...}:fieldname
JSON{matcher_expr, ...}:fieldname
KVP{matcher_expr, ...}:fieldname
$subpattern:fieldname
...
| fields str = "name=\"john\"; age=33; city=\"Atlanta\""
| parse str, "KVP{LD:key'='(LONG:valueLong | STRING:valueStr)'; '?}:person"
| fields person[name], person[age], person[city]
...
| fields str = "{\"type\":\"update\",\"host\":\"CI_preprod_1\",\"version\":\"10.2.2367\"}"
| parse str,"JSON:event"
| fields event[type], event[host], event[version]
Связанные темы¶
- Dynatrace Query Language
- Использование запросов DQL
- Сравнение DQL с SQL и другими языками
- Справочник по языку DQL
- Команды DQL
- Функции DQL
- Операторы DQL
- Лучшие практики DQL