重要提示:
请务必仅在桌面设备/笔记本电脑上完成此实操实验。
每个实验仅允许尝试 5 次。
温馨提示:第一次尝试时,您可能无法答对所有问题,甚至可能需要重做任务,请不必担心,这都是学习过程的一部分。
实验一旦开始,计时器就无法暂停。1 小时 30 分钟后,实验将结束,您需要重新开始。
如需了解详情,请阅读实验技术提示。
活动概览
数据流水线是将数据从不同来源传输到目标位置以进行存储和分析的一系列流程。
数据流水线可以自动执行数据流,并简化数据处理方式,从而提高数据转换的性能和效率。
使用 SQL 流水线可消除不必要的步骤,提高性能。这是因为 SQL 流水线可以直接读取数据并将其写入目标位置,而无需创建中间数据集,从而节省时间和资源,同时提高结果的准确性。
此外,SQL 流水线还可以帮助您优化数据存储容量。这是因为您可以使用流水线来删除或归档不再需要的数据,从而释放存储系统中的空间,这也有助于提高性能。
构建高效灵活的 SQL 流水线具有挑战性,尤其是在组织需求快速变化时。不过,通过精心规划和设计,您可以创建能够适应最复杂数据需求的流水线。
在本实验中,您将管理数据并使用 SQL 构建一条高效灵活的流水线,以满足业务需求。
场景
近年来,得益于网购的兴起,TheLook eCommerce 的利润大幅增长。但他们的配送时效未能同步提升,导致客户满意度下降。
作为 TheLook eCommerce 的一名云数据分析师,您需要与物流团队负责人 Kai 协作开发一条数据流水线,用于收集、清理、转换和加载有关客户交付情况的数据,包括从配送中心到每位客户的运输距离。
这些信息将帮助物流团队确定如何缩短配送时间并提升客户满意度,例如是否开设新的配送中心、搬迁现有配送中心,或投资新的运输方式。
您将运用自己的 BigQuery 和 SQL 技能来设计一条灵活的流水线,既能为物流团队提供可靠的数据,以更好地监控配送绩效,又能随着物流团队数据需求的变化轻松更新。
首先,您将创建一个数据集,并为要注入的数据定义表架构。接下来,您将执行并探索一系列转换。随后,您将对数据应用转换,再将转换后的数据加载到新定义的表中。最后,您将把这些查询规范化为存储过程。
设置
点击“开始实验”之前
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展活动,免受模拟或演示环境的限制。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
- 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
注意:如果您已有自己的个人 Google Cloud 账号或项目,请不要在此实验中使用,以避免您的账号产生额外的费用。
如何开始实验并登录 Google Cloud 控制台
-
点击开始实验按钮。左侧是实验详细信息面板,其中包含以下各项:
- 剩余时间
-
打开 Google Cloud 控制台按钮
- 进行该实验时必须使用的临时凭证
- 帮助您逐步完成本实验所需的其他信息(如果需要)
注意:如果该实验需要付费,系统会打开一个弹出式窗口供您选择支付方式。
-
如果您使用的是 Chrome 浏览器,点击打开 Google Cloud 控制台(或右键点击并选择在无痕式窗口中打开链接)。系统会在新的浏览器标签页中打开登录页面。
提示:您可以将这些标签页分别放在不同的窗口中,并排显示,以便轻松切换。
注意:如果您看到选择账号对话框,请点击使用其他账号。
-
如有必要,请复制下方的 Google Cloud 用户名,然后将其粘贴到登录对话框中。点击下一步。
{{{user_0.username | "Google Cloud username"}}}
您也可以在实验详细信息面板中找到 Google Cloud 用户名。
- 复制下面的 Google Cloud 密码,然后将其粘贴到欢迎对话框中。点击下一步。
{{{user_0.password | "Google Cloud password"}}}
您也可以在实验详细信息面板中找到 Google Cloud 密码。
重要提示:您必须使用实验提供的凭证。请勿使用您的 Google Cloud 账号凭证。
注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
- 依次点击后续页面,完成以下步骤:
- 接受条款及条件
- 由于这是临时账号,请勿添加账号恢复选项或双重验证
- 请勿用其注册免费试用服务
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
注意:您可以点击左上角的导航菜单来查看列有 Google Cloud 产品和服务的菜单。
任务 1. 创建数据集
在此任务中,您将在现有项目中创建一个数据集,并定义架构和数据类型。
- 进入 Cloud 控制台后,从导航菜单 (
) 中选择 BigQuery。
注意:系统可能会显示欢迎在 Cloud 控制台中使用 BigQuery 消息框,其中包含指向快速入门指南和界面更新版本说明的链接。点击完成以继续。
系统会显示导航菜单、探索器窗格和查询编辑器。
- 点击项目 ID 旁的查看操作图标 (
),然后点击创建数据集。

