GSP071

概览
如果没有合适的硬件和基础设施,存储和查询大量数据集可能非常耗时且成本高昂。BigQuery 是一种无服务器、高伸缩性的云数据仓库,它借助 Google 基础设施的强大处理能力实现了极其快速的 SQL 查询功能,从而解决了上述问题。您只需将数据迁移至 BigQuery,余下的困难部分由我们负责。您可以根据业务需求控制对项目和数据的访问权限,例如授权其他人来查看或查询您的数据。
您可以通过各种客户端库(例如 Java、.NET 或 Python)使用控制台、网页界面或命令行工具来访问 BigQuery。另外,您还可以借助许多解决方案提供商来与 BigQuery 交互。
本实操实验将向您介绍如何使用 bq
(一款基于 Python 的命令行工具,适用于 BigQuery)来查询公共表,以及如何将示例数据加载到 BigQuery 中。
您将执行的操作
- 查询公共数据集
- 创建新数据集
- 将数据加载到新表中
- 查询自定义表
设置和要求
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
- 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。
如何开始实验并登录 Google Cloud 控制台
-
点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:
- “打开 Google Cloud 控制台”按钮
- 剩余时间
- 进行该实验时必须使用的临时凭据
- 帮助您逐步完成本实验所需的其他信息(如果需要)
-
点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。
该实验会启动资源并打开另一个标签页,显示“登录”页面。
提示:将这些标签页安排在不同的窗口中,并排显示。
注意:如果您看见选择账号对话框,请点击使用其他账号。
-
如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。
{{{user_0.username | "<用户名>"}}}
您也可以在“实验详细信息”窗格中找到“用户名”。
-
点击下一步。
-
复制下面的密码,然后将其粘贴到欢迎对话框中。
{{{user_0.password | "<密码>"}}}
您也可以在“实验详细信息”窗格中找到“密码”。
-
点击下一步。
重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。
注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
-
继续在后续页面中点击以完成相应操作:
- 接受条款及条件。
- 由于这是临时账号,请勿添加账号恢复选项或双重验证。
- 请勿注册免费试用。
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。
激活 Cloud Shell
Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。
-
点击 Google Cloud 控制台顶部的激活 Cloud Shell
。
-
在弹出的窗口中执行以下操作:
- 继续完成 Cloud Shell 信息窗口中的设置。
- 授权 Cloud Shell 使用您的凭据进行 Google Cloud API 调用。
如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID 。输出内容中有一行说明了此会话的 Project_ID:
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud
是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。
- (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
- 点击授权。
输出:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (可选)您可以通过此命令列出项目 ID:
gcloud config list project
输出:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注意:如需查看在 Google Cloud 中使用 gcloud
的完整文档,请参阅 gcloud CLI 概览指南。
任务 1. 查看表
BigQuery 提供了一些示例表,您可以基于这些表运行查询。在本实验中,您将基于 shakespeare
表运行查询,该表包含莎士比亚每场戏剧中每个单词的记录。
要查看示例数据集中 Shakespeare 表的架构,请运行以下命令:
bq show bigquery-public-data:samples.shakespeare
此命令的具体含义解析:
-
bq
用于调用 BigQuery 命令行工具
-
show
是要执行的操作
- 后面是您想在 BigQuery 中查看的
project:public dataset.table
的名称。
输出如下:
Last modified Schema Total Rows Total Bytes Expiration Time Partitioning Clustered Fields Labels
----------------- ------------------------------------ ------------ ------------- ------------ ------------------- ------------------ --------
14 Mar 13:16:45 |- word: string (required) 164656 6432064
|- word_count: integer (required)
|- corpus: string (required)
|- corpus_date: integer (required)
任务 2. 运行帮助命令
如果您在帮助命令中添加某个命令的名称,那么您会获得该特定命令的相关信息。
- 例如,以下对
bq help
的调用可检索关于 query
命令的信息:
bq help query
- 要查看
bq
使用的所有命令的清单,只需运行 bq help
。
任务 3. 运行查询
接下来您将执行查询,来查看子字符串“raisin”在莎士比亚作品中出现的次数。
- 要执行查询,请运行
bq query "[SQL_STATEMENT]"
命令:
- 在 Cloud Shell 中运行以下标准 SQL 查询来统计子字符串“raisin”在莎士比亚作品集中出现的次数:
bq query --use_legacy_sql=false \
'SELECT
word,
SUM(word_count) AS count
FROM
`bigquery-public-data`.samples.shakespeare
WHERE
word LIKE "%raisin%"
GROUP BY
word'
在此命令中:
-
--use_legacy_sql=false
表示将标准 SQL 设为默认查询语法。
输出如下:
Waiting on job_e19 ... (0s) Current status: DONE
+---------------+-------+
| word | count |
+---------------+-------+
| praising | 8 |
| Praising | 4 |
| raising | 5 |
| dispraising | 2 |
| dispraisingly | 1 |
| raisins | 1 |
此表表明,与 raisin 完全匹配的单词并未出现,但这几个字母整体作为其他单词的一部分曾几次出现在莎士比亚的作品中。
验证您已完成的任务
点击检查我的进度,验证您已完成的任务。如果您成功对公共数据集运行了查询,系统会显示一个评估分数。
运行查询(数据集:samples,表:shakespeare,子字符串:raisin)
如果您搜索的字词未在莎士比亚的作品中出现过,则不会返回任何结果。
- 例如,以下对“huzzah”的搜索不会返回任何匹配项:
bq query --use_legacy_sql=false \
'SELECT
word
FROM
`bigquery-public-data`.samples.shakespeare
WHERE
word = "huzzah"'
验证您已完成的任务
点击检查我的进度,验证您已完成的任务。如果您成功对公共数据集运行了查询,系统会显示一个评估分数。
运行查询(数据集:samples,表:shakespeare,子字符串:huzzah)
任务 4. 创建新表
现在您需要创建自己的表。每个表都存储在一个数据集中。一个数据集是一组资源(例如表和视图)。
创建新数据集
- 您可以使用
bq ls
命令列出您项目中的所有现有数据集:
bq ls
由于您的项目中尚无任何数据集,系统会将您返回命令行。
- 运行
bq ls
,加上项目 ID bigquery-public-data
并且后接英文冒号 (:),来列出该特定项目中的数据集:
bq ls bigquery-public-data:
输出如下:
datasetId
-----------------------------
austin_311
austin_bikeshare
austin_crime
austin_incidents
austin_waste
baseball
bitcoin_blockchain
bls
census_bureau_construction
census_bureau_international
census_bureau_usa
census_utility
chicago_crime
...
现在我们来创建数据集。数据集名称最多可使用 1024 个字符,可包含 A-Z、a-z、0-9 和下划线,但不能以数字或下划线开头,也不能有空格。
- 使用
bq mk
命令在您的项目中创建名为 babynames
的新数据集:
bq mk babynames
示例输出:
Dataset 'qwiklabs-gcp-ba3466847fe3cec0:babynames' successfully created.
验证您已完成的任务
点击检查我的进度,验证您已完成的任务。如果您成功创建了名为“babynames”的 BigQuery 数据集,系统会显示一个评估分数。
创建新数据集(名称:babynames)
- 运行
bq ls
确认该数据集现已出现在您的项目中:
bq ls
示例输出:
datasetId
-------------
babynames
上传数据集
在能够创建表之前,您需要将相应数据集添加至项目。您将使用的自定义数据文件包含了约 7 MB 的热门婴儿姓名数据,该文件由美国社会保障管理局提供。
- 运行以下命令,使用婴儿姓名 zip 文件的网址将该数据文件添加至您的项目:
wget http://www.ssa.gov/OACT/babynames/names.zip
- 列出文件:
ls
您会看到该文件已添加到您的项目中。
- 现在解压缩该文件:
unzip names.zip
- 您会看到一大堆文本文件!再次列出各个文件:
ls
使用 bq load
命令,只需一步即可创建或更新表并加载数据。
您将使用 bq load
命令,将源文件加载到刚刚创建的婴儿姓名数据集中的新表(名为 names2010)中。默认情况下,此命令会以同步方式运行,并且只需几秒即可完成。
您将运行的 bq load
参数如下:
datasetID: babynames
tableID: names2010
source: yob2010.txt
schema: name:string,gender:string,count:integer
- 创建表:
bq load babynames.names2010 yob2010.txt name:string,gender:string,count:integer
示例输出:
Waiting on job_4f0c0878f6184119abfdae05f5194e65 ... (35s) Current status: DONE
验证您已完成的任务
点击检查我的进度,验证您已完成的任务。如果您已成功将数据加载到数据集表中,系统会显示一个评估分数。
将数据加载到新表中
- 运行
bq ls
加上 babynames
,确认您的数据集中会显示该表:
bq ls babynames
输出如下:
tableId Type
----------- -------
names2010 TABLE
- 运行
bq show
加上 dataset.table
来查看架构:
bq show babynames.names2010
输出如下:
Last modified Schema Total Rows Total Bytes Expiration Time Partitioning Clustered Fields Labels
----------------- ------------------- ------------ ------------- ----------------- ------------------- ------------------ --------
13 Aug 14:37:34 |- name: string 34073 654482 12 Oct 14:37:34
|- gender: string
|- count: integer
注意:默认情况下,当您加载数据时,BigQuery 会要求采用 UTF-8 编码数据。如果您的数据采用 ISO-8859-1(或 Latin-1)编码,并且在加载数据时遇到问题,可以使用 -E
标志明确告知 BigQuery 将数据视为 Latin-1 编码。如需详细了解有关字符编码的信息,请参阅数据加载简介指南。
任务 5. 运行查询
现在您就可以查询数据,让系统返回一些有趣的结果了。
- 运行以下命令来查询最受欢迎的五个女孩名:
bq query "SELECT name,count FROM babynames.names2010 WHERE gender = 'F' ORDER BY count DESC LIMIT 5"
输出如下:
Waiting on job_58c0f5ca52764ef1902eba611b71c651 ... (0s) Current status: DONE
+----------+-------+
| name | count |
+----------+-------+
| Isabella | 22913 |
| Sophia | 20643 |
| Emma | 17345 |
| Olivia | 17028 |
| Ava | 15433 |
+----------+-------+
- 运行以下命令来查询最不常用的五个男孩名:
bq query "SELECT name,count FROM babynames.names2010 WHERE gender = 'M' ORDER BY count ASC LIMIT 5"
注意:最小计数为 5,因为源数据省略了出现次数少于 5 次的名字。
输出如下:
Waiting on job_556ba2e5aad340a7b2818c3e3280b7a3 ... (1s) Current status: DONE
+----------+-------+
| name | count |
+----------+-------+
| Aaqib | 5 |
| Aaidan | 5 |
| Aadhavan | 5 |
| Aarian | 5 |
| Aamarion | 5 |
+----------+-------+
验证您已完成的任务
点击检查我的进度,验证您已完成的任务。如果您成功对自定义数据集运行了查询,系统会显示一个评估分数。
对您的数据集表运行查询
任务 6. 检验您的掌握情况
下列选择题应该可以强化您对本实验所涉概念的理解。请尽您所能回答。
任务 7. 清理
- 运行
bq rm
命令移除带有 -r
标记的 babynames
数据集,来删除数据集中的所有表:
bq rm -r babynames
- 输入
Y
以确认删除命令。
验证您已完成的任务
点击检查我的进度,验证您已完成的任务。如果您成功移除了婴儿名称数据集,系统会显示相应评分。
移除婴儿名称数据集
恭喜!
现在您可以使用命令行来查询公共表,并将示例数据加载到 BigQuery 中了。
后续步骤/了解详情
本实验是 Qwik Starts 系列实验的其中一项。通过这些实验,您可以一窥 Google Cloud 的诸多功能。请在实验目录中搜索“Qwik Starts”,找到您要参与的下一项实验!
Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
本手册的最后更新时间:2025 年 5 月 2 日
本实验的最后测试时间:2025 年 5 月 2 日
版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。