Firebase Performance与BigQuery导出数据显著差异排查
Firebase控制台与BigQuery帧数据差异排查问题
在2023-02-07至2023-02-08的时间范围内,Firebase控制台显示慢渲染中位数约30%、冻结帧中位数约11.5%,但用BigQuery执行以下查询得到的结果差异极大:慢渲染约26%、冻结帧约0%。
查询语句如下:
SELECT distinct percentile_disc(round(trace_info.screen_info.frozen_frame_ratio, 2)*100, 0.5) over() as frozen_p50, percentile_disc(round(trace_info.screen_info.slow_frame_ratio, 2)*100, 0.5) over() as slow_p50 FROM `my-table-name` WHERE event_type = "SCREEN_TRACE" and event_name = "_st_MainActivity" and DATE(_PARTITIONDATE) >= "2023-02-07" and DATE(_PARTITIONDATE) < "2023-02-08"
注:Firebase控制台已设置对应日期范围,百分位选为50%(中位数)。
待解答问题
- 上述查询语句是否存在问题?
- 若查询语句无误,为何数据差异如此显著?
更新1:同一数据集、时间范围下,Google Sheet计算冻结帧p90为7%,但BigQuery用percentile_disc和percentile_cont计算结果均为0%。
更新2:缩小数据范围后,BigQuery与Google Sheet的百分位结果基本一致,但仍和Firebase数据存在显著差异,特此求助。
问题分析与解答
一、查询语句的问题点
DISTINCT冗余且无必要:窗口函数percentile_disc()会为每一行生成相同的百分位值,添加DISTINCT虽能得到唯一结果,但属于多余操作,可改用LIMIT 1替代,效率更高。ROUND函数导致精度丢失:计算百分位前对比例值做两位小数的四舍五入,会把低比例数据(比如0.006即0.6%)直接舍入为0,大量这类数据会拉低百分位结果,这很可能是冻结帧p50为0的核心原因。- 时间范围边界不匹配:Firebase控制台选择“2月7日至2月8日”通常包含2月8日全天数据,但你的查询条件是
DATE(_PARTITIONDATE) < "2023-02-08",仅统计2月7日的数据,这会直接导致数据范围不一致,是结果差异的关键因素。
二、数据差异的深层原因(假设查询修正后仍有差异)
- 指标定义不一致:Firebase控制台的“慢渲染”“冻结帧”可能是会话级统计(比如整个会话内的卡顿比例),而BigQuery中
slow_frame_ratio、frozen_frame_ratio是单屏幕追踪事件的比例;或者两者对“冻结帧”的判定阈值(比如连续卡顿帧数)不同。 - 数据过滤规则不同:Firebase控制台会自动过滤无效数据(如测试设备、异常短会话),而你的BigQuery查询未添加对应过滤条件,导致统计基数不同。
- 时区错位:Firebase控制台默认使用本地时区,而BigQuery的
_PARTITIONDATE是UTC时区,实际统计的时间范围存在偏差。 - 数据同步延迟:Firebase控制台展示的数据经过了后期清洗,而BigQuery中的原始数据可能未完成最终同步,存在数据不一致。
修正建议
- 修正时间范围:将日期条件改为
DATE(_PARTITIONDATE) BETWEEN "2023-02-07" AND "2023-02-08",确保和Firebase范围一致。 - 移除
ROUND函数:保留原始精度计算百分位,修正后的查询示例:SELECT percentile_disc(trace_info.screen_info.frozen_frame_ratio * 100, 0.5) over() as frozen_p50, percentile_disc(trace_info.screen_info.slow_frame_ratio * 100, 0.5) over() as slow_p50 FROM `my-table-name` WHERE event_type = "SCREEN_TRACE" and event_name = "_st_MainActivity" and DATE(_PARTITIONDATE) BETWEEN "2023-02-07" AND "2023-02-08" LIMIT 1 - 核对指标定义:查阅Firebase文档,确认“慢渲染”“冻结帧”的计算逻辑,确保BigQuery字段和计算方式与之匹配。
- 检查时区设置:统一Firebase和BigQuery的时区,必要时转换时区后再统计。
内容的提问来源于stack exchange,提问作者ror
相关产品推荐
相关产品推荐