注意:您可能需要先选择一个项目。为此,请点击 Google Cloud 控制台标题栏中的选择项目,然后从选择项目对话框中选择项目链接。
-
在创建数据集窗格中,将数据集 ID 设置为 thelook_ecommerce。验证位置已设置为美国多区域,并将其他字段保留为默认值。
-
点击创建数据集。
现在,您会在项目名称下方看到 thelook_ecommerce 数据集。
- 在查询编辑器中,点击 SQL 查询 (+) 图标以打开新的未命名的查询标签页,以便在其中运行查询。
注意:每次在查询编辑器中运行新查询时,您都可以选择替换旧查询,方法是在同一未命名的查询标签页中复制新查询并覆盖旧查询;也可以选择点击 SQL 查询 (+) 图标,以打开新的未命名的查询标签页,然后在其中运行查询。
- 复制以下查询并将其粘贴到未命名的查询标签页中,以创建
product_order_fulfillment 表:
--Create empty product_orders_fulfillment table
CREATE OR REPLACE TABLE
`thelook_ecommerce.product_orders_fulfillment`
( order_id INT64,
user_id INT64,
status STRING,
product_id INT64,
created_at TIMESTAMP,
returned_at TIMESTAMP,
shipped_at TIMESTAMP,
delivered_at TIMESTAMP,
cost NUMERIC,
sale_price NUMERIC,
retail_price NUMERIC,
category STRING,
name STRING,
brand STRING,
department STRING,
sku STRING,
distribution_center_id INT64);
- 点击运行。
注意:如果名为 product_orders_fulfillment 的表尚不存在,此查询会创建一个同名的新表;如果该表已存在,此查询会使用新的表定义替换现有表
- 点击转到表,探索已创建的表架构和数据类型。
虽然此数据集目前为空,但一旦数据加载完毕,此处即为数据填充的位置。
点击检查我的进度,验证您已正确完成此项任务。
创建数据集
任务 2. 基于查询结果创建表
您的分析范围正在扩大,现在还包括分析配送中心与下单客户之间的距离。为此,您需要根据地理位置计算相关值。
在此任务中,您将根据 original users 和 distribution_centers 表中提供的纬度和经度值创建几何点。
- 将以下查询复制到查询编辑器中:
--Create empty customers table
CREATE OR REPLACE TABLE
`thelook_ecommerce.customers`
( id INT64,
first_name STRING,
last_name STRING,
email STRING,
age INT64,
gender STRING,
state STRING,
street_address STRING,
postal_code STRING,
city STRING,
country STRING,
traffic_source STRING,
created_at TIMESTAMP,
latitude FLOAT64,
longitude FLOAT64,
point_location GEOGRAPHY);
--Create empty centers table
CREATE OR REPLACE TABLE
`thelook_ecommerce.centers`
( id INT64,
name STRING,
latitude FLOAT64,
longitude FLOAT64,
point_location GEOGRAPHY);
此查询会为 customers 表和 centers 表创建表定义,其中将包含 users 表和 distribution_centers 表中的原始列。此查询还会向这两个表添加 point_location 列;这些 point_location 列的数据类型将设置为“地理位置”。
- 点击运行。
点击检查我的进度,验证您已正确完成此项任务。
创建新表以存储相关数据
任务 3. 对 BigQuery 数据执行转换
在此任务中,您将使用 ST_GEOGPOINT 地理位置函数创建点几何图形,其中您将调用 ST_GEOGPOINT(lon, lat)。
首先,运行以下 SQL 查询,以创建并填充 centers 和 customers 表。这些查询会从 SELECT 语句加载数据,前提是数据的原始位置信息(经度、纬度)存储在 BigQuery thelook_ecommerce 公共数据集内。
Google 公共数据集是指存储于 BigQuery 中,并通过 Google Cloud 公共数据集计划提供给公众的任何数据集。借助公共数据集,您可以轻松使用 BigQuery 中现成的公开数据,而无需加载和维护这些数据。
- 将以下查询复制到查询编辑器中:
--load the centers table from public dataset and include geography transformation
CREATE OR REPLACE TABLE
`thelook_ecommerce.centers` AS
SELECT
id,
name,
latitude,
longitude,
ST_GEOGPOINT(dcenters.longitude, dcenters.latitude) AS point_location
FROM
`bigquery-public-data.thelook_ecommerce.distribution_centers` AS dcenters;
此查询会加载包含地理位置转换的 centers 表。
- 点击运行。
注意:您可以点击转到表,探索已创建的表架构和数据类型。
- 现在,将以下查询复制到查询编辑器中:
--load the customers table from public dataset and include geography transformation
CREATE OR REPLACE TABLE
`thelook_ecommerce.customers` AS
SELECT
id,
first_name,
last_name,
email,
age,
gender,
state,
street_address,
postal_code,
city,
country,
traffic_source,
created_at,
latitude,
longitude,
ST_GEOGPOINT(users.longitude, users.latitude) AS point_location
FROM
`bigquery-public-data.thelook_ecommerce.users` AS users;
此查询会加载包含地理位置转换的 customers 表。
- 点击运行。
接下来,您需要计算用于分析的数据值。
由于客户与配送中心之间的关系非常重要,因此您将使用这些地理位置点来计算最靠近每个客户的配送中心及其距离。
为此,请使用地理位置函数 ST_DISTANCE 计算客户位置与中心之间的最短距离。
- 将以下标量子查询复制到查询编辑器中:
SELECT
customers.id as customer_id,
(
SELECT
MIN(ST_DISTANCE(centers.point_location, customers.point_location))/1000,
FROM
`thelook_ecommerce.centers` AS centers) AS distance_to_closest_center
FROM
`thelook_ecommerce.customers` AS customers ;
此查询会计算距离(以公里为单位)。
- 点击运行。

