Минхаз Кази (Minhaz Kazi), специалист по связям с разработчиками, Google Аналитика, октябрь 2022 г.
Чтобы регистрировать точные уникальные значения (например, их количество) для больших наборов данных, требуется много памяти, что может повлиять на эффективность. В ресурсах Google Аналитики 4 используется алгоритм HyperLogLog++ (HLL++), чтобы приблизительно рассчитывать количество уникальных значений для наиболее часто встречающихся показателей, таких как Активные пользователи и Сеансы. Например, если вы просматриваете данные об Активных пользователях в интерфейсе Google Аналитики или с помощью Data API, количество будет указано приблизительно. Такое использование алгоритма HLL++ повышает эффективность и точность расчетов и снижает предел погрешности. В этой записи рассказывается о том, как HLL++ используется в ресурсах Google Аналитики 4 и как вы можете сами воспроизвести некоторые расчеты, используя экспорт данных о событиях в BigQuery.
Алгоритм HLL++
Алгоритм HLL++ приблизительно рассчитывает количество уникальных значений, используя меньше памяти, что повышает эффективность операции.
Алгоритм HLL++ является измененной версией алгоритма HyperLogLog. Подробную информацию вы найдете в статье Работа с HyperLogLog: алгоритмическая разработка передового алгоритма для расчета количества уникальных значений (на англ. языке). Изменения в параметре precision
алгоритма HLL++ компенсируют использование памяти за счет точности рассчитанных данных. При увеличении значения параметра снижается погрешность, но возрастает использование памяти.
Реализация уникальных значений в BigQuery
- Чтобы получить точное количество уникальных значений, используйте
COUNT(DISTINCT)
. Эта операция использует больше памяти и требует больше времени, особенно для крупных наборов данных. - Команда
APPROX_COUNT_DISTINCT
позволяет приблизительно рассчитать результаты с помощью HLL++. ОднакоAPPROX_COUNT_DISTINCT
не позволяет настроить точность вычислений. - Чтобы использовать собственные значения
precision
, используйте функции HyperLogLog++. Разрешенные значенияprecision
и доверительные интервалы для типичных вариантов precision вы найдете на сайте HLL++ Sketches. sparse precision
– ещё один параметр HLL+. В BigQuery нельзя задать значениеsparse precision
, оно всегда равноprecision + 5
.
Реализация HLL++ в ресурсах Google Аналитики 4
В Google Аналитике 4 для измерения количества уникальных значений связанных показателей используется следующая конфигурация:
Показатель | precision |
sparse precision |
---|---|---|
Сеансы | 12 | 17 |
Активные пользователи | 14 | 25 |
Всего пользователей | 14 | 25 |
Как использовать функции HLL++ в BigQuery с данными о событиях Google Аналитики
Если в BigQuery доступны данные о событиях ресурса Google Аналитики 4, вы можете попробовать сопоставить данные из интерфейса с данными BigQuery. Для примеров ниже предполагается, что:
- для ресурса Google Аналитики 4 задан идентификатор отчетов
By device only
; - устранены другие возможные источники расхождений, например часовой пояс отчетов.
Всего пользователей
Точное количество рассчитывается с помощью COUNT(DISTINCT)
:
SELECT
COUNT(DISTINCT user_pseudo_id) AS exact_total_user_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
Примерное количество рассчитывается с помощью APPROX_COUNT_DISTINCT
:
SELECT
APPROX_COUNT_DISTINCT(user_pseudo_id) AS approx_total_user_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
Вы можете воспроизвести действие APPROX_COUNT_DISTINCT
, используя функции HLL++ в BigQuery. Ниже показан код, которые вернет те же результаты, что и APPROX_COUNT_DISTINCT
, или похожие.
SELECT
HLL_COUNT.EXTRACT(HLL_COUNT.INIT(user_pseudo_id, 15)) AS approx_total_user_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
Наконец, чтобы получить те же данные в интерфейсе Google Аналитики, используйте precision = 14
:
SELECT
HLL_COUNT.EXTRACT(HLL_COUNT.INIT(user_pseudo_id, 14)) AS total_user_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
Активные пользователи
Чтобы рассчитать количество Активных пользователей для таблицы экспорта событий в BigQuery, сначала нужно отфильтровать события по Активным пользователям. Инструкции о том, как реализовать фильтр по Активным пользователям, в этой статье не приводятся.
WITH ActiveUsers AS
(
SELECT
user_pseudo_id
FROM
`bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
WHERE
<implement active user filter logic>
)
SELECT
HLL_COUNT.EXTRACT(HLL_COUNT.INIT(user_pseudo_id, 14)) AS active_user_count,
FROM ActiveUsers
Сеансы
Параметр события ga_session_id
позволяет идентифицировать уникальные сеансы для каждого пользователя. Для уникальных сеансов комбинация user_pseudo_id
и ga_session_id
в пределах набора данных будет уникальной. Это стандартный метод учета сеансов для ресурсов Google Аналитики 4. Для сеансов значение precision
составляет 12.
SELECT
HLL_COUNT.EXTRACT(
HLL_COUNT.INIT(
CONCAT(
user_pseudo_id,
(SELECT `value` FROM UNNEST(event_params) WHERE key = 'ga_session_id' LIMIT 1).int_value),
12)) AS session_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
Запросы, приведенные в этой статье, можно использовать с примерами базовых и расширенных запросов, чтобы получить дополнительные данные из данных о событиях ресурсов Google Аналитики 4, экспортированных в BigQuery, Если для вашего ресурса регистрируется большой объем данных о событиях, вы можете также реализовать функции HLL++, чтобы приблизительно рассчитывать количество уникальных значений других показателей, которые вы часто используете в запросах BigQuery. Подробную информацию о HLL++ и о том, почему расчет количества уникальных значений для больших наборов данных – ресурсоемкая операция, вы найдете в записи в Cloud Blog Как использовать HLL++, чтобы ускорить учет уникальных значений в массивных наборах данных.