如何使用 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 指定源表的地址,该地址由以下三个部分组成:

    • Cloud 项目名称 chrome-ux-report,其中组织了所有 CrUX 数据
    • 数据集 all,代表所有国家/地区的数据
    • 202206 表,表示数据的年份和月份,采用 YYYYMM 格式

此外,我们还会提供各个国家/地区的数据集。例如,chrome-ux-report.country_ca.202206 仅表示来自加拿大的用户体验数据。

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

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

  • 来源,例如 origin = 'https://www.example.com',表示相应网站上所有网页的总体用户体验分布情况
  • 网页加载时的连接速度,例如 effective_connection_type.name = '4G'
  • 设备类型,例如 form_factor.name = 'desktop'
  • 用户体验指标本身
    • first_paint (FP)
    • first_contentful_paint (FCP)
    • dom_content_loaded (DCL)
    • onload (OL)
    • experimental.first_input_delay (FID)

每个指标的数据都是以对象的数组的形式组织的。在 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.202206`,
  UNNEST(first_contentful_paint.histogram.bin) AS fcp
WHERE
  origin = 'https://web.dev' AND
  effective_connection_type.name = '4G' AND
  form_factor.name = 'phone' AND
  fcp.start = 0

在 BigQuery 上查询 CrUX FCP

结果为 0.01115,这意味着此源上 1.115% 的用户体验在 4G 和手机上介于 0 到 100 毫秒之间。如果我们希望将查询泛化到任何连接和任何设备类型,可以从 WHERE 子句中将其省略,并使用 SUM 聚合器函数将各个分箱密度的所有值相加:

SELECT
  SUM(fcp.density)
FROM
  `chrome-ux-report.all.202206`,
  UNNEST(first_contentful_paint.histogram.bin) AS fcp
WHERE
  origin = 'https://web.dev' AND
  fcp.start = 0

在 BigQuery 上对 CrUX FCP 进行求和

最终结果是 0.05355,即所有设备和连接类型的 5.355%。我们可以稍微修改查询,并将“快速”FCP 范围(0-1000 毫秒)内的所有分箱的密度相加:

SELECT
  SUM(fcp.density) AS fast_fcp
FROM
  `chrome-ux-report.all.202206`,
  UNNEST(first_contentful_paint.histogram.bin) AS fcp
WHERE
  origin = 'https://web.dev' AND
  fcp.start < 1000

在 BigQuery 上查询快速 FCP

结果为 0.6977。也就是说,根据 FCP 范围定义,web.dev 上 69.77% 的 FCP 用户体验被认为是“快速”。

跟踪表现

现在,我们已提取了有关某个源的性能数据,接下来可以将其与旧表格中提供的历史数据进行比较。为此,我们可以将表地址重写为更早的月份,也可以使用通配符语法查询所有月份:

SELECT
  _TABLE_SUFFIX AS yyyymm,
  SUM(fcp.density) AS fast_fcp
FROM
  `chrome-ux-report.all.*`,
  UNNEST(first_contentful_paint.histogram.bin) AS fcp
WHERE
  origin = 'https://web.dev' AND
  fcp.start < 1000
GROUP BY
  yyyymm
ORDER BY
  yyyymm DESC

在 BigQuery 上查询 CrUX FCP 的时间序列

在这里,我们可以看到,快速 FCP 体验的百分比每个月都会有几个百分点的差异。

yyyymm fast_fcp
202206 69.77%
202205 70.71%
202204 69.04%
202203 69.82%
202202 67.75%
202201 58.96%
202112 41.69%
... ...

借助这些技术,您可以查看某个源站的性能、计算快速体验的百分比,并跟踪它随时间的变化情况。接下来,请尝试查询两个或更多源站并比较其性能。

常见问题解答

以下是有关 CrUX BigQuery 数据集的一些常见问题:

什么时候应该使用 BigQuery,而不是其他工具?

仅当您无法从 CrUX 信息中心和 PageSpeed Insights 等其他工具获取相同的信息时,才需要使用 BigQuery。例如,借助 BigQuery,您可以采用有意义的方式对数据进行切片,甚至可以将其与其他公共数据集(如 HTTP Archive)联接起来,进行一些高级数据挖掘。

使用 BigQuery 是否有任何限制?

是的,最重要的限制是,默认情况下,用户每月只能查询价值 1TB 的数据。除此之外,您还需要按 5 美元/TB 的标准费率支付费用。

在哪里可以详细了解 BigQuery?

如需了解详情,请参阅 BigQuery 文档