如屏幕截图所示,该查询会返回每位客户与最近的配送中心之间的距离。请花点时间查看 SELECT 语句,了解它是如何推导距离计算的。
- 展开保存下拉菜单,然后选择保存查询。

此时系统会打开保存查询对话框。
- 在名称字段中,输入
Calculate Customer Distance to Closest Center。
- 对于区域,选择“”。
- 点击保存。
查询将保存到查询列表中。

点击检查我的进度,验证您已正确完成此项任务。
对 BigQuery 数据执行转换
任务 4. 创建一个存储过程,以确保更新更便捷
存储过程是一组存储在数据库中且可以作为单个单元执行的 SQL 语句。
在此任务中,您将创建一个存储过程,将您到目前为止在任务 1-3 中手动依次生成的所有表定义、转换和注入语句纳入其中。
如需创建存储过程(在这里为 sp_create_load_tables),请在脚本开头添加 CREATE OR REPLACE PROCEDURE 语句,然后添加存储过程的名称和 BEGIN 语句。添加完存储过程的所有组成部分后,最后添加 END 语句。
要向存储过程添加内容,您可以添加表定义和数据注入部分。您可以将所有表定义放在前面,也可以按表进行聚簇,具体取决于您的偏好。不过,在本实验中,每个表定义后面都紧跟着数据注入部分以及在之前步骤中完成的任何其他转换。
您还可以在 customers 表中创建列,用于存储计算出的 distance_to_closest_center 和 closest_centervalues。该过程的巧妙之处在于,如果架构发生变化,或者您想添加其他列或生成计算列,您可轻松对存储过程进行增补或更新。更新完成后,可以将存储过程设置为定期运行。
现在,创建一个存储过程,将之前在任务 1-3 中执行的所有步骤作为单一单元执行。以下代码在执行时会更新表并相应地填充表。
- 将以下查询复制到新的未命名查询标签页中:
CREATE OR REPLACE PROCEDURE
`thelook_ecommerce.sp_create_load_tables`()
BEGIN
--Create empty product_orders_fulfillment table
CREATE OR REPLACE TABLE
`thelook_ecommerce.product_orders_fulfillment` ( order_id INT64,
user_id INT64,
status STRING,
product_id INT64,
created_at TIMESTAMP,
returned_at TIMESTAMP,
shipped_at TIMESTAMP,
delivered_at TIMESTAMP,
cost NUMERIC,
sale_price NUMERIC,
retail_price NUMERIC,
category STRING,
name STRING,
brand STRING,
department STRING,
sku STRING,
distribution_center_id INT64) ;
--load the product_order_fulfillment table from public dataset
CREATE OR REPLACE TABLE thelook_ecommerce.product_orders_fulfillment AS
SELECT
items.*,
products.id AS product_id_products,
products.name AS product_name,
products.category AS product_category,
FROM
bigquery-public-data.thelook_ecommerce.order_items AS items
JOIN
bigquery-public-data.thelook_ecommerce.products AS products
ON
(items.product_id = products.id);
--Create empty centers table
CREATE OR REPLACE TABLE
`thelook_ecommerce.centers` ( id INT64,
name STRING,
latitude FLOAT64,
longitude FLOAT64,
point_location GEOGRAPHY);
--load the centers table from public dataset and include geography transformation
CREATE OR REPLACE TABLE
`thelook_ecommerce.centers` AS
SELECT
id,
name,
latitude,
longitude,
ST_GEOGPOINT(dcenters.longitude, dcenters.latitude) AS point_location
FROM
`bigquery-public-data.thelook_ecommerce.distribution_centers` AS dcenters ;
--Create empty customers table
CREATE OR REPLACE TABLE
`thelook_ecommerce.customers` ( id INT64,
first_name STRING,
last_name STRING,
email STRING,
age INT64,
gender STRING,
state STRING,
street_address STRING,
postal_code STRING,
city STRING,
country STRING,
traffic_source STRING,
created_at TIMESTAMP,
latitude FLOAT64,
longitude FLOAT64,
point_location GEOGRAPHY);
--load the customers table from public dataset and include geography transformation
CREATE OR REPLACE TABLE
`thelook_ecommerce.customers` AS
SELECT
id,
first_name,
last_name,
email,
age,
gender,
state,
street_address,
postal_code,
city,
country,
traffic_source,
created_at,
latitude,
longitude,
ST_GEOGPOINT(users.longitude, users.latitude) AS point_location
FROM
`bigquery-public-data.thelook_ecommerce.users` AS users ;
END
;
- 点击运行。
请注意:存储过程会创建所有必需的表,并使用转换后的数据填充这些表。不过,该存储过程不会返回显示客户与其最近配送中心之间距离的查询结果。如需执行此操作,请前往下方的第 7 步。
- 展开保存下拉菜单,然后选择保存查询。此时系统会打开保存查询对话框。
- 在名称字段中,输入
sp_create_load_tables。
- 对于区域,选择“”。
- 点击保存。此存储过程将显示在数据集的例程部分中:
- 点击运行以运行此存储过程。
如上文任务 3 的第 5 步所示,运行 SELECT SQL 语句,获取每位客户与最近的配送中心之间的距离。
- 将以下标量子查询复制到查询编辑器中:
SELECT
customers.id as customer_id,
(
SELECT
MIN(ST_DISTANCE(centers.point_location, customers.point_location))/1000,
FROM
`thelook_ecommerce.centers` AS centers) AS distance_to_closest_center
FROM
`thelook_ecommerce.customers` AS customers ;
此查询会计算距离(以公里为单位)。
- 点击运行。

点击检查我的进度,验证您已正确完成此项任务。
通过创建存储过程来确保更新更便捷
注意:您不会在本实验中运行预定查询,但务必要了解更新数据和维护 SQL 流水线的多种方式。
如需设置预定查询,您只需点击查询编辑器中的时间表。系统会打开“新建排定的查询”窗口,其中包含若干查询详情供您指定。对于需要定期更新的任何查询,您都可以执行此操作。
总结
太棒了!
您已成功使用 SQL 和 BigQuery 创建了一条简单而灵活的数据流水线,可满足业务需求。
首先,您创建了一个数据集,并为要注入的数据定义了表架构。接下来,您执行并探索了一系列转换。
随后,您对数据应用了转换,再将转换后的数据加载到了新定义的表中。
最后,您将这些查询规范化为存储过程,以包含相关的计算值,并了解了如何设置定期更新的预定查询。
通过本实验,您了解了创建数据集以及为其中所含数据定义表架构的重要性。通过运行并分析一系列转换,您已掌握对数据应用转换,然后将转换后的数据导入新定义的表中这一技能。您还学习了如何将这些查询规范化为存储过程,以包含相关的计算值,以及如何设置定期更新的预定查询。
您已掌握如何利用 BigQuery 创建和管理 SQL 流水线。
结束实验
在结束实验之前,请确保您已完成所有任务。准备就绪后,点击结束实验,然后点击提交。
结束实验后,您将无法再访问实验环境,也无法再访问您在其中完成的工作成果。
版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名称和产品名称可能是其各自相关公司的商标。