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