Пользовательские запросы, сегментация и агрегация данных сеанса

Материал из Документация Ключ-АСТРОМ

Применение Ключ-АСТРОМ / Мониторинг реального пользователя / Применение / Аналитика сеансов между приложениями / Пользовательские запросы, сегментация и агрегация данных сеанса

Ключ-АСТРОМ собирает подробные данные о сеансе пользователя каждый раз, когда пользователь взаимодействует с вашим отслеживаемым приложением. Эти данные включают все действия пользователя и высокоуровневые данные о производительности. Используя API Ключ-АСТРОМ или язык запросов пользовательских сессий Ключ-АСТРОМ (USQL), вы можете легко выполнять мощные запросы, сегментацию и агрегирование этих захваченных данных. Чтобы помочь вам, в этом разделе приведены подробные сведения о ключевых словах и функциях, синтаксисе, работе с таблицами Real User Monitoring, автоматических запросах и многом другом.

Имейте в виду, что в Ключ-АСТРОМ версии 1.204 мы представили новые счетчики ошибок в USQL и экспорте сеансов для каждого действия пользователя, которые полностью согласуются с Ключ-АСТРОМ. В свою очередь, в Ключ-АСТРОМ версии 1.217 мы перестанем поддерживать следующие счетчики ошибок:

  • useraction.errorCount— Включает только ошибки JavaScript.
  • useraction.httpRequestsWithErrors— Учитывает только ошибки на стороне сервера.
  • useraction.failedXHRRequests— Учитываются только неудачные вызовы XHR, сделанные в браузере вашего конечного пользователя.
  • useraction.failedImages— Будет включено в новый requestErrorCount. Узнайте больше о том, как лучше всего заменить существующие счетчики ошибок новыми.

Язык запросов сеансов пользователей не является SQL , и Ключ-АСТРОМ не хранит данные сеансов пользователей в реляционной базе данных. Язык запросов сеансов пользователей — это язык запросов, специфичный для Ключ-АСТРОМ, хотя он опирается на некоторые концепции SQL, а его синтаксис аналогичен, что облегчает начало работы.

Выберите предпочтительный подход:

Запросы сеанса пользователя через веб-интерфейс Ключ-АСТРОМ

  1. В меню Ключ-АСТРОМ выберите Запрос пользовательских сессий .
  2. Введите запрос и выберите Выполнить запрос .

Селектор таймфрейма с USQL

С помощью селектора таймфрейма данные сеанса пользователя можно фильтровать на основе выбранного таймфрейма анализа. Выберите новый таймфрейм.

Элементы управления селектором таймфрейма

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

  • На вкладке Presets перечислены все доступные стандартные таймфреймы. Выберите один, чтобы изменить таймфрейм на этот пресет.
  • На вкладке Custom отображается календарь. Щелкните день начала, щелкните день окончания, а затем нажмите Применить , чтобы выбрать этот диапазон дней в качестве временного интервала.
    • Выбранные календарные интервалы устанавливаются так, чтобы заканчиваться в начале следующего дня (со временем, установленным на 00:00). Например, если вы выберете период с 3 по 4 сентября в календаре, период времени начнется 3 сентября в момент времени 00:00и закончится 5 сентября в момент времени 00:00, поэтому вы никогда не пропустите последнюю минуту диапазона времени. Вы можете редактировать это отображаемое время.
  • На вкладке « Недавние » отображаются недавно использовавшиеся таймфреймы. Выберите один, чтобы вернуться к этому периоду времени.
  • Элементы управления < и > сдвигают временной диапазон вперед или назад по времени. Приращение — это длина исходного временного диапазона. Например, если текущий временной диапазон равен Last 2 hours(двухчасовой диапазон, заканчивающийся сейчас), щелкните < , чтобы сдвинуть временной диапазон на два часа назад, к -4h to -2h(двухчасовой диапазон, заканчивающийся два часа назад).
  • Наведите указатель мыши на временной интервал, чтобы увидеть время начала, продолжительность и время окончания.

Выражения выбора таймфрейма

Если вы выберете текущий таймфрейм в строке меню, отобразится редактируемое выражение таймфрейма.

  • Если читать слева направо, выражение таймфрейма имеет время начала, toоператор и время окончания.
  • Если явное время окончания не указано, символы toи nowподразумеваются. Например, -2hто же самое -2h to now.
  • Поддерживаемые единицы: s, m, h, d, w,M , q, y(вы также можете использовать целые слова, такие как minutesи quarter)
Примеры выражений таймфрейма Значение
today С начала сегодняшнего дня до начала завтрашнего дня.
yesterday С начала вчерашнего дня до начала сегодняшнего дня. Как -1d/d to today.
yesterday to now С начала вчерашнего дня до текущего времени сегодня.
previous week Предыдущие семь целых дней. Если сегодня понедельник, вы получаете от предыдущего понедельника до предыдущего воскресенья (вчера).
this year Текущий календарный год, с 1 января текущего года 00:00по 1 января следующего года по 00:00.
last 6 weeks Последние 42 дня (6 недель * 7 дней), заканчивающиеся сейчас. Эквивалентно -6w to now.
-2h От 2 часов (120 минут) назад до текущего времени ( nowподразумевается). Эквивалентно Last 2 hoursи-2h to now .
-4d to -1h30m От 4 дней (96 часов) назад до 1,5 часов назад.
-1w Последние 7 дней (168 часов), начиная с этого времени 7 дней назад и заканчивая текущим временем ( now). Эквивалентно -7dи -168h.
-1w/w С начала предыдущей календарной недели до текущего времени (сейчас).
  • Если вы использовали-1w/w в пятницу днем ​​в 3:00, вы получите диапазон 11 дней 15 часов, начиная с начала понедельника предыдущей недели, потому что /wокругляется до начала недели.
  • Если вы использовали-1w без /wв пятницу в 3:00 дня, время начала будет ровно на 7 дней (168 часов) раньше: в предыдущую пятницу в 3:00 дня.

Как правило, /использование в сочетании с единицей измерения (например /d, /w, /M, и /y) означает округление даты или времени в меньшую сторону до начала указанной единицы времени. Например, -3dозначает ровно 72 часа назад, тогда как -3d/dозначает три дня назад, округленное до ближайшего дня (начиная с time 00:00, начало дня). Используется now/dдля обозначения начала сегодняшнего дня.

-1w/w + 8h Начиная с начала прошлой недели плюс 8 часов (8:00 утра понедельника).
  • Обратите внимание, что вы можете использовать операторы +и с единицами измерения, отметками времени и .-now
-1d/d+9h00m to -1d/d+17h00m Время работы вчера, с 09:00 до 17:00 (с 9:00 до 17:00).
2020-08-16 21:28 to 2020-08-19 10:02 Абсолютный диапазон, состоящий из абсолютных дат и времени начала и окончания вYYYY-MM-DD hh:mm формате.
  • Если указать дату, но опустить время (например, просто2020-08-16 ), время считается началом дня ( 00:00) .
  • Если вы укажете время, но не укажете дату (например, просто 21:28), предполагается, что это сегодняшняя дата.
1598545932346 to 1598837052346 Временные метки эпохи Unix в миллисекундах.

Автозаполнение с USQL

Автозаполнение доступно для операторов запроса на основе введенного в данный момент текста. Автозаполнение зависит от контекста и основано на текущем контексте курсора. Он разумно предугадывает, какой текст вы, возможно, захотите ввести дальше.

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

Список полей содержит только допустимые поля или функции для выбранной таблицы, а его контекстная зависимость показывает только числовые поля, когда курсор находится внутри вызова функции, который работает только с числовыми данными, такими как SUM(), или AVG().

Значения полей предлагаются только для полей на основе перечисления. Фактический запрос к Elasticsearch не выполняется для автозаполнения.

API среды Ключ-АСТРОМ

Вы можете выполнять вызовы API, используя предпочитаемый вами клиент. Найдите соответствующую документацию по API в User Sessions API . Кроме того, вы можете использовать API Explorer. Чтобы получить к нему доступ, выберите Environment API v1 в меню пользователя в правом верхнем углу.

Для выполнения этих вызовов вам необходимо разрешение сеансов пользователей ( DTAQLAccess), назначенное вашему токену API. Чтобы узнать, как получить и использовать токен, см. раздел API Ключ-АСТРОМ — токены и аутентификация .

Таймфреймы в Environment API

Доступ к данным сеанса пользователя всегда должен осуществляться с указанием временных рамок. Доступ к большим временным рамкам может быть дорогостоящим из-за большого количества потенциальных одиночных совпадений с запросами.

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

Однако вы можете использовать поля времени, такие как starttimeи endtime, для выбора периода времени. Вы также можете использовать эти поля в функциях, например, чтобы узнать, в какое время дня начинается большинство сеансов пользователей, как в HOUR(starttime).

Ключевые слова и функции

Следующие ключевые слова были определены для доступа к данным сеанса пользователя:

AND, AS, ASC, BETWEEN, BY, DESC, DISTINCT, FALSE, FROM, GROUP, IN, IS, JSON, LIMIT, NOT, NULL, OR, ORDER, SELECT, STARTSWITH, TRUE, WHERE_LIKE _FILTER

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

SUM, MAX, MIN, AVG, MEDIAN, COUNT, YEAR, MONTH, DAY, HOUR, MINUTE, DATETIME, TOP,PERCENTILE ,KEYS

Ключевые слова, функции и имена столбцов нечувствительны к регистру. Строковые совпадения вWHERE условиях чувствительны к регистру.

Синтаксис

Типичный запрос строится из следующих ключевых слов:

SELECT <columns> FROM <table> WHERE <condition> GROUP BY <grouping> ORDER BY <ordering>

Однако единственными обязательными элементами являются SELECT <columns>иFROM <table> .

Пример

Часто используемые ключевые слова

ВЫБРАТЬ<columns>

Выбирает один или несколько столбцов из указанной таблицы данных или выполняет функции агрегирования из набора поддерживаемых функций.

columns: [DISTINCT] <column>, <column>, ... | function(<parameter>) |
<column> AS <alias> | JSON

Пример

SELECT country, city, browserfamily FROM usersession
SELECT DISTINCT country, city, useractioncount FROM usersession
SELECT country, city, avg(duration) AS average FROM usersession GROUP BY country, city

ВОРОНКА

Позволяет использовать предопределенный формат воронки для запроса. Может использоваться для отображения потока конкретных действий пользователя. Также можно комбинировать с настраиваемыми свойствами сеанса и другими условиями.

Он изменяет синтаксис любого запроса на следующий:

SELECT FUNNEL (<condition> AS <alias>, <condition>, ...) FROM <table> WHERE <condition>

Пример 1

Вместо выполнения следующих трех запросов:

SELECT COUNT(*) FROM usersession where useraction.name = "AppStart"
SELECT COUNT(*) FROM usersession where useraction.name = "AppStart" AND useraction.name = "searchJourney"
SELECT COUNT(*) FROM usersession where useraction.name = "AppStart" AND useraction.name = "searchJourney"  AND useraction.name = "bookJourney"

Следующий одиночный запрос возвращает тот же результат:

SELECT FUNNEL (useraction.name = "AppStart", useraction.name = "searchJourney", useraction.name = "bookJourney")
FROM usersession

Пример 2

Чтобы получить список пользователей, которые успешно забронировали путешествие:

SELECT FUNNEL (useraction.name="login", useraction.name = "searchJourney", useraction.name = "bookJourney")
FROM usersession

ИЗ<table>

Вы можете указать только одну таблицу. Таблицы для данных сеанса пользователя: usersession, useractionи userevent.

Пример

SELECT country, city, browserfamily FROM usersession
SELECT name, starttime, endtime, duration FROM useraction ORDER BY duration DESC

КУДА<condition>

Вы можете комбинировать несколько условий, используя логическую логику и круглые скобки внутри WHEREпредложения, например, WHERE (city = 'Barcelona' AND country = 'Spain')чтобы включить только города с названием Барселона, которые находятся в Испании.

condition: (condition AND condition) | (condition OR condition) | field IN(...) |
field IS <value> | field IS NULL | field = <value> | field > <value> | field < <value> |
field <> <value> | field IS NOT <value> | field BETWEEN <value> AND <value> | ...

Однако значение может содержать только правая часть условий, поэтому сравнивать два поля нельзя.

Пример

SELECT country, city, browserfamily FROM usersession WHERE country = 'Albania' AND screenWidth > 1000
SELECT top(country, 20), top(city, 20), TOP(duration, 10), avg(duration) AS average
FROM usersession **WHERE** duration BETWEEN 1000 AND 2000 GROUP BY top(country, 20), top(city, 20), TOP (duration, 10)

ГРУППА ПО<grouping>

Всякий раз, когда поля агрегируются, вы должны указать соответствующие GROUP BYключевые слова, чтобы указать, как должно выполняться агрегирование.

grouping: <column>, ...

Пример

SELECT city, count(*) FROM usersession GROUP BY city
SELECT MONTH(starttime) as month, count (*) FROM usersession
GROUP BY month

ПРЕДЕЛ<limit>

Позволяет ограничить количество возвращаемых результатов. Например, вы можете выбрать только 10 лучших результатов в сочетании с упорядочиванием.

Платформа всегда применяет верхний предел для предотвращения перегрузки системы. Если LIMITне используется, по умолчанию возвращается 50 результатов.

Пример

SELECT city, starttime FROM usersession ORDER BY starttime DESC LIMIT 10

LIMITтакже может использоваться для увеличения количества результатов в случаях, когда LIMITпредложение отсутствует, потому что тогда применяется ограничение по умолчанию.

СОРТИРОВАТЬ ПО<ordering>

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

Заказ осуществляется по частоте. Например, 5 наиболее часто возвращаемых городов являются наиболее часто встречающимися. Указав поле в ORDER BYпредложении, вы можете добавить значение сортировки для строк, дат и чисел.

Заказ по enumsили по function valuesтаким, как AVGи SUMзаказывает возвращенные результаты, но вы можете не получить лучшие элементы. Например, если вы запрашиваете первые 5 результатов с помощью AVG(duration), запрос только 10 может добавить результаты даже вверху.

ordering: <column> ASC | <column> DESC | <column>, ...

Пример 1

SELECT useraction.name, starttime FROM usersession ORDER BY starttime DESC

Пример 2

Вы можете упорядочить подсчеты, добавив DISTINCTключевое слово.

SELECT DISTINCT city, COUNT(*) FROM usersession ORDER BY COUNT(*) DESC

Пример 3

Вы можете упорядочить функции в списке выбора, указав только имя столбца или псевдоним, определенный в файле SELECT.

SELECT avg(duration) AS average, count(*) as number, day(startTime) as startDay
FROM usersession where duration < 2000
GROUP BY startTime
ORDER BY average

или же

SELECT avg(duration) AS average, count(*) as number, day(startTime) as startDay
FROM usersession where duration < 2000
GROUP BY startTime
ORDER BY number DESC, average ASC

КАК

Позволяет сравнивать данные с выражением, используя подстановочные знаки для соответствия заданному шаблону. Можно использовать следующие символы:

  • %: соответствует любой строке из 0 или более символов
  • *: соответствует любой строке из 0 или более символов
  • ?: Соответствует любому одиночному символу

Строковые значения чувствительны к регистру. Например, SELECT city FROM usersession WHERE userId LIKE "*astromkey*"соответствует , me@ruscomtech.ruно не me@ruscomTech.ru. Чтобы избежать этого, используйте ?подстановочный знак, как в этом примере:SELECT city FROM usersession WHERE userId LIKE "*ruscom?ech*"

ФИЛЬТР

Позволяет фильтровать функции с числовыми значениями, тем самым отображая только конкретные результаты агрегирования.

Пример

SELECT useraction.application,
AVG(usersession.doubleProperties.bookings)
FILTER > 1500
FROM usersession
WHERE usersession.doubleProperties.bookings IS NOT NULL
GROUP BY useraction.application

Функции WHEREи FILTERне являются взаимозаменяемыми. Хотя это предложение можно использовать WHEREтолько для абсолютных значений, FILTERфункция работает и с агрегированными значениями.

Часто используемые функции

МИН(поле)

Запрашивает минимальное значение числового поля или поля даты.

Пример

SELECT MIN(duration), MAX(duration), AVG(duration), MEDIAN(duration)
FROM usersession

МАКС(поле)

Запрашивает максимальное значение числового поля или поля даты.

Пример

SELECT MIN(duration), MAX(duration), AVG(duration), MEDIAN(duration)
FROM usersession

СРЕДНЕЕ (поле)

Запрашивает среднее значение числового поля или поля даты. Может быть, NaNесли поле всегда null.

Пример

SELECT MIN(duration), MAX(duration), AVG(duration), MEDIAN(duration)
FROM usersession

МЕДИАНА(поле)

Запрашивает среднее значение числового поля или поля даты.

Пример

SELECT MIN(duration), MAX(duration), AVG(duration), MEDIAN(duration)
FROM usersession

СУММ(поле)

Вычисляет сумму числового поля.

Пример

SELECT TOP(name, 20), SUM(duration) FROM useraction
GROUP BY name

COUNT(поле), COUNT(*), COUNT(DISTINCT поле)

Подсчитывает количество совпадающих строк.

COUNT(*): подсчитывает количество совпадающих элементов.

COUNT(<field>): подсчитывает количество совпадающих элементов, где \<field>не является нулевым.

COUNT(DISTINCT <field>): подсчитывает количество различных значений для \<field>выбранных элементов.

Ключ-АСТРОМ отклоняет и не выполняет запросы COUNT(DISTINCT <field>), которые могут занимать много памяти. Это происходит для всех полей чрезвычайно высокой кардинальности, например, для таких dateTimeполей, как usersession.startTime, usersession.endTimeили useraction.networkTime.

Поля с чрезвычайно высокой кардинальностью

Пример

SELECT country, COUNT(*), COUNT(city), COUNT(DISTINCT city)
FROM usersession
GROUP BY country

ВЕРХ(поле, n)

Возвращает лучшие \<n>результаты из поля. По умолчанию 1(верхнее значение), если nне указано.

Пример

SELECT TOP(name, 20), SUM(duration)
FROM useraction
GROUP BY name

Если TOP(<field>, n)выбрано и результаты сгруппированы, но <field>не являются частью группировки, первые n элементов возвращаются в виде списка в одном поле.

SELECT TOP(country, 20), TOP(city, 3), COUNT(*)
FROM usersession
GROUP BY country

ГОД(поле даты), МЕСЯЦ(поле даты), ДЕНЬ(поле даты), ЧАС(поле даты), МИНУТЫ(поле даты)

Возвращает данный элемент, извлеченный из поля даты.

YEAR: 4-значный год. MONTH: Номер месяца от 1 до 12 DAY: День месяца от 1 до 31. HOUR: Значение часов от 0 до 23. MINUTE: Значение минут от 0 до 59.

Пример

SELECT starttime,
DATETIME(starttime), YEAR(starttime), MONTH(starttime), DAY(starttime), HOUR(starttime), MINUTE(starttime)
FROM usersession
ORDER BY starttime
DESC

ДАТАВРЕМЯ(поле даты [, формат [, интервал]])

Форматирует выбранное поле даты с заданной строкой формата. Формат по умолчанию yyyy-MM-dd HH:mm.

Допустимые буквы в строке формата:

  • y: год
  • M: месяц
  • d: день месяца
  • H: час (0-23)
  • h: час (1-12)
  • m: минута
  • s: второй
  • E: день недели (пн-вс)

year| _ month| weekинтервалы указаны для одного interval. Для d(дней), h(часов), m(минут) или s(секунд) вы можете использовать число, за которым следует буква для строки формата, например 5m. Например,SELECT DISTINCT DATETIME(starttime, 'HH:mm', '5m'), count(*) FROM usersession подсчитывает сеансы в пятиминутных блоках.

Пример

SELECT DATETIME(starttime, 'yyyy-MM') FROM usersession
SELECT DISTINCT DATETIME(starttime, 'HH:mm', '5m'), count(*) FROM usersession

УСЛОВИЕ(функция, условие)

Позволяет комбинировать несколько функций с различными условиями.

В строке формата разрешены следующие функции:

  • MIN()
  • MAX()
  • AVG()
  • SUM()
  • PERCENTILE()
  • MEDIAN()
  • COUNT()

Вы можете комбинировать несколько условий, используя логическую логику и круглые скобки с CONDITIONфункцией, например, CONDITION(COUNT(*), WHERE city = 'Barcelona' AND country = 'Spain')включать только города с названием Барселона, которые находятся в Испании.

CONDITION(function, condition)

condition:
(condition AND condition) | (condition OR condition) | field IN(...) |
field IS <value> | field IS NULL | field = <value> | field > <value> | field < <value> |
field <> <value> | field IS NOT <value> | field BETWEEN <value> AND <value> | ...

Вы также можете использовать FILTERфильтр предложений для функций с числовыми значениями, тем самым отображая только конкретные результаты агрегирования.

SELECT CONDITION(COUNT(usersessionId), WHERE userActionCount > 2 AND useraction.name = "search.jsp") FILTER > 1000, city FROM usersession GROUP BY city

Пример

SELECT CONDITION(COUNT(usersessionId), WHERE userActionCount > 2 AND useraction.name = "search.jsp") FROM usersession

SELECT CONDITION(SUM(usersession.duration), WHERE name = "index.jsp") AS c1, CONDITION(SUM(usersession.duration), WHERE name = "search.jsp") AS c2, CONDITION(SUM(usersession.duration), WHERE name IS NOT "index.jsp" AND name IS NOT "search.jsp") AS c3 FROM useraction WHERE (duration > 1000 OR usersession.userActionCount > 4)

SELECT CONDITION(SUM(usersession.duration), WHERE name = "index.jsp") AS c1 FROM useraction WHERE (duration > 1000 OR usersession.userActionCount > 4) ORDER BY c1

SELECT DATETIME(CONDITION(MIN(startTime ), WHERE useraction.application = "RUM Default Application" ), "yyyy-MM-dd" ) FROM usersession

ПРОЦЕНТИЛЬ

Представляет значение, ниже которого существует процент точек данных с более низким значением. Полезно для определения скорости вашего приложения для клиентов, которые получают самое медленное время отклика.

Пример

SELECT name, usersession.country, usersession.browserFamily,
AVG(duration),
MEDIAN(duration),
PERCENTILE(duration, 99)
FROM useraction
WHERE useraction.name = "easytravel/rest/login"
GROUP BY usersession.country, usersession.browserFamily, name
ORDER BY usersession.continent

КЛЮЧИ (пользовательское свойство)

Возвращает ключи действий пользователя или свойств сеанса пользователя в соответствии с типом данных свойства, определенным в аргументе.

Проверьте таблицу ниже, чтобы понять, возвращаются ли ключи свойств действия пользователя или ключи свойств сеанса пользователя.

КЛЮЧИ (пользовательское свойство) Стол Свойства действия Свойства сеанса
KEYS(<dataType>Properties) useraction ✔️
KEYS(<dataType>Properties) usersession ✔️
KEYS(useraction.<dataType>Properties) useraction ✔️
KEYS(useraction.<dataType>Properties) usersession ✔️
KEYS(usersession.<dataType>Properties) useraction ✔️
KEYS(usersession.<dataType>Properties) usersession ✔️

Часть <dataType>функции может принимать следующие значения:

  • string
  • long
  • double
  • date

Пример 1

SELECT KEYS(stringProperties) FROM useraction WHERE application = "easyTravel demo application"
SELECT KEYS(useraction.longProperties) FROM usersession WHERE applicationType="WEB_APPLICATION" ORDER BY keys(useraction.longProperties)
SELECT KEYS(usersession.stringProperties) FROM useraction WHERE usersession.city ="Berlin"

Для получения отдельных ключей действия или свойств сеанса используйтеDISTINCT KEYS(customProperty) .

Пример 2

SELECT DISTINCT KEYS(stringProperties) FROM useraction WHERE useraction.application = "easyTravel demo application" ORDER BY keys(stringProperties)
SELECT DISTINCT KEYS(doubleProperties) FROM usersession

Математические операции

В составе запросов поддерживаются следующие операции:

  • операции над числами
  • операции с числовыми полями и полями dateTime
  • операции над некоторыми функциями, такими как YEAR, MONTH, DAY, HOUR,MINUTE
  • операции над числовыми значениями и отображение их в различных целях измерения

Синтаксис

Number/NumericField/DateTimeField/Function OPERATOR Number/NumericField/DateTimeField/Function

Функция: YEAR, MONTH, DAY, HOURили MINUTE Оператор: +, -, *, /, %, илиMOD

Пример

SELECT 7 + 80 * 100, duration + startTime, MONTH(startTime) - 1
FROM usersession

Условия

Все условия должны начинаться с идентификатора, например имени поля, и должны сравниваться со значением. Два поля нельзя сравнивать друг с другом. Примечание . Текст в кавычках всегда чувствителен к регистру.

Основные операторы

Основные операторы сравнения: =, !=, <>, <, >, <=, >=, IS, иIS NOT .

Чтобы проверить, присутствует ли значение поля, сравните поле с NULL.

Пример

SELECT userId FROM usersession WHERE userActionCount > 3

Диапазоны

Диапазоны обрабатываются ключевыми словами, такими как BETWEEN, <lowerLimit>и <upperLimit>.

Пример

SELECT DISTINCT ip FROM usersession
WHERE ip BETWEEN "192.168.0.0" AND "192.168.255.255"

Наборы

Можно INиспользовать ключевое слово «укоротить» "WHERE" <field> = val1 OR <field> = val2 OR <field> = val3.

Пример

SELECT userId FROM usersession WHERE city IN ("NEW YORK", "San Francisco")

Строковые условия

Строковое условие проверяет, начинается "STARTSWITH"ли строка или поле перечисления с указанного текста.

Пример

SELECT city FROM usersession WHERE userId STARTSWITH "astromkey"

Значения даты и времени

Когда условия выполняются для поля даты и времени, поддерживаются следующие форматы значений:

Формат Описание Пример
Временная метка Unix в виде числа в миллисекундах 1514152800000
yyyy-MM-dd'T'HH:mm:ssZ Дата и время ISO с часовым поясом 2017-12-24T21:00:00+01:00
yyyy-MM-dd HH:mm:ss Дата с необязательным временем 2017-12-24 21:00
yyyy/MM/dd HH:mm:ss Дата с необязательным временем 2017/12/24 21
MM/dd/yyyy HH:mm:ss Дата с необязательным временем 12/24/2017
dd.MM.yyyy HH:mm:ss Дата с необязательным временем 24.12.2017 21:00:00

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

Формат Пример
HH:mm:ss 08:20:59
H:mm:ss 8:20:59
HH:mm 08:20
H:mm 8:20
HH 08
H 8

Если время отсутствует, 00:00:00предполагается значение по умолчанию.

Иногда запросы со значениями даты и времени могут давать неверные результаты из-за преобразования летнего времени. Если дата в запросе предшествует дате окончания перехода на летнее время (например, до 02:00 7 ноября 2021 г.), попробуйте использовать дату и время ISO со смещением времени, например, 2021-10-05T17:30:00+03:00.

Пример

SELECT starttime FROM usersession WHERE starttime > "8.8.2018 8:00"

Расширенные синтаксические конструкции

Запрос диапазонов IP-адресов

В поле IP можно запросить диапазоны адресов. Оба BETWEEN ip > <lower ipaddress range> AND ip < <upper ipaddress range>или BETWEEN <lower ipaddress range> AND <lower ipaddress range>работа.

Пример

SELECT * FROM usersession WHERE ip > '211.44.94.0' AND ip < '212.113.5.0'
SELECT * FROM usersession WHERE ip BETWEEN '211.44.94.0' AND '212.113.5.0'

Селектор периода запроса

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

  • TIME_FRAME_START
  • TIME_FRAME_END

Пример

SELECT * FROM usersession WHERE startTime >= $TIME_FRAME_START AND endTime < $TIME_FRAME_END

Относительный период времени запроса

Вы можете выбрать временной интервал относительно времени выполнения запроса. Текущее время выражается с помощью $NOWпеременной.

$NOW [+/-] DURATION("[number]TIME_UNIT")

Для выражения продолжительности поддерживаются следующие единицы времени:

  • y: год
  • q: четверть
  • M: месяц
  • d: день
  • w: неделя
  • h: час
  • m: минута
  • s: второй

Пример

SELECT * FROM usersession WHERE startTime >= $NOW - DURATION("1q") AND endTime <= $NOW
SELECT * FROM useraction WHERE startTime BETWEEN $NOW - DURATION("2h") AND $NOW
SELECT * FROM useraction WHERE usersession.startTime >= $TIME_FRAME_START - DURATION("2h") AND $NOW - DURATION("1h")

Период времени, выбранный в веб-интерфейсе Ключ-АСТРОМ или API Ключ-АСТРОМ, по-прежнему применяется к результатам, даже если фильтрация на основе временных меток используется как часть вашего запроса.

Вторичные таблицы для сеансов пользователей, действий пользователей и событий пользователей.

При использовании SELECTс usersession, useractionили userevent, можно получить доступ к столбцам из другой таблицы и включить их в результаты, добавив к именам столбцов префикс имени таблицы.

Пример 1

Выбор логического представления таблицы usersessionили . useractionsНесколько значений объединяются в результирующем столбце при добавлении информации из useractionв запрос на usersession.

SELECT city, useraction.name FROM usersession
SELECT usersession.city, name FROM useraction

Пример 2

Применяемые условия различаются по смыслу в зависимости от таблицы. Например, предположим, что вы хотите перечислить все сеансы пользователей, которые содержат действия пользователя aи b:

SELECT * FROM usersession
WHERE useraction.name = "a" and useraction.name = "b"

Это означает, что сеанс должен содержать действие пользователя "a"и действие пользователя "b". Выполнение одного и того же запроса к useractionтаблице вернет пустой результат, поскольку одно и то же действие пользователя не может иметь два разных значения для одного и того же имени.

Если вы хотите выбрать данные сеанса пользователя для определенного действия пользователя, соответствующего нескольким критериям, выполните следующий запрос:

SELECT usersession.*, * FROM useraction
WHERE useraction.name = "a" and useraction.duration > 1000

В этом случае каждое действие пользователя в результате удовлетворяет обоим условиям.

Фильтры для основных таблиц

Фильтры можно применять только к первичным таблицам. Рассмотрим следующий пример:

Пример 1

SELECT useraction.name FROM usersession WHERE useraction.name=”abc”

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

Пример 2

SELECT name FROM useraction WHERE name=”abc”

Этот запрос извлекает список всех пользовательских действий, называемых «abc», из всех пользовательских сеансов (которые формируют основную таблицу).

ВЫБЕРИТЕ * ИЗ таблицы

Пример

SELECT * FROM usersession
SELECT useraction.* FROM usersession
SELECT city, useraction.* FROM usersession
SELECT *, useraction.* FROM usersession

Примечание . Звездочка *сама по себе выбирает столбцы из основной таблицы, а не из дополнительной таблицы. Например, поля из useractionне включаются в SELECT * FROM usersession, если вы не включите useraction.*.

JSON-экспорт

Пример

SELECT usersessionId, browserFamily, useraction.name, useraction.duration, JSON
FROM usersession LIMIT 5

Экранирование строк

Строковые литералы можно заключать в одинарные или двойные кавычки. Однако, если вы хотите использовать один и тот же знак кавычек внутри строки, просто удвойте его.

Пример

SELECT * FROM usersession WHERE userId = "some 'custom' name for ""my user"""
SELECT * FROM usersession WHERE userId = 'some ''custom'' name for "my user"'

Диаграмма воронки

Воронкообразные диаграммы позволяют отслеживать этапы работы вашего цифрового сервиса и исследовать области проблем, с которыми сталкиваются ваши пользователи. В сочетании с Session Replay эта функция позволяет вам увидеть, в какой момент ваш пользователь испытывает затруднения в вашем приложении.

Пример

SELECT FUNNEL(
useraction.name = "AppStart (easyTravel)" AS "Open easytravel",
useraction.name = "searchJourney" AS "Search journey",
useraction.name = "bookJourney" AS "Book journey",
useraction.matchingConversionGoals = "Payment" OR useraction.matchingConversionGoals = "booking-finished" AS "Booked")
FROM usersession

Вы также можете фильтровать для определенного сегмента. Примером этого является использование свойств сеанса для извлечения списка клиентов с высоким приоритетом.

Пример

SELECT FUNNEL(
useraction.name = "AppStart (easyTravel)" AS "Open easytravel",
useraction.name = "searchJourney" AS "Search journey",
useraction.name = "bookJourney" AS "Book journey",
useraction.matchingConversionGoals = "Payment" OR useraction.matchingConversionGoals = "booking-finished" AS "Booked")
FROM usersession
WHERE stringProperties.memberstatus="GOLD"

Доступные таблицы данных сеанса пользователя и поля

Для данных сеанса пользователя доступны таблицы , usersessionи useraction. Вторичные таблицы для usersession, useraction и userevent содержат описание того, как данные в одной из этих таблиц доступны в другой.userevent

Поля описаны в разделе API сеансов пользователей — Структура сеанса пользователя .

Вы также можете проверить объект UserSession в API Explorer .

Выполнение запросов USQL для пользовательских отчетов

Интерфейс REST позволяет вам получать результаты для ваших пользовательских запросов. Все, что вам нужно, это создать уникальный токен API с привилегией языка запросов сеанса пользователя . Возможность запрашивать данные сеанса пользователя таким образом полезна при автоматизированном тестировании, проверке данных и других автоматизированных функциях. Он включает в себя следующие конечные точки:

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

/tree: возвращает данные в виде полного иерархического дерева на основе ввода.

Доступны следующие параметры запроса:

query: необходимо кодировать при вводе, например, в URL-адрес %20вместо пробелов. startTimestamp/endTimestamp: Позволяет вам определить моменты времени, прошедшие как количество миллисекунд с эпохи Unix. Если не указано, по умолчанию используются последние два часа.

Примеры

Этот код:

curl --location --insecure -H "Content-Type: application/json" -H "Authorization: Api-Token _token_" \
-XGET "https://{your-environment-id}.live.ruscomtech.ru/api/v1/userSessionQueryLanguage/table?query=select%20city,count(*)%20from%20usersession%20group%20by%20city"

дает следующий результат:

{
    "columnNames": ["city",    "count(*)"],
    "values": [
        ["Dublin",    23],
        ["N. Virginia (Amazon)",    80],
        ["Portland",    56]
    ]
}

Этот код:

curl --location --insecure -H "Content-Type: application/json" -H "Authorization: Api-Token _token_" \
-XGET "https://{your-environment-id}.live.ruscomtech.ru/api/v1/userSessionQueryLanguage/tree?query=select%20country,city,count(*)%20from%20usersession%20group%20by%20country,city"

дает следующий результат:

{
    "branchNames": ["country",    "city"],
    "leafNames": ["count(*)"],
    "values": {
        "United States": {
            "Portland": [56],
            "N. Virginia (Amazon)": [83]
        },
        "Ireland": {
            "Dublin": [24]
        }
    }
}

Подробнее об API сеансов пользователей .

Преобразование запросов в пользовательские показатели сеанса пользователя

Вы можете преобразовать некоторые запросы в пользовательские показатели сеанса пользователя для своих веб-приложений , мобильных и пользовательских приложений .

  1. В меню Ключ-АСТРОМ выберите Запрос пользовательских сессий .
  2. Введите запрос, а затем выберите Выполнить запрос . Список поддерживаемых полей, параметров и фильтров см. в подробных руководствах для веб-приложений , мобильных и пользовательских приложений .
  3. Выберите Создать пользовательскую метрику .
  4. Введите имя метрики, а затем просмотрите предлагаемые настройки.

Ограничения

  • Ключ-АСТРОМ хранит данные реального мониторинга пользователей (действия пользователей и сеансы пользователей) в течение ограниченного периода времени. Дополнительные сведения см. в разделе Сроки хранения данных.
  • Набор результатов по умолчанию — 50, но количество результатов можно увеличить до 5000 с помощью LIMITключевого слова.
  • Количество возможных максимальных результатов с разбивкой по сегментам ограничено максимум 100 000. По умолчанию 10 000. Это влияет на то, как TOP()применяется, когда DISTINCTили GROUP BYиспользуется. Если не TOP()указано, 10 000 возможных результатов равномерно распределяются по указанным столбцам. Эти значения по умолчанию можно перезаписать, указав a TOP()для каждого столбца. Умноженные TOP()-значения не могут превышать 100 000 результатов. Примеры
    • Функцию TOP()можно использовать для увеличения количества различных значений на агрегацию.
    • Максимальное количество различных результатов на агрегацию ограничено 1000.
    • В следующем запросе используется не более 10 000 теоретически возможных результатов: select browserFamily, city, count * FROM usersession group by browserFamily, city
    • Следующий запрос включает TOP()и поэтому может использовать до 100 000 (100 * 1000) теоретически возможных результатов: select TOP(browserFamily, 1000), TOP(city, 100), count * FROM usersession group by browserFamily, city
  • Соединения не допускаются.
  • Допускается только одна таблица на SELECT.
  • Поиск строковых значений с помощью регулярных выражений не поддерживается.
  • Два разных поля нельзя сравнивать. Например WHERE field1 = field2не работает.
  • WHEREусловия работают только с полями, поэтому ни один из них WHERE trueне WHERE COUNT(*) > 3поддерживается.
  • Можно запрашивать только закрытые сеансы пользователей. Сеансы пользователей в реальном времени не учитываются.
  • Заказ поддерживается частично.
  • Функции не допускаются в GROUP BYпредложении. Поэтому, если вы хотите сгруппировать по месяцам, укажите псевдоним.
  • FUNNELнельзя использовать с SELECT *функциями, ключевыми словами, такими как JSON, и операторы GROUP BY, и .ORDERLIMIT
  • Для математических операций поддержка GROUP BY, ORDER BYи других операций над функциями недоступна.
  • Максимум 10 условий могут быть применены к FUNNEL.