Minhaz Kazi ผู้ประสานงานนักพัฒนาซอฟต์แวร์ของ Google Analytics ตุลาคม 2022
การวัดจํานวนที่ไม่ซ้ำกันที่แน่นอน (เช่น Cardinality) สําหรับชุดข้อมูลขนาดใหญ่ต้องใช้ หน่วยความจำจำนวนมากและส่งผลต่อประสิทธิภาพการทำงาน พร็อพเพอร์ตี้ Google Analytics 4 ใช้ อัลกอริทึม HyperLogLog++ (HLL++) เพื่อประมาณ Cardinality สําหรับเมตริกที่ใช้บ่อยที่สุด รวมถึงผู้ใช้ที่ใช้งานอยู่และเซสชัน ตัวอย่างเช่น เมื่อดู ใช้งานอยู่ ผู้ใช้ใน UI ของ Google Analytics และผ่านทาง Data API จะนับเป็น จะเป็นค่าประมาณ การใช้ HLL++ สำหรับเมตริกเหล่านี้ช่วยให้มั่นใจได้มากขึ้น โดยมีความแม่นยำในการประมาณการสูงกว่าและขอบเขตข้อผิดพลาดที่ต่ำกว่า ช่วงเวลานี้ บล็อกโพสต์มีรายละเอียดเกี่ยวกับวิธีใช้ HLL++ ในพร็อพเพอร์ตี้ Google Analytics 4 และวิธีจำลองค่าประมาณบางส่วนโดยใช้การส่งออกเหตุการณ์ BigQuery
เกี่ยวกับ HLL++
การประมาณ Cardinality ของ HLL++ ในขณะที่ใช้หน่วยความจำน้อยลงและปรับปรุงประสิทธิภาพ
HLL++ มีการปรับแต่งที่สร้างขึ้นผ่านอัลกอริทึม HyperLogLog และสร้างขึ้นตาม
การใช้ HyperLogLog ในเชิงปฏิบัติ: วิศวกรรมอัลกอริทึมของสถานการณ์ปัจจุบัน
อัลกอริทึมการประมาณ Cardinality การเปลี่ยนแปลงในพารามิเตอร์ precision
HLL++
ลดเวลาที่ใช้หน่วยความจำกับความแม่นยำของสถิติที่คำนวณแล้ว การเพิ่ม
จะทำให้ข้อผิดพลาดลดลง แต่จะใช้หน่วยความจำมากขึ้น
การใช้งานการนับที่ไม่ซ้ำกันใน BigQuery
- ใช้
COUNT(DISTINCT)
เพื่อวัด Cardinality ที่แน่นอน วิธีนี้ต้องใช้ หน่วยความจำที่มากขึ้น และจะใช้เวลานานขึ้นในการเรียกใช้ โดยเฉพาะสำหรับชุดข้อมูลขนาดใหญ่ APPROX_COUNT_DISTINCT
จะประมาณผลลัพธ์ด้วย HLL++ อย่างไรก็ตามAPPROX_COUNT_DISTINCT
ไม่อนุญาตให้ผู้ใช้กําหนดค่าการประมาณ ความแม่นยำ- หากต้องการใช้ค่า
precision
ที่กำหนดเอง ให้ใช้ฟังก์ชัน HyperLogLog++ โปรดดู HLL++ Sketches สำหรับค่าและความเชื่อมั่นของprecision
ที่ได้รับอนุญาต เพื่อความแม่นยำทั่วไป sparse precision
คืออีกพารามิเตอร์หนึ่งของ HLL+ ผู้ใช้กำหนดค่าsparse precision
ใน BigQuery ไม่ได้และคงที่ที่precision + 5
การใช้งาน HLL++ ในพร็อพเพอร์ตี้ Google Analytics 4
Google Analytics 4 ใช้การกําหนดค่าต่อไปนี้สําหรับการวัด Cardinality ของ เมตริกที่เกี่ยวข้อง
เมตริก | precision |
sparse precision |
---|---|---|
เซสชัน | 12 | 17 |
ผู้ใช้ที่ใช้งานอยู่ | 14 | 25 |
ผู้ใช้ทั้งหมด | 14 | 25 |
การใช้ฟังก์ชัน HLL++ ของ BigQuery กับข้อมูลเหตุการณ์ Google Analytics
หากข้อมูลเหตุการณ์ของพร็อพเพอร์ตี้ Google Analytics 4 มีอยู่ใน BigQuery คุณจะ สามารถพยายามจับคู่เมตริกจาก UI กับข้อมูล BigQuery ได้ ตัวอย่างต่อไปนี้ โดยให้คาดเดาดังนี้
- ตั้งค่าตัวระบุการรายงานเป็น
By device only
สําหรับ Google Analytics 4 แล้ว - แหล่งที่มาอื่นๆ ของความคลาดเคลื่อนที่อาจเกิดขึ้น เช่น โดยใช้เขตเวลาการรายงานต่อไปนี้ ที่อยู่
ผู้ใช้ทั้งหมด
การนับที่ถูกต้องโดยใช้ 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_*`
และสุดท้าย หากต้องการจำลองข้อมูลใน UI ของ Google Analytics ให้ใช้ 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 คุณจะต้องทำดังนี้ ต้องกรองเหตุการณ์สำหรับผู้ใช้ที่ใช้งานอยู่เท่านั้น การติดตั้งใช้งานแท็ก Active ตัวกรองผู้ใช้อยู่นอกขอบเขตของบทความนี้
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 Analytics 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_*`
คุณสามารถใช้คำค้นหาในบล็อกโพสต์นี้กับคำค้นหาพื้นฐานและ ตัวอย่างการค้นหาขั้นสูงเพื่อรับข้อมูลเชิงลึกเพิ่มเติมจากเหตุการณ์ BigQuery ส่งออกข้อมูลสำหรับพร็อพเพอร์ตี้ Google Analytics 4 หากพร็อพเพอร์ตี้สร้าง ข้อมูลเหตุการณ์จำนวนมาก คุณยังใช้ฟังก์ชัน HLL++ เพื่อทำสิ่งต่อไปนี้ได้ ประมาณ Cardinality ของเมตริกอื่นๆ ที่คุณใช้บ่อยใน BigQuery การค้นหา ดูข้อมูลเพิ่มเติมเกี่ยวกับ HLL++ และเหตุผลที่การประมวลผล Cardinality มีราคาสูง สำหรับชุดข้อมูลขนาดใหญ่ ให้อ่านบล็อกโพสต์ข้อมูลเชิงลึกในบล็อกของ Cloud: การใช้ HLL++ เพื่อเพิ่มความเร็วที่ไม่ซ้ำกันของจำนวนในชุดข้อมูลขนาดใหญ่