Minhaz Kazi, Developer Advocate, Google Analytics – Oktober 2022
Das Messen der genauen Anzahl unterschiedlicher Zahlen (d.h. der Kardinalität) für große Datasets erfordert viel Arbeitsspeicher und wirkt sich auf die Leistung aus. Google Analytics 4-Properties verwenden den Algorithmus HyperLogLog++ (HLL++) zur Schätzung der Kardinalität für die am häufigsten verwendeten Messwerte, einschließlich Aktive Nutzer und Sitzungen. Wenn Sie beispielsweise Aktive Nutzer in der Google Analytics-Benutzeroberfläche sowie über die Data API aufrufen, ist die Anzahl eine Annäherung. Die Verwendung von HLL++ für diese Messwerte sorgt für eine bessere Leistung mit höherer Genauigkeit bei der Schätzung und geringeren Fehlergrenzen. In diesem Blogpost erfahren Sie, wie HLL++ in Google Analytics 4-Properties verwendet wird und wie Sie einige der Schätzungen mithilfe von BigQuery-Ereignisexportdaten replizieren können.
Über HLL++
HLL++ schätzt die Kardinalität bei geringerem Speicherverbrauch und verbesserter Leistung.
HLL++ hat Ergänzungen gegenüber dem HyperLogLog-Algorithmus und basiert auf HyperLogLog in der Praxis: Algorithmische Entwicklung eines modernen Algorithmus zur Abschätzung der Kardinalität. Änderungen am HLL++-Parameter precision
wirken sich auf die Arbeitsspeichernutzung und die Genauigkeit der berechneten Statistiken aus. Wenn Sie den Parameterwert erhöhen, wird der Fehler verringert, aber die Arbeitsspeichernutzung erhöht.
Implementierung der eindeutigen Anzahl in BigQuery
- Mit
COUNT(DISTINCT)
können Sie die genaue Kardinalität messen. Dieser Ansatz erfordert mehr Arbeitsspeicher und die Ausführung dauert länger, insbesondere bei großen Datasets. APPROX_COUNT_DISTINCT
schätzt Ergebnisse mit HLL++. MitAPPROX_COUNT_DISTINCT
können Nutzer die Näherungsgenauigkeit jedoch nicht konfigurieren.- Verwenden Sie zur Verwendung benutzerdefinierter
precision
-Werte HyperLogLog++-Funktionen. Die zulässigenprecision
-Werte und die Konfidenzintervalle für typische Genauigkeiten finden Sie unter HLL++-Skizzen. sparse precision
ist ein weiterer Parameter für HLL+. In BigQuery kann der Wertsparse precision
nicht vom Nutzer definiert werden und ist aufprecision + 5
festgelegt.
HLL++-Implementierung in Google Analytics 4-Properties
In Google Analytics 4 wird die folgende Konfiguration verwendet, um die Kardinalität der zugehörigen Messwerte zu messen.
Messwert | precision |
sparse precision |
---|---|---|
Sitzungen | 12 | 17 |
Aktive Nutzer | 14 | 25 |
Nutzer insgesamt | 14 | 25 |
BigQuery-HLL++-Funktionen mit Google Analytics-Ereignisdaten verwenden
Wenn die Ereignisdaten Ihrer Google Analytics 4-Property in BigQuery verfügbar sind, können Sie versuchen, die Messwerte aus der UI mit BigQuery-Daten abzugleichen. In den folgenden Beispielen wird davon ausgegangen:
- Die Berichts-ID ist für die Google Analytics 4-Property auf
By device only
festgelegt. - Andere potenzielle Ursachen für Abweichungen, z.B. die Zeitzone für die Berichterstellung, wurden bereits berücksichtigt.
Nutzer insgesamt
Genaue Anzahl mit COUNT(DISTINCT)
:
SELECT
COUNT(DISTINCT user_pseudo_id) AS exact_total_user_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
Ungefähre Anzahl mit APPROX_COUNT_DISTINCT
:
SELECT
APPROX_COUNT_DISTINCT(user_pseudo_id) AS approx_total_user_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
Sie können APPROX_COUNT_DISTINCT
mit den HLL++-Funktionen von BigQuery replizieren. Dadurch werden identische oder sehr ähnliche Ergebnisse als APPROX_COUNT_DISTINCT
zurückgegeben:
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_*`
Und schließlich verwenden Sie precision = 14
, um die Daten in der Google Analytics-Benutzeroberfläche zu replizieren:
SELECT
HLL_COUNT.EXTRACT(HLL_COUNT.INIT(user_pseudo_id, 14)) AS total_user_count,
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
Aktive Nutzer
Wenn Sie die Anzahl der aktiven Nutzer aus der BigQuery-Ereignisexporttabelle berechnen möchten, müssen Sie die Ereignisse zuerst nach Aktive Nutzer filtern. Die Implementierung des Filters Aktiver Nutzer wird in diesem Artikel nicht behandelt.
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
Sitzungen
Der Ereignisparameter ga_session_id
identifiziert einzelne Sitzungen für jeden Nutzer. Die Kombination aus user_pseudo_id
und ga_session_id
ist für einzelne Sitzungen in Ihrem Dataset eindeutig. Das ist die Standardmethode zum Zählen von Sitzungen für Google Analytics 4-Properties. Bei Sitzungen ist 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_*`
Sie können Abfragen in diesem Blogpost mit den Beispielen für einfache Abfragen und erweiterte Abfragen verwenden, um zusätzliche Informationen aus den BigQuery-Ereignisexportdaten für Ihre Google Analytics 4-Properties zu erhalten. Wenn Ihre Property eine große Menge an Ereignisdaten generiert, können Sie auch die HLL++-Funktionen implementieren, um die Kardinalität anderer Messwerte zu schätzen, die Sie häufig in BigQuery-Abfragen verwenden. Weitere Informationen zu HLL++ und dazu, warum die Kardinalitätsberechnung für große Datasets teuer ist, finden Sie im ausführlichen Blogpost im Cloud-Blog: Using HLL++ to Speed up count-distinct in massive datasets.