使用 Spanner 创建在线银行应用

1. 概览

Spanner 是一款全托管式、可横向扩缩的全球分布式数据库服务,非常适合关系型和非关系型运营工作负载。除了核心功能之外,Spanner 还提供强大的高级功能,可用于构建智能型数据驱动的应用。

此 Codelab 在对 Spanner 有了一定了解的基础上,深入了解如何利用其高级集成来增强数据处理和分析功能,并以网上银行应用为基础。

我们将重点介绍以下三项关键的高级功能:

  • Vertex AI 集成:了解如何将 Spanner 与 Google Cloud 的 AI 平台 Vertex AI 无缝集成。您将学习如何直接从 Spanner SQL 查询中调用 Vertex AI 模型,从而实现强大的数据库内转换和预测,使我们的银行应用能够自动对交易进行分类,以用于预算跟踪和异常检测等应用场景。
  • 全文搜索:了解如何在 Spanner 中实现全文搜索功能。您将探索如何为文本数据编制索引,以及如何编写高效的查询来对运营数据执行基于关键字的搜索,从而实现强大的数据发现功能,例如在银行系统中按电子邮件地址高效查找客户。
  • BigQuery 联合查询:了解如何利用 Spanner 的联合查询功能直接查询 BigQuery 中的数据。这样一来,您就可以将 Spanner 的实时运营数据与 BigQuery 的分析数据集相结合,从而获得全面的数据分析洞见和报告,而无需进行数据复制或复杂的 ETL 流程。这有助于在我们的银行应用中实现各种使用情形,例如通过将实时客户数据与 BigQuery 中更广泛的历史趋势相结合,开展有针对性的营销活动。

学习内容

  • 如何设置 Spanner 实例。
  • 如何创建数据库和表。
  • 如何将数据加载到 Spanner 数据库表中。
  • 如何从 Spanner 调用 Vertex AI 模型。
  • 如何使用模糊搜索和全文搜索查询 Spanner 数据库。
  • 如何从 BigQuery 对 Spanner 执行联合查询。
  • 如何删除 Spanner 实例。

所需条件

  • 与结算账号相关联的 Google Cloud 项目。
  • 网络浏览器,例如 ChromeFirefox

2. 设置和要求

创建项目

如果您已经有一个启用了结算功能的 Google Cloud 云项目,请点击控制台左上方的项目选择下拉菜单:

现有项目

如果已选择项目,请跳至启用所需的 API

如果您还没有 Google 账号(Gmail 或 Google Apps),则必须创建一个。登录 Google Cloud Platform Console (console.cloud.google.com) 并创建一个新项目。

在出现的对话框中点击“新建项目”按钮以创建一个新项目:

新建项目

如果您还没有项目,则应该看到一个类似这样的对话框来创建您的第一个项目:

“项目”对话框

随后的项目创建对话框可让您输入新项目的详细信息。

请记住项目 ID,它是所有 Google Cloud 项目中的唯一名称。它稍后将在此 Codelab 中被称为 PROJECT_ID

项目详情

接下来,如果尚未执行此操作,则需要在开发者控制台中启用结算功能,以便使用 Google Cloud 资源并启用 Spanner APIVertex AI APIBigQuery APIBigQuery Connection API

项目结算

如需了解 Spanner 价格,请参阅此处。与其他资源相关的其他费用将在其各自的价格页面中说明。

Google Cloud Platform 的新用户有资格获享 $300 免费试用

Google Cloud Shell 设置

在此 Codelab 中,我们将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。

基于 Debian 的这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5 GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证。这意味着在本 Codelab 中,您只需要一个浏览器。

如需从 Cloud 控制台激活 Cloud Shell,只需点击“激活 Cloud Shell”图标 Cloud Shell 图标(预配和连接到环境仅需花费一些时间)。

Cloud Shell

在连接到 Cloud Shell 后,您应该会看到自己已通过身份验证,并且相关项目已设置为您的 PROJECT_ID

gcloud auth list

预期输出:

Credentialed Accounts

ACTIVE: *
ACCOUNT: <myaccount>@<mydomain>.com
gcloud config list project

预期输出:

[core]
project = <PROJECT_ID>

如果出于某种原因未设置项目,请发出以下命令:

gcloud config set project <PROJECT_ID>

正在查找您的 PROJECT_ID?检查您在设置步骤中使用的 ID,或在 Cloud 控制台信息中心查找该 ID:

项目 ID

默认情况下,Cloud Shell 还会设置一些环境变量,这对您日后运行命令可能会很有用。

echo $GOOGLE_CLOUD_PROJECT

预期输出:

<PROJECT_ID>

启用所需的 API

为您的项目启用 Spanner、Vertex AI 和 BigQuery API:

gcloud services enable spanner.googleapis.com
gcloud services enable aiplatform.googleapis.com
gcloud services enable bigquery.googleapis.com
gcloud services enable bigqueryconnection.googleapis.com

摘要

在此步骤中,您已设置项目(如果您还没有项目)、激活 Cloud Shell 并启用所需的 API。

后续步骤

接下来,您将设置 Spanner 实例。

3. 设置 Spanner 实例

创建 Spanner 实例

在此步骤中,您将为此 Codelab 设置一个 Spanner 实例。为此,请打开 Cloud Shell 并运行以下命令:

export SPANNER_INSTANCE=cloudspanner-onlinebanking
gcloud spanner instances create $SPANNER_INSTANCE \
  --config=regional-us-central1 \
  --description="Spanner Online Banking" \
  --nodes=1 \
  --edition=ENTERPRISE \
  --default-backup-schedule-type=NONE

预期输出:

Creating instance...done.

摘要

在此步骤中,您已创建 Spanner 实例。

后续步骤

接下来,您将准备初始应用并创建数据库和架构。

4. 创建数据库和架构

准备初始应用

在此步骤中,您将通过代码创建数据库和架构。

首先,使用 Maven 创建一个名为 onlinebanking 的 Java 应用:

mvn -B archetype:generate \
  -DarchetypeGroupId=org.apache.maven.archetypes \
  -DgroupId=com.google.codelabs \
  -DartifactId=onlinebanking \
  -DjavaCompilerVersion=1.8 \
  -DjunitVersion=4.13.2 \
  -DarchetypeVersion=1.5

签出并复制我们将添加到数据库中的数据文件(如需查看代码库,请点击此处):

git clone https://github.com/GoogleCloudPlatform/cloud-spanner-samples.git
cp -r ./cloud-spanner-samples/banking/data ./onlinebanking

前往应用文件夹:

cd onlinebanking

打开 Maven pom.xml 文件。添加依赖项管理部分,以使用 Maven BOM 管理 Google Cloud 库的版本:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>libraries-bom</artifactId>
      <version>26.56.0</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

编辑器和文件将如下所示:Cloud Shell

确保 dependencies 部分包含应用将使用的库:

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.2</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-nop</artifactId>
    <version>2.0.9</version>
  </dependency>
  <dependency>
    <groupId>com.opencsv</groupId>
    <artifactId>opencsv</artifactId>
    <version>5.10</version>
  </dependency>
  <dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-spanner</artifactId>
  </dependency>
  <dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-bigquery</artifactId>
  </dependency>
  <dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-bigqueryconnection</artifactId>
  </dependency>
</dependencies>

最后,替换 build 插件,以便将应用打包为可运行的 JAR:

<build>
  <plugins>
    <plugin>
      <artifactId>maven-resources-plugin</artifactId>
      <version>3.3.1</version>