如何使用 CrUX BigQuery 数据集

Chrome 用户体验报告 (CrUX) 的原始数据可在 Google Cloud 数据库 BigQuery 中获取。若要使用 BigQuery,您需要拥有一个 GCP 项目,并具备 SQL 的基本知识。

在本指南中,您将学习如何使用 BigQuery 针对 CrUX 数据集编写查询,以提取有关 Web 用户体验状态的有见结果:

  • 了解数据的组织方式
  • 编写基本查询以评估来源的性能
  • 编写高级查询以跟踪一段时间内的性能

数据整理

首先,我们来看看一个基本查询:

SELECT COUNT(DISTINCT origin) FROM `chrome-ux-report.all.202206`

如需运行该查询,请将其输入查询编辑器中,然后按“运行查询”按钮:

在编辑器中输入一个简单的查询,然后按“运行”。

此查询包含两个部分:

  • SELECT COUNT(DISTINCT origin) 表示查询表中的来源数量。粗略地说,如果两个网址具有相同的架构、主机和端口,则属于同一来源。

  • FROM chrome-ux-report.all.202206 指定来源表的地址,该地址由三个部分组成:

    • 用于整理所有 CrUX 数据的 Cloud 项目名称 chrome-ux-report
    • 数据集 all,表示所有国家/地区的数据
    • 表格 202206,数据的年份和月份(采用 YYYYMM 格式)

此外,还有适用于每个国家/地区的数据集。例如,chrome-ux-report.country_ca.202206 仅代表来自加拿大的用户体验数据。

每个数据集中都包含自 201710 以来每个月的表。系统会定期发布上一个日历月的最新表格。

数据表的结构(也称为架构)包含:

  • 来源(例如 origin = 'https://www.example.com'),表示该网站上所有网页的用户体验汇总分布
  • 网页加载时的连接速度,例如 effective_connection_type.name = '4G'自 2025 年 2 月起移除
  • 设备类型,例如 form_factor.name = 'desktop'
  • 用户体验指标本身
    • first_paint(FP)
    • first_contentful_paint (FCP)
    • largest_contentful_paint (LCP)
    • dom_content_loaded (DCL)
    • onload (OL)
    • layout_instability.cumulative_layout_shift (CLS)
    • interaction_to_next_paint (INP)

每个指标的数据都以对象数组的形式整理。在 JSON 表示法中,first_contentful_paint.histogram.bin 如下所示:

[
    {"start": 0, "end": 100, "density": 0.1234},
    {"start": 100, "end": 200, "density": 0.0123},
    ...
]

每个分桶包含一个起始时间和一个结束时间(以毫秒为单位),以及一个密度,表示相应时间范围内的用户体验百分比。换句话说,对于此假设的来源、连接速度和设备类型,12.34% 的 FCP 体验时间均低于 100 毫秒。所有分箱密度的总和为 100%。

浏览 BigQuery 中表的结构。

评估效果

我们可以利用对表架构的了解,编写一个用于提取此类性能数据的查询。

SELECT
  fcp
FROM
  `chrome-ux-report.all.202502`,
  UNNEST