用 Apps 脚本集成 BigQuery 数据和 Google Workspace:实验室挑战赛
实验
20 分钟
universal_currency_alt
1 个点数
show_chart
入门级
info
此实验可能会提供 AI 工具来支持您学习。
此内容尚未针对移动设备进行优化。
为获得最佳体验,请在桌面设备上访问通过电子邮件发送的链接。
ARC133

概览
在实验室挑战赛中,我们会为您提供一个场景和一系列任务。您将使用从课程的各个实验中学到的技能自行确定如何完成这些任务,而不是按照分步说明进行操作。自动评分系统(显示在本页面中)会提供有关您是否已正确完成任务的反馈。
在您参加实验室挑战赛期间,我们不会再教授新的 Google Cloud 概念知识。您需要拓展所学的技能,例如通过更改默认值和查看并研究错误消息来更正您自己所犯的错误。
要想获得满分,您必须在该时间段内成功完成所有任务!
设置和要求
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
- 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。
挑战场景
您是一名初级云工程师,进入了一个团队工作。到目前为止,您一直在帮助团队创建和管理 Google Cloud 资源。
在本实验中,您面临的挑战是使用 Google Cloud 的 BigQuery API(作为 Apps 脚本的一项高级服务)和适用于 Google 表格的 Apps 脚本内置服务来执行数据分析。
此外,您还需要在 Google 表格中创建电子表格并在其中填充数据,以及使用电子表格数据创建图表。
您应该掌握了完成这些任务所需的技能和知识。
您的挑战
在本实验中,您需要:
- 使用 Apps 脚本查询 BigQuery 并将结果记录到 Google 表格的一个工作表中。
- 将 BigQuery 数据集关联到 Google 表格。
- 通过关联工作表,使用 Google 图表直观呈现电子表格数据。
- 使用 Apps 脚本创建一个新工作表并在表中填充数据。
任务 1. 查询 BigQuery 并将结果记录到 Google 表格中
在此任务中,您需要前往 script.google.com 创建一个新的 Apps 脚本项目,然后将该项目重命名为您选择的名称,这是执行后续步骤的前提条件。
输入并运行应用代码
- 复制下方框中的代码并粘贴到代码编辑器中,覆盖所有现有内容:
Code.gs
/**
* Copyright 2018 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Filename for data results
var QUERY_NAME = "Most common words in all of Shakespeare's works";
var PROJECT_ID = "{{{project_0.project_id|PROJECT_ID}}}";
if (!PROJECT_ID) throw Error('Project ID is required in setup');
/**
* Runs a BigQuery query; puts results into Sheet. You must enable
* the BigQuery advanced service before you can run this code.
* @see http://developers.google.com/apps-script/advanced/bigquery#run_query
* @see http://github.com/gsuitedevs/apps-script-samples/blob/master/advanced/bigquery.gs
*
* @returns {Spreadsheet} Returns a spreadsheet with BigQuery results
* @see http://developers.google.com/apps-script/reference/spreadsheet/spreadsheet
*/
function runQuery() {
// Replace sample with your own BigQuery query.
var request = {
query:
'SELECT ' +
'LOWER(word) AS word, ' +
'SUM(word_count) AS count ' +
'FROM [bigquery-public-data:samples.shakespeare] ' +
'GROUP BY word ' +
'ORDER BY count ' +
'DESC LIMIT 10'
};
var queryResults = BigQuery.Jobs.query(request, PROJECT_ID);
var jobId = queryResults.jobReference.jobId;
// Wait for BQ job completion (with exponential backoff).
var sleepTimeMs = 500;
while (!queryResults.jobComplete) {
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId);
}
// Get all results from BigQuery.
var rows = queryResults.rows;
while (queryResults.pageToken) {
queryResults = BigQuery.Jobs.getQueryResults(PROJECT_ID, jobId, {
pageToken: queryResults.pageToken
});
rows = rows.concat(queryResults.rows);
}
// Return null if no data returned.
if (!rows) {
return Logger.log('No rows returned.');
}
// Create the new results spreadsheet.
var spreadsheet = SpreadsheetApp.create(QUERY_NAME);
var sheet = spreadsheet.getActiveSheet();
// Add headers to Sheet.
var headers = queryResults.schema.fields.map(function(field) {
return field.name.toUpperCase();
});
sheet.appendRow(headers);
// Append the results.
var data = new Array(rows.length);
for (var i = 0; i < rows.length; i++) {
var cols = rows[i].f;
data[i] = new Array(cols.length);
for (var j = 0; j < cols.length; j++) {
data[i][j] = cols[j].v;
}
}
// Start storing data in row 2, col 1
var START_ROW = 2; // skip header row
var START_COL = 1;
sheet.getRange(START_ROW, START_COL, rows.length, headers.length).setValues(data);
Logger.log('Results spreadsheet created: %s', spreadsheet.getUrl());
}
-
将文件名更改为 bq-sheets.gs,然后按 Enter 键。
-
查看函数 runQuery() 的查询代码:
SELECT
LOWER(word) AS word,
SUM(word_count) AS count
FROM [bigquery-public-data:samples.shakespeare]
GROUP BY word
ORDER BY count
DESC LIMIT 10
此查询会遍历莎士比亚的作品(包含在 BigQuery 公共数据集中),并找出其所有作品中出现频率最高的 10 个单词,按出现次数降序排列。
- 保存文件,通过点击菜单栏中的运行选项来运行代码。
注意:保存并运行代码后,如果您收到错误消息 Exception: Service BigQuery API has not been enabled for your Apps,请移除 BigQuery API 服务并重新添加。
点击“检查我的进度”以验证是否完成了以下目标:
查询 BigQuery 并将结果记录到工作表中
任务 2. 使用关联工作表在图表上执行计算
- 在此任务中,您需要分析一个包含芝加哥出租车行程数据的公共数据集。首先,打开 Google 表格首页。
将 BigQuery 数据集关联到 Google 表格
- 将新的空白电子表格连接到 BigQuery 数据集。
- 使用数据连接器将 BigQuery 数据集关联到 Google 表格。
- 依次选择您的项目 ID > 公共数据集 > chicago_taxi_trips > taxi_trips。
结合使用关联工作表与公式
- 接下来,您可以将关联工作表与不同的公式结合使用。
- 找出芝加哥有多少家出租车公司。
- 找出在芝加哥包含小费的出租车行程所占的百分比。
- 查找车费大于 0 的行程的总数量。
点击“检查我的进度”以验证是否完成了以下目标:
结合使用关联工作表与公式
任务 3. 结合使用关联工作表与 Google 图表
在此任务中,您将使用 Google 图表(本例中使用饼图和折线图)呈现出租车行程支付方式的受欢迎程度和变化趋势。
在 Google 图表中查看以下信息:
- 以饼图的形式显示人们在乘坐出租车时使用哪些支付方式。
- 以折线图的形式显示出租车行程的移动支付收入随时间如何变化。
- 以折线图的形式显示自 2015 年收入达到峰值以来移动支付情况随时间如何变化。
点击“检查我的进度”以验证是否完成了以下目标:
结合使用关联工作表与图表
任务 4. 使用 Apps 脚本在 Google 表格中创建新的工作表并输入数据
在此任务中,您需要在新的 Google 表格中输入街道地址,以准备使用 Apps 脚本编辑器。
-
打开 Google 表格,以便创建新的工作表。
-
在空白电子表格中,点击左上角的第一个单元格 (A1)。它位于 A 列第 1 行。
-
在第一个单元格中输入以下地址。
点击“检查我的进度”以验证是否完成了以下目标:
在 Google 表格中创建新的工作表并输入街道地址
恭喜!
恭喜!您已成功用 Apps 脚本集成 BigQuery 数据和 Google Workspace,在 Google 表格的一个工作表中记录了查询结果,将 BigQuery 数据集关联到了 Google 表格,借助关联工作表使用 Google 图表直观呈现了电子表格数据,还使用 Apps 脚本创建了新工作表并在表中填充了数据。

Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2024 年 8 月 9 日
上次测试实验的时间:2024 年 8 月 9 日
版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。