GSP1049

概览
Cloud Spanner 是 Google 推出的可横向扩容的全托管式关系型数据库服务。金融服务、游戏、零售及众多其他行业的客户都信赖该服务,依托其运行自身要求最严苛的工作负载。在此类场景下进行大规模部署时,服务的一致性和可用性都至关重要。
在本实验中,您将探索通过各种方式将数据加载到 Cloud Spanner 并执行数据库备份。
您将执行的操作
- 使用 DML 插入数据
- 通过客户端库插入数据
- 通过客户端库插入批量数据
- 使用 Dataflow 加载数据
- 备份数据库
设置和要求
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 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. 探索实例
在部署期间,系统为您创建了 Cloud Spanner 实例、数据库和表。
- 在控制台中,打开导航菜单 (
) > 查看所有产品。在数据库部分下,点击 Spanner。
实例名称为 banking-instance,点击该名称以探索数据库。
关联的数据库名为 banking-db。
点击该数据库进行探索,您会看到其中已经有一个名为 Customer 的表。
点击该表,即可查看架构。
- 该表目前为空。返回
banking-db 概览页面。在左侧菜单中,点击 Spanner Studio,然后运行以下命令:
SELECT * FROM Customer;
- 没有返回任何结果。
任务 2. 使用 DML 插入数据
通过 DML 向 Spanner 插入数据是最简单的方法。您可以使用 Cloud Shell 和 gcloud 运行任何 DML 语句,包括 INSERT。
- 在 Cloud Shell 中,运行以下命令:
gcloud spanner databases execute-sql banking-db --instance=banking-instance \
--sql="INSERT INTO Customer (CustomerId, Name, Location) VALUES ('bdaaaa97-1b4b-4e58-b4ad-84030de92235', 'Richard Nelson', 'Ada Ohio')"
- 返回控制台,在左侧菜单中点击概览。前往 Customer 表并选择数据,您将看到刚刚插入的行。
如前所述,您可以使用 gcloud 运行任何 DML 命令。请查阅 DML 和 Spanner 文档。
当然,逐行加载数据库是低效的。
任务 3. 通过客户端库插入数据
通过程序化接口访问 Spanner 是一种理想的方式。客户端库有很多种,包括 C++、C#、Go、Java、Node.js、PHP、Python 和 Ruby。
- 在 Cloud Shell 中,输入以下命令来调用 Nano 文本编辑器,并创建一个名为 insert.py 的全新空白配置文件。
nano insert.py
- 粘贴下方列出的代码块。
from google.cloud import spanner
from google.cloud.spanner_v1 import param_types
INSTANCE_ID = "banking-instance"
DATABASE_ID = "banking-db"
spanner_client = spanner.Client()
instance = spanner_client.instance(INSTANCE_ID)
database = instance.database(DATABASE_ID)
def insert_customer(transaction):
row_ct = transaction.execute_update(
"INSERT INTO Customer (CustomerId, Name, Location)"
"VALUES ('b2b4002d-7813-4551-b83b-366ef95f9273', 'Shana Underwood', 'Ely Iowa')"
)
print("{} record(s) inserted.".format(row_ct))
database.run_in_transaction(insert_customer)
-
按 Ctrl+X 退出 Nano,按 Y 确认更新,然后按 Enter 保存更改。
-
运行 Python 代码。
python3 insert.py
- 刷新 Cloud 控制台,或点击左侧菜单中的其他项,然后再次点击数据,您将看到数据库中的新行。
就像使用 gcloud 一样,您也可以从客户端库运行任何 DML 语句。您可以在文档中找到所有不同语言的多个示例。
与使用 gcloud 加载数据相比,这种方法更加灵活,但在加载包含大量行的数据源时仍有局限性。
- 点击检查我的进度以验证是否完成了以下目标:
通过客户端库插入数据
任务 4. 通过客户端库插入批量数据
向 Spanner 中批量加载数据无疑是一种更理想的方式。所有客户端库都支持批量加载。此示例使用了 Python。
- 在 Cloud Shell 中,输入以下命令来调用 Nano 文本编辑器,并创建一个名为 batch_insert.py 的全新空白配置文件。
nano batch_insert.py
- 粘贴下方列出的代码块。
from google.cloud import spanner
from google.cloud.spanner_v1 import param_types
INSTANCE_ID = "banking-instance"
DATABASE_ID = "banking-db"
spanner_client = spanner.Client()
instance = spanner_client.instance(INSTANCE_ID)
database = instance.database(DATABASE_ID)
with database.batch() as batch:
batch.insert(
table="Customer",
columns=("CustomerId", "Name", "Location"),
values=[
('edfc683f-bd87-4bab-9423-01d1b2307c0d', 'John Elkins', 'Roy Utah'),
('1f3842ca-4529-40ff-acdd-88e8a87eb404', 'Martin Madrid', 'Ames Iowa'),
('3320d98e-6437-4515-9e83-137f105f7fbc', 'Theresa Henderson', 'Anna Texas'),
('6b2b2774-add9-4881-8702-d179af0518d8', 'Norma Carter', 'Bend Oregon'),
],
)
print("Rows inserted")
-
按 Ctrl+X 退出 Nano,按 Y 确认更新,然后按 Enter 保存更改。
-
运行 Python 代码。
python3 batch_insert.py
- 返回 Cloud 控制台,刷新以查看刚刚插入的新数据。
批量方法效率更高,因为它是作为单个请求运行的。只需要客户端-服务器之间的一次往返,从而减少了延迟时间。
但是,这种加载数据的方法非常缓慢且资源消耗过大。
- 点击检查我的进度以验证是否完成了以下目标:
通过客户端库插入批量数据
任务 5. 使用 Dataflow 加载数据
Dataflow 是一项 Google Cloud 服务,可大规模流式处理和批量处理数据。Dataflow 使用多个工作器并行运行数据处理工作。数据处理方式是使用流水线定义的,这些流水线将在数据从起点(数据源)到达终点(接收器)的过程中转换数据。
Dataflow 中有适用于 Spanner 的连接器,支持将数据库连接为数据源或接收器。
要想加载大量数据,您可以利用 Dataflow 强大的无服务器分布式能力,从数据源(例如 Google Cloud Storage 中的 CSV 文件)读取数据,并使用接收器连接器将数据加载到 Spanner 数据库。
- 为做好 Dataflow 作业的前期准备工作,请在 Cloud Shell 中运行以下命令,以便在项目中创建一个存储桶,并在存储桶里创建一个包含空文件的文件夹。
gsutil mb gs://{{{project_0.project_id|Project ID}}}
touch emptyfile
gsutil cp emptyfile gs://{{{project_0.project_id|Project ID}}}/tmp/emptyfile
- 为确保 API 和权限设置得当,请在 Cloud Shell 中执行以下代码块。
gcloud services disable dataflow.googleapis.com --force
gcloud services enable dataflow.googleapis.com
-
在控制台中,打开导航菜单 (
) > 查看所有产品。在 Analytics 部分下,点击 Dataflow。
-
在屏幕顶部,点击基于模板创建作业。
-
在模板中输入以下值:
-
向下滚动 Dataflow 模板选择器,您将看到可与 Dataflow 搭配使用的所有不同蓝图。当然,您也可以使用 Beam SDK 定制自己的流水线。
模板主要有两种类型:
-
流处理模板将为持续流动和处理的数据创建流水线(例如,来自网站的在线订单)。
-
批处理模板将处理有起止范围的数据集(例如存储在 Google Cloud Storage 中的文件)。
在您的场景中,您将从超过 15 万行的 CSV 文件向 Spanner 银行数据库中加载数据。
-
选择 Cloud Storage 上的文本文件到 Cloud Spanner 模板。
-
在模板中输入以下值:
| 项 |
值 |
| Cloud Spanner 实例 ID |
banking-instance |
| Cloud Spanner 数据库 ID |
banking-db |
| 文本导入清单文件 |
spls/gsp1049/manifest.json |
manifest.json 文件格式在本模板的教程中(点击参数输入字段上方的打开教程即可访问)已有说明。
清单文件必须存储在 Dataflow 可以访问和读取的 Google Cloud Storage 存储桶中。在本实验中,manifest.json 的内容如下:
{
"tables": [
{
"table_name": "Customer",
"file_patterns": [
"gs://spls/gsp1049/Customer_List.csv"
],
"columns": [
{"column_name" : "CustomerId", "type_name" : "STRING" },
{"column_name" : "Name", "type_name" : "STRING" },
{"column_name" : "Location", "type_name" : "STRING" }
]
}
]
}
清单文件指定了表、列的名称和类型(按照在 CSV 文件中显示的顺序)以及 CSV 文件本身,该文件也存储在 Google Cloud Storage 存储桶中。
CSV 文件如下所示:
9d238899-8348-4642-9c00-77dc4481145b,Nicole Anderson,Ada Ohio
360ecaa6-9ec3-4fa0-81a5-3b0dc629e1fa,Ellen Richardson,Ada Ohio
8ee6c2ea-923b-45db-8d51-7f8e7a117af0,Wendy Daniel,Ada Ohio
1d7112cc-c1ee-414f-9325-95c97f9a25d3,Virginia Beasley,Ada Ohio
...
- 对于临时位置参数,输入以下值:
{{{project_0.project_id|Project ID}}}/tmp
-
展开可选参数。
-
取消选中使用默认机器类型。
-
在通用部分,进行以下选择:
- 系列:E2
- 机器类型:e2-medium(2 个 vCPU、4 GB 内存)
-
点击运行作业以启动流水线。
-
此过程大约需要 12 到 16 分钟。您会看到 Dataflow 经历多个阶段:首先是启动工作器并分析由模板生成的流水线,然后,它会读取清单文件并开始处理 CSV 文件。
注意:如果您的流水线失败且发生的错误与工作器节点未预配有关,请回到第 4 步使用同一模板创建同名的新作业。这次,请选择美国境内的另一个区域端点。例如,如果第 5 步中列出的区域端点是“us-east4”,则在第二次尝试时请使用“us-east1”。
等待 Dataflow 处理完毕后再继续。完成后,其状态将显示为成功。
-
在 Cloud 控制台的左侧菜单中选择 Spanner,返回该界面。前往 Customer 表并选择数据。您将看到使用 Dataflow 加载的所有新行。
-
返回 banking-db 概览页面。在左侧菜单中,点击 Spanner Studio,然后运行以下查询,查看 Customer 表中的总行数:
SELECT COUNT(*) FROM Customer;
借助 Dataflow 模板,可以轻松(而且很快!)加载大量数据。您可以加载其他数据库的转储文件,还可以按照相同的过程加载 CSV 文件和 Avro 文件。您甚至可以反向运行该流程,在 Dataflow 中使用 Spanner 数据库作为数据源,将数据导出到 CSV 或 Avro 文件。
- 点击检查我的进度以验证是否完成了以下目标:
使用 Dataflow 加载数据
任务 6. 备份数据库
如上所述,使用 Dataflow 可以创建数据备份。但 Spanner 有自己的备份工具。
您可以从 Cloud 控制台、客户端库或使用 gcloud 命令备份 Spanner 数据库。请查阅前面的文档链接。
在本实验中,您将使用 Cloud 控制台备份数据库。
-
从左侧菜单中选择备份/恢复。
-
点击创建备份。
-
在向导中输入或选择以下值:
| 项 |
值 |
| 数据库名称 |
banking-db |
| 备份名称 |
banking-backup-001 |
| 失效日期 |
1 年 |
-
点击创建。
-
备份大约需要 15 分钟才能完成,在创建过程中它会显示在备份列表中。
恭喜!
现在,您已经扎实地掌握了向 Cloud Spanner 实例中加载数据并执行备份的各种方法。
Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2025 年 9 月 16 日
上次测试实验的时间:2025 年 9 月 16 日
版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。