АппОптима собирает подробные данные сеанса пользователя каждый раз, когда пользователь взаимодействует с вашим контролируемым приложением. Эти данные включают все действия пользователя и данные о производительности высокого уровня. Используя Ключ-АТСРОМ API или язык запросов сеансов пользователя АппОптима (USQL), вы можете легко выполнять мощные запросы, сегментации и агрегации этих собранных данных. Чтобы помочь вам, в этой теме приведены подробные сведения о ключевых словах и функциях, синтаксисе, работе с таблицами мониторинга реальных пользователей, автоматизированных запросах и многом другом.
Язык запросов сеансов пользователей — это не SQL, и АппОптима не хранит данные сеансов пользователей в реляционной базе данных. Язык запросов сеансов пользователей — это язык запросов, специфичный для АппОптима, хотя он и опирается на некоторые концепции SQL, а синтаксис похож, что упрощает начало работы.
Выберите один из подходов:
Запросы сеансов пользователя через веб-интерфейс АппОптима
- Перейдите в раздел SQL - запросы сессий .
- Введите запрос и нажмите на кнопку Выполнить запрос .
Выбор таймфрейма с помощью USQL
С помощью селектора таймфрейма данные сеанса пользователя можно фильтровать на основе выбранного таймфрейма анализа. Выберите новый таймфрейм.
Элементы управления выбором таймфрейма
Глобальный селектор временных рамок служит временным фильтром, который в большинстве случаев позволяет вам выбрать определенный временной интервал анализа, который сохраняется на всех страницах и в представлениях продуктов по мере навигации по вашему анализу.
- Вкладка Пресеты содержит список всех доступных стандартных таймфреймов. Выберите один, чтобы изменить свой таймфрейм на этот предустановленный.
- Вкладка Custom отображает календарь. Щелкните начальный день, щелкните конечный день, а затем щелкните на кнопку Применить, чтобы выбрать этот диапазон дней в качестве таймфрейма.
- Выбранные интервалы календаря устанавливаются на окончание в начале следующего дня (со временем, установленным на
00:00
). Например, если вы выбираете в календаре период с 3 по 4 сентября, временной интервал начинается 3 сентября в момент времени00:00
и заканчивается 5 сентября в момент времени00:00
, поэтому вы никогда не пропустите последнюю минуту временного диапазона. Вы можете редактировать отображаемое время.
- Выбранные интервалы календаря устанавливаются на окончание в начале следующего дня (со временем, установленным на
- Вкладка Недавний отображает недавно использованные таймфреймы. Выберите один, чтобы вернуться к этому таймфрейму.
- Элементы управления < > сдвигают временной диапазон вперед или назад по времени. Шаг — это длина исходного таймфрейма. Например, если текущий таймфрейм
Последние 2 часа
(двухчасовой диапазон, заканчивающийся сейчас), щелкните < , чтобы сместить таймфрейм на два часа назад, на-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 + 8h
|
Начиная с начала прошлой недели плюс 8 часов (8:00 утра понедельника).
|
-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 формате .
|
1598545932346 to 1598837052346
|
Миллисекундные временные метки Unix. |
Автозаполнение с помощью USQL
Автозаполнение доступно для операторов запроса на основе текущего введенного текста. Автозаполнение является контекстно-зависимым и основано на текущем контексте курсора. Оно разумно предугадывает, какой текст вы захотите ввести следующим.
Информация автозаполнения, возвращаемая API, содержит список предложений, в котором наиболее вероятные значения отсортированы в верхней части списка, а также необходимые корректировки текста запроса и результирующее положение курсора после корректировки. Это позволяет вам поместить курсор в более полезную позицию после добавления текста, например, внутри скобок при выборе функции.
Список полей содержит только допустимые поля или функции для выбранной таблицы, а его контекстная зависимость отображает только числовые поля, когда курсор находится внутри вызова функции, которая работает только с числовыми данными, например SUM()
, или AVG()
.
Значения полей предлагаются только для полей, основанных на перечислении. Фактический запрос к Elasticsearch для автозаполнения не выполняется.
API среды АппОптима
Вы можете выполнять вызовы API с помощью вашего предпочтительного клиента. Найдите соответствующую документацию API в разделе API сеансов пользователя .
Для выполнения этих вызовов вам необходимо разрешение User sessions (DTAQLAccess
), назначенное вашему API-токену. Чтобы узнать, как получить и использовать ваш токен, см. АппОптима API - Токены и аутентификация.
Таймфрейм 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>
.
Пример
SELECT browserType, userId, city, AVG(userActionCount) AS "Average user action count", AVG(duration) AS "Average duration", count(*) AS "Sessions", SUM(totalErrorCount) AS "Errors" FROM usersession WHERE ip between '52.179.11.1' and '52.179.11.255' GROUP BY browserType, userId, city
Часто используемые ключевые слова
SELECT <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
FUNNEL
Позволяет использовать предопределенный формат FUNNEL для запроса. Может использоваться для построения графика потока определенных действий пользователя. Также может сочетаться с пользовательскими свойствами сеанса и другими условиями.
Он изменяет синтаксис любого запроса на следующий:
SELECT FUNNEL (<condition> AS <alias>, <condition>, ...) FROM <table> WHERE <condition>
- Для
FUNNEL
запросов не используйте функцииSELECT *
или ключевые слова, такие какJSON
. - В настоящее время в
FUNNEL
не допускаются операторы ,GROUP BY
,ORDER BY
или .LIMIT
FUNNEL
не поддерживает упорядочивание. Нет гарантии, что этоuseraction1
произошло раньшеuseraction2
дляSELECT FUNNEL (useraction.name = "useraction1", useraction.name = "useraction2") FROM usersession
запроса. Этот запрос является эквивалентом только двухSELECT
операторов, как поясняется в примерах ниже.
Пример 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
Чтобы просмотреть количество пользователей, успешно завершивших bookJourney
:
SELECT FUNNEL (useraction.name="login", useraction.name = "searchJourney", useraction.name = "bookJourney")
FROM usersession
FROM <table>
Вы можете указать только одну таблицу. Таблицы для данных сеанса пользователя следующие.
usersession
содержит информацию о сеансах пользователей .useraction
хранит данные о действиях пользователя .userevent
предоставляет информацию о событиях пользователя , таких как изменение страницы или события ярости.usererror
содержит больше данных о событиях ошибок , т.е. об ошибках и сбоях.
Пример
SELECT country, city, browserfamily FROM usersession
SELECT name, starttime, endtime, duration FROM useraction ORDER BY duration DESC
WHERE <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)
GROUP BY <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 <limit>
Позволяет ограничить количество возвращаемых результатов. Например, вы можете выбрать только 10 лучших результатов, когда это объединено с заказом.
Фреймворк всегда применяет верхний предел для предотвращения перегрузки системы. Если не используется LIMIT
, по умолчанию возвращается 50 результатов.
Пример
SELECT city, starttime FROM usersession ORDER BY starttime DESC LIMIT 10
LIMIT
может также использоваться для увеличения количества результатов в случаях, когда LIMIT
условие отсутствует, поскольку тогда применяется ограничение по умолчанию.
ORDER BY <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 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
LIKE
Позволяет сравнивать данные с выражением, используя подстановочные знаки для соответствия указанному шаблону. Можно использовать следующие символы:
%
или*
: Соответствует любой строке из 0 или более символов?
: Соответствует любому отдельному символу
Строковые значения чувствительны к регистру. Например, SELECT city FROM usersession WHERE userId LIKE "*astromkey*"
соответствует me@astromkey.com
, но не me@asTromKey.com
. Чтобы избежать этого, используйте подстановочный знак ?
, как в этом примере:SELECT city FROM usersession WHERE userId LIKE "*astromkey*"
Экранирование подстановочных знаков
Чтобы экранировать подстановочный символ, добавьте перед ним обратную косую черту \
. Например, \%
, \*
, и \?
рассматриваются как стандартные строковые литералы %
, *
, и ?
.
Чтобы экранировать сам обратный слеш \
, добавьте перед ним еще один обратный слеш \
. Полученная запись \\
рассматривается как один обратный слеш \
.
Если вы добавляете две обратные косые черты \\
перед подстановочным символом (что приводит к записям типа \\%
, \\*
или \\?
), такая запись рассматривается как одна экранированная обратная косая черта \
и один подстановочный символ. Например, \\*
запись соответствует \abc
, \123ABC
или \
.
Краткое описание того, как экранировать подстановочные знаки:
Вход | Рассматривается как | Совпадения |
---|---|---|
\%
|
%
|
%
|
\*
|
*
|
*
|
\?
|
?
|
?
|
\\
|
\
|
\
|
\\%
|
\ и любая строка из нуля или более символов
|
\abc , \123ABC , \ , и т. д.
|
\\*
|
\ и любая строка из нуля или более символов
|
\abc , \123ABC , \ , и т. д.
|
\\?
|
\ и любой отдельный символ
|
\a , \1 , \A , и т. д.
|
Примеры экранирования подстановочных знаков:
Запрос соответствует , userId
что равно AU%40KWM
:
SELECT userId FROM usersession WHERE userId LIKE "AU\%40KWM"
Запрос соответствует , userId
что равно AU*40KWM
:
SELECT userId FROM usersession WHERE userId like "AU\*40KWM"
Запрос ищет значение , userId
равное AU?40KWM
:
SELECT userId FROM usersession WHERE userId LIKE "AU\?40KWM"
Запрос содержит одну экранированную обратную косую черту \
и один подстановочный знак %
, поэтому запрос соответствует, userId
например AU\40KWM
, AU\abcd40KWM
, AU\ab12340KWM
, или AU\777_12340KWM
:
SELECT userId FROM usersession WHERE userId LIKE "AU\\%40KWM"
Запросы, содержащие 11+ условий LIKE с непересекающимися подстановочными знаками, отклоняются
Запросы USQL, содержащие 11 или более LIKE
условий в начале *
или %
внутри шаблона поиска (но не в конце), отклоняются из выполнения.
Обычно мы просто подсчитываем количество LIKE
условий, используемых в запросе. Например, LIKE
в запросе ниже пять условий — мы подсчитываем каждое вхождение LIKE
в WHERE
предложении и CONDITION
функции.
SELECT CONDITION(COUNT(userSessionId), WHERE useraction.name LIKE '*search.html'),
CONDITION(COUNT(userSessionId), WHERE useraction.name LIKE '*booking-payment1.html')
FROM usersession
WHERE city LIKE "%York"
OR city LIKE "S*Francisco"
AND city LIKE "L*inz"
Однако при использовании функции FUNNEL
расчет становится более сложным. Для этой функции мы внутренне преобразуем один запрос в несколько запросов. После этого преобразования мы подсчитываем количество условий LIKE
в этих внутренне преобразованных запросах.
Например, следующий запрос:
SELECT FUNNEL (useraction.name LIKE "*start", useraction.name LIKE "Jou%rney", useraction.name LIKE "bookJourn*ey") FROM usersession
изменяется на следующие три запроса:
SELECT COUNT(*) FROM usersession where useraction.name LIKE "*start"
SELECT COUNT(*) FROM usersession where useraction.name LIKE "*start" AND useraction.name LIKE "Jou%rney"
SELECT COUNT(*) FROM usersession where useraction.name LIKE "*start" AND useraction.name LIKE "Jou%rney" AND useraction.name LIKE "bookJourn*ey"
Это означает, что в приведенном выше запросе FUNNEL
на самом деле шесть условий LIKE
.
FILTER
Позволяет фильтровать функции, имеющие числовые значения, тем самым отображая только определенные результаты агрегаций.
Пример
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
работает и для агрегированных значений.
Часто используемые функции
MIN(field)
Запрашивает минимальное значение числового поля или поля даты.
Пример
SELECT MIN(duration), MAX(duration), AVG(duration), MEDIAN(duration)
FROM usersession
MAX(field)
Запрашивает максимальное значение числового поля или поля даты.
Пример
SELECT MIN(duration), MAX(duration), AVG(duration), MEDIAN(duration)
FROM usersession
AVG(field)
Запрашивает среднее значение числового поля или поля даты. Может иметь значение NaN
, если поле всегда null
.
Пример
SELECT MIN(duration), MAX(duration), AVG(duration), MEDIAN(duration)
FROM usersession
MEDIAN(field)
Запрашивает медианное значение числового поля или поля даты.
Пример
SELECT MIN(duration), MAX(duration), AVG(duration), MEDIAN(duration)
FROM usersession
SUM(field)
Вычисляет сумму числового поля.
Пример
SELECT TOP(name, 20), SUM(duration) FROM useraction
GROUP BY name
COUNT(field), COUNT(*), COUNT(DISTINCT field)
Подсчитывает количество совпадающих строк.
COUNT(*)
: Подсчитывает количество совпадающих элементов.COUNT(<field>)
: Подсчитывает количество совпадающих элементов, где<field>
не равно нулю.COUNT(DISTINCT <field>)
: Подсчитывает количество различных значений<field>
в выбранных элементах.
Пример
SELECT country, COUNT(*), COUNT(city), COUNT(DISTINCT city)
FROM usersession
GROUP BY country
Результаты, возвращаемые функцией, COUNT(DISTINCT <field>)
являются приблизительными, чтобы предотвратить высокое использование памяти. Если COUNT(DISTINCT <field>)
используется в поле с высокой кардинальностью, результаты могут быть еще более грубыми. Поля с высокой кардинальностью — это те поля, которые имеют всего несколько дубликатов.
Поля с высокой кардинальностью
Table | Fields |
---|---|
usersession
|
ip , userSessionId , internalUserId , userId
|
АппОптима отклоняет и не выполняет запросы, COUNT(DISTINCT <field>)
которые могут потреблять много памяти. Это происходит для всех полей с чрезвычайно высокой кардинальностью, например, для dateTime
полей типа usersession.startTime
, usersession.endTime
или useraction.networkTime
.
Поля с чрезвычайно высокой кардинальностью
Table | Fields |
---|---|
usersession
|
startTime , endTime , replayEnd , clientTimeOffset , duration , replayStart
|
useraction
|
domContentLoadedTime , startTime , firstPartyBusyTime , documentInteractiveTime , navigationStart , totalBlockingTime deprecated, largestContentfulPaint , visuallyCompleteTime , cdnBusyTime , endTime , domCompleteTime , networkTime , loadEventStart , serverTime , firstInputDelay , responseStart , thirdPartyBusyTime , duration , loadEventEnd , responseEnd , frontendTime , requestStart
|
userevent
|
startTime
|
usererror
|
startTime
|
Пример
SELECT country, COUNT(*), COUNT(city), COUNT(DISTINCT city)
FROM usersession
GROUP BY country
TOP(field, 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(datefield), MONTH(datefield), DAY(datefield), HOUR(datefield), MINUTE(datefield)
Возвращает заданный элемент, извлеченный из поля даты.
YEAR
: Четырехзначный год.MONTH
: Номер месяца, от 1 до 12DAY
: День месяца, от 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
DATETIME(datefield [, format [, interval]])
Форматирует выбранное поле даты с заданной строкой формата. Формат по умолчанию — 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
Подобно другим функциям даты ( YEAR
, MONTH
, DAY
, HOUR
, и MINUTE
), вы можете использовать его DATETIME
для форматирования результата (даже результата других функций, таких как MAX
, MIN
, AVG
, или CONDITION
), создания гистограмм или получения списка временных меток, где есть результаты, например, дни недели, когда использовалось приложение.
Пример
SELECT application, DATETIME(MAX(starttime)) AS LastUsedTime FROM useraction GROUP BY application
SELECT DATETIME(starttime, "HH") AS hourOfDay, COUNT(*) FROM usersession GROUP BY hourOfDay
SELECT application, DATETIME(starttime, "E") AS daysOfWeek FROM useraction GROUP BY application
SELECT DATETIME(CONDITION(MAX(startTime), WHERE name = "index.jsp")) FROM useraction
CONDITION(function, condition)
Позволяет комбинировать несколько функций с различными условиями.
Допустимые функции в строке формата следующие:
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
PERCENTILE
Представляет значение, ниже которого есть процент точек данных с более низким значением. Полезно для определения скорости вашего приложения для клиентов, которые получают самое медленное время отклика.
Пример
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(customProperty)
Возвращает ключи действий пользователя или свойства сеанса пользователя в соответствии с типом данных свойства, определенным в аргументе.
Проверьте таблицу ниже, чтобы понять, возвращаются ли ключи свойств действий пользователя или ключи свойств сеанса пользователя.
KEYS(customProperty) | Table | Action properties | Session properties |
---|---|---|---|
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
или NOT BETWEEN
, <lowerLimit>
и <upperLimit>
.
Пример 1
SELECT DISTINCT ip FROM usersession
WHERE ip BETWEEN '192.168.0.0' AND '192.168.255.255'
Пример 2
SELECT startTime FROM useraction
WHERE NOT startTime BETWEEN $NOW - DURATION("2h") AND $NOW
Пример 3
SELECT ip, browserType, userId, city
FROM usersession
WHERE NOT ip BETWEEN '52.179.11.1' AND '52.179.11.255'
Сеты
Строковое "STARTSWITH"
условие проверяет, начинается ли строка или поле перечисления с указанного текста.
Пример
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 datetime с часовым поясом | 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
.
Иногда запросы со значениями datetime могут давать неверные результаты из-за преобразования летнего времени. Если дата в запросе предшествует дате окончания летнего времени (например, до 7 ноября 2021 г. 02:00), попробуйте использовать ISO datetime со смещением времени, например, 2021-10-05T17:30:00+03:00
.
Пример
SELECT starttime FROM usersession WHERE starttime > "8.8.2018 8:00"
Оптимизация условий
IN
Если ваш запрос содержит несколько условий "равно" для одного и того же поля через OR
, используйте функцию IN
вместо этого, так как она более производительна. Например, вы можете переписать следующий запрос, используя функцию IN
.
Пример ДО
SELECT COUNT(*) FROM userevent
WHERE pageReferrer = "/some/page/referrer/1"
OR pageReferrer = "/some/page/referrer/2"
OR pageReferrer = "/some/page/referrer/3"
OR pageReferrer = "/some/page/referrer/4"
OR pageReferrer = "/some/page/referrer/5"
Пример ПОСЛЕ
SELECT COUNT(*) FROM userevent
WHERE pageReferrer IN ("/some/page/referrer/1",
"/some/page/referrer/2",
"/some/page/referrer/3",
"/some/page/referrer/4",
"/some/page/referrer/5")
NOT IN
Чтобы оптимизировать скорость выполнения запросов, используйте массивы для запросов: вместо использования нескольких операторов NOT
, <>
или !=
используйте оператор NOT IN
.
Пример ДО
SELECT useraction.name, usersession.userId
FROM useraction
WHERE name = "loading of page /"
AND usersession.userId IS NOT NULL
AND usersession.userId <> "Speed Travel Agency"
AND usersession.userId <> "some user"
AND usersession.userId <> "easyTravel - One step to happiness"
AND usersession.userId <> "easyTravel - Booking - Finish"
Пример ПОСЛЕ
SELECT useraction.name, usersession.userId
FROM useraction
WHERE name = "loading of page /"
AND usersession.userId IS NOT NULL
AND NOT usersession.userId IN ("Speed Travel Agency",
"some user",
"easyTravel - One step to happiness",
"easyTravel - Booking - Finish")
Расширенные синтаксические конструкции
Запрос диапазонов 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
Селекторы таймфреймов можно использовать для ограничения таймфреймов запросов, которые выполняются на вторичных таблицах (useraction
). По умолчанию фильтр таймфрейма применяется к таблице usersession
, даже если запрос выполняется на любой вторичной таблице. Чтобы применить фильтр также и к вторичной таблице, можно использовать селектор таймфреймов для добавления условия к полю вторичной таблицы startTime
. См. следующий пример для извлечения name
и duration
действий пользователя, которые произошли только в течение таймфрейма запроса:
Пример
SELECT name, duration FROM useraction
WHERE startTime BETWEEN $TIME_FRAME_START and $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")
Вторичные таблицы для usersession
, useraction
, userevent
, и usererror
При использовании SELECT
с usersession
, useraction
, userevent
, или usererror
столбцы из другой таблицы могут быть доступны и включены в результаты путем добавления к именам столбцов префикса имени таблицы.
Пример 1
Выбор логического представления usersession
или useraction
таблицы. Несколько значений объединяются в результирующем столбце при добавлении информации из useraction
в запрос по usersession
.
SELECT city, useraction.name FROM usersession
SELECT usersession.city, name FROM useraction
Вы можете использовать другие вторичные таблицы userevent
таким usererror
же образом.
SELECT usersession.country, name, page FROM userevent
SELECT usersession.country, name, type FROM usererror
SELECT country, userevent.name, usererror.name FROM usersession
При запросе из usersession
первичной таблицы можно комбинировать поля из других вторичных таблиц (useraction
, userevent
, и usererror
). В условии можно использовать WHERE
также поля из вторичных таблиц.
Пример 2
SELECT city, useraction.name, userevent.page, usererror.type FROM usersession
SELECT city, usererror.name, userevent.page, useraction.duration FROM usersession WHERE usererror.name IS NOT NULL
Пример 3
Перечисление всех сеансов пользователей, содержащих пользовательское событие или действие пользователя из одного и того же приложения.
SELECT * FROM usersession
WHERE userevent.application = "a" OR useraction.application="a"
При запросе из любой из вторичных таблиц (useraction
, userevent
, или usererror
) вы можете использовать поля только из usersession
первичной таблицы; вы не можете использовать поля из других вторичных таблиц. Например, запрос ниже не выполняется, так как выбрана таблица , что означает, что можно выбрать userevent
только поля из userevent
или .usersession
SELECT usersession.city, useraction.name, userevent.page, usererror.type FROM userevent
Такое же ограничение применяется к другим вторичным таблицам — useraction
и usererror
.
Пример 4
Следующие запросы не будут выполнены, поскольку используются только поля из выбранной вторичной таблицы и из первичной таблицы.
SELECT usersession.userId, name, duration FROM useraction
SELECT usersession.userId, name, type FROM usererror
Применяемые условия различаются по значению в зависимости от таблицы. Например, предположим, что вы хотите перечислить все сеансы пользователя, которые содержат действия пользователя с именами a
и b
:
SELECT * FROM usersession
WHERE useraction.name = "a" AND useraction.name = "b"
Это означает, что сеанс должен содержать действие пользователя с именем "a"
и действие пользователя с именем "b"
. Выполнение того же запроса в useraction
таблице возвращает пустой результат, поскольку одно и то же действие пользователя не может иметь два разных значения для имени.
Если вы хотите выбрать данные сеанса пользователя для определенного действия пользователя, которое соответствует нескольким критериям, выполните следующий запрос к useraction
таблице.
SELECT usersession.*, * FROM useraction
WHERE useraction.name = "a" AND useraction.duration > 1000
В этом случае каждое действие пользователя в результате удовлетворяет обоим условиям.
Давайте рассмотрим другой запрос.
SELECT COUNT(usersession.userSessionId)
FROM usersession
WHERE userevent.name = 'Page change'
AND userevent.pageGroup = '/Booking'
AND userevent.type = 'UserTag'
Поскольку запрос выполняется в usersession
таблице, условия применяются к общему набору пользовательских событий, которые принадлежат одному сеансу. Это означает, что любой пользовательский сеанс с пользовательскими событиями, которые удовлетворяют условиям, отражается в подсчете. Например, если пользовательский сеанс содержит три пользовательских события, каждое из которых удовлетворяет одному из заданных условий, пользовательский сеанс отражается в подсчете.
Если вы запустите тот же запрос в userevent
таблице, условия будут применены к каждому отдельному событию пользователя. Это означает, что только сеансы пользователя, которые имеют хотя бы одно событие пользователя, удовлетворяющее всем условиям, будут отражены в подсчете.
SELECT COUNT(usersession.userSessionId)
FROM userevent
WHERE userevent.name = 'Page change'
AND userevent.pageGroup = '/Booking'
AND userevent.type = 'UserTag'
Фильтрация с использованием полей вторичной таблицы
Будьте осторожны при фильтрации с использованием полей одной из вторичных таблиц. Рассмотрим примеры ниже.
Пример 1
SELECT useraction.name FROM usersession WHERE useraction.name="abc"
Этот запрос возвращает список всех сеансов пользователя, которые содержат хотя бы одно действие пользователя с именем abc
. Результат содержит список всех действий пользователя для каждого сеанса, поскольку запрос выполняется на usersession
уровне.
Пример 2
SELECT name FROM useraction WHERE name="abc"
Этот запрос извлекает список только тех действий пользователя, которые имеют имя abc
.
SELECT * FROM table
Пример
SELECT * FROM usersession
SELECT useraction.* FROM usersession
SELECT city, useraction.* FROM usersession
SELECT *, useraction.* FROM usersession
Звездочка *
сама по себе выбирает столбцы из основной таблицы, а не из вторичной. Например, поля из useraction
не включены в SELECT * FROM usersession
, если только вы не включите useraction.*
.
Экспорт JSON
Ключевое JSON
слово добавляет дополнительный столбец, содержащий данные о запрошенной записи (сеанс пользователя, действие пользователя, событие пользователя или ошибка пользователя) в формате JSON.
Если выбрать usersession
основную таблицу, будут возвращены полные строки JSON для соответствующих сеансов пользователей независимо от выбранных столбцов.
Пример 1
Приведенный ниже запрос возвращает соответствующие пользовательские сеансы в формате JSON в дополнительном столбце, включая данные из всех вторичных таблиц.
SELECT usersessionId, browserFamily, useraction.name, useraction.duration, JSON
FROM usersession LIMIT 5
Если выбрана вторичная таблица ( useraction
, userevent
, или usererror
), возвращаются полные строки JSON для соответствующей подзаписи (действие пользователя, событие пользователя или ошибка пользователя).
Пример 2
SELECT name, duration, JSON
FROM useraction LIMIT 5
Экранирование строк
Строковые литералы можно заключать в одинарные или двойные кавычки. Однако, если вы хотите использовать одну и ту же кавычку внутри строки, просто удвойте ее.
Пример
SELECT * FROM usersession WHERE userId = "some 'custom' name for ""my user"""
SELECT * FROM usersession WHERE userId = 'some ''custom'' name for "my user"'
Funnel charting
Funnel charting позволяет отслеживать шаги через ваш цифровой сервис и исследовать области, в которых ваши пользователи испытывают трудности.
Пример
RE userISELECT 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"
FUNNEL
не поддерживает упорядочивание. Нет гарантии, чтоuseraction1
произошло раньшеuseraction2
дляSELECT FUNNEL (useraction.name = "useraction1", useraction.name = "useraction2") FROM usersession
запроса. Этот запрос является эквивалентом только двух операторовSELECT
.
Доступные таблицы и поля данных сеанса пользователя
Для данных сеансов пользователей доступны следующие таблицы.
usersession
содержит информацию о сеансах пользователей .useraction
хранит данные о действиях пользователя .userevent
предоставляет информацию о событиях пользователя , таких как изменение страницы или события ярости.usererror
содержит больше данных о событиях ошибок , т.е. об ошибках и сбоях.
Вторичные таблицы для usersession
, useraction
, userevent
, и usererror
включают описание того, как данные в одной из этих таблиц доступны в другой.
Выполнение запросов 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.astromkey.com/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.astromkey.com/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]
}
}
}
Преобразование запросов в пользовательские метрики USQL
Вы можете преобразовать некоторые запросы в пользовательские метрики USQL для своих веб-приложений , мобильных приложений и пользовательских приложений .
Пользовательские метрики USQL доступны как пользовательские метрики сеанса пользователя (USCM) и пользовательские метрики действий пользователя (UACM). Пользовательские метрики действий пользователя поддерживаются с АппОптима версии 1.260.
- Перейдите в раздел SQL-запросы сессий.
- Введите запрос, а затем нажмите на кнопку Выполнить запрос .
- Выберите Создать пользовательскую метрику .
- Введите название метрики, а затем просмотрите предлагаемые настройки.
Ограничения
- АппОптима сохраняет и сохраняет Real User Monitoring (действия и сеансы пользователя) в течение ограниченного периода времени. Подробности см. в разделе Периоды хранения данных .
- По умолчанию возвращается 50 результатов, но количество результатов можно увеличить до 5000 с помощью ключевого слова
LIMIT
. - Количество потенциальных максимальных результатов в сегментах ограничено максимумом в 100 000. Значение по умолчанию — 10 000. Это влияет на то, как
TOP()
применяется при использованииDISTINCT
илиGROUP BY
. Если не указаноTOP()
, 10 000 возможных результатов равномерно распределяются по указанным столбцам. Эти значения по умолчанию можно перезаписать, указав для каждого столбца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
не поддерживаются.- Запросить можно только закрытые сеансы пользователей. Сеансы активных пользователей не учитываются.
- Заказ поддерживается частично. Например, сортировка по математической операции не поддерживается.
SELECT endTime - startTime AS duration FROM usersession ORDER BY duration
- Для обширных временных рамок и высоконагруженных сред мы можем экстраполировать данные из выборочного подмножества (уровень экстраполяции). Это происходит независимо от того, используете ли вы API АппОптима или веб-интерфейс АппОптима. Если вам нужны 100% точные данные, уменьшите временные рамки или добавьте дополнительные условия для дальнейшей фильтрации запрашиваемых данных.
- Функции в предложении не допускаются
GROUP BY
. Поэтому, если вы хотите сгруппировать по месяцам, укажите псевдоним. FUNNEL
нельзя использовать сSELECT *
функциями, ключевыми словами, такими какJSON
, и операторамиGROUP BY
,ORDER
иLIMIT
.- Для математических операций поддержка
GROUP BY
,ORDER BY
и других операций над функциями недоступна. - К . можно применить максимум 10 условий
FUNNEL
. - Некоторые поля, такие как
duration
, всегда возвращают целые значения вместо десятичных, когда над ними выполняются математические операции, такие как деление. Это происходит потому, что эти поля хранятся и отображаются как целые значения. Например,SELECT duration FROM usersession
возвращает длительность4800
, аSELECT duration/1000 FROM usersession
возвращает длительность5
.