1. 简介
欢迎来到 Petverse 的后端,这是一款多人在线游戏,玩家可以在其中创建动物头像、探索世界并交易游戏代币。
最近,游戏经济面临威胁。大量资金正从富有的狗狗玩家的账户中流失,全部转换为优质金枪鱼库存。我们怀疑有一群“罗宾汉猫”,它们从富有的猎犬那里偷东西来喂养猫群。
在此 Codelab 中,您将构建一个实时欺诈防御盾,以捕获主谋及其自动化机器人团伙。您将体验 Spanner 中的运营数据如何与 BigQuery 中的分析数据融合,从而通过图表 (GQL) 和关系型查询检测和调查复杂的欺诈模式。
您将执行的操作
- 使用 BigQuery 持续查询检测实时数据流中的异常,并将其推送到 Spanner。
- 使用 Spanner Graph 追踪财务关系,调查欺诈团伙。
- 使用 Spanner 向量搜索查找相似的个人资料描述,从而识别机器人账号。
- 使用 BigQuery 图分析海量通信日志,揭示协调阴谋。
所需条件
- 启用了结算功能的 Google Cloud 项目。
- 具备 SQL、终端命令和 Python 的基础知识。
- 您可能需要 GitHub 账号(代码托管在 GitHub 上)。
受众群体:中级开发者、数据工程师和架构师。
预计总时长:45 至 60 分钟。
费用估算:本 Codelab 中创建的资源产生的费用应低于 5 美元。
2. 准备工作 / 设置
创建或选择 Google Cloud 项目
您需要一个启用了结算功能的 Google Cloud 项目,才能使用本实验所需的服务。
- 在 Google Cloud 控制台的项目选择器页面上,选择或创建一个 Google Cloud 项目。
- 确保您的 Cloud 项目已启用结算功能。了解如何验证是否已启用结算功能。
- 在 Cloud 控制台首页中找到您的项目 ID

启动 Cloud Shell
您将使用 Google Cloud Shell 作为执行环境。Cloud Shell 预安装了 gcloud、git 和其他所需工具。
- 前往 Google Cloud Shell。
- 如果出现提示,请点击授权。
- 在 Cloud Shell 终端中设置环境变量,确保您正在自己的项目中操作:
export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project $PROJECT_ID

启用必要的 API
运行以下命令,为 Spanner、BigQuery 和 Vertex AI 启用 API:
gcloud services enable spanner.googleapis.com \
bigquery.googleapis.com \
aiplatform.googleapis.com \
run.googleapis.com \
bigqueryreservation.googleapis.com
创建 BigQuery 预留和分配
如需运行 GQL 查询,您必须拥有使用企业版或企业 Plus 版的预留,并在 Cloud Shell 中创建具有自动扩缩功能的企业版预留:
# 1. Create a BigQuery Enterprise reservation with 0 baseline slots and 100 max autoscaling slots
bq mk --reservation \
--project_id=${GCP_PROJECT} \
--location=US \
--edition=ENTERPRISE \
--slots=0 \
--autoscale_max_slots=100 \
--ignore_idle_slots=true \
spanner-bigquery-reservation
# 2. Assign your Cloud project to the newly created reservation for query execution
bq mk --reservation_assignment \
--project_id=${GCP_PROJECT} \
--location=US \
--reservation_id=spanner-bigquery-reservation \
--job_type=QUERY \
--assignee_type=PROJECT \
--assignee_id=${GCP_PROJECT}
克隆代码库
克隆包含应用代码和示例架构的代码库:
git clone https://github.com/GoogleCloudPlatform/cloud-spanner-samples.git
cd cloud-spanner-samples/spanner-bq-fraud-defense
3. 预配基础设施
您现在将在 BigQuery 中设置数据仓库,并在 Spanner 中设置运营数据库。
设置 BigQuery 数据集和连接
BigQuery 将分析游戏中的遥测数据流。
在 Google Cloud Shell 的控制台中,继续运行以下命令,确保项目 ID 仍处于设置状态:
export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project $PROJECT_ID
- 创建
game_analyticsBigQuery 数据集:
bq mk -d --location=US game_analytics
- 创建连接以连接到存储分区和(可选)Spanner:
bq mk --connection --location=US --project_id=$PROJECT_ID \
--connection_type=CLOUD_RESOURCE unicorn-connection
- 使用架构文件为
GameplayTelemetry、AccountSignals、Players和ChatLogs表创建架构:
bq query --use_legacy_sql=false < bq_schema.sql
设置 Spanner
Google Cloud Spanner 将处理运营实时交易。在本实验中,我们将使用经济实惠的 100 个处理单元 (PU) 实例。
- 创建 Spanner 实例:
gcloud spanner instances create game-instance \
--config=regional-us-central1 \
--description="Game Instance" \
--processing-units=100 \
--edition=ENTERPRISE
- 创建 Spanner 数据库
game-db:
gcloud spanner databases create game-db --instance=game-instance
- 使用应用表(
Players、Transactions、AccountSignals)和属性图(PlayerNetwork)更新 Spanner 架构:
gcloud spanner databases ddl update game-db --instance=game-instance --ddl-file=spanner_schema.sql
- 为多模态向量搜索创建
AvatarSearchIndex:
gcloud spanner databases ddl update game-db --instance=game-instance \
--ddl="CREATE SEARCH INDEX AvatarSearchIndex ON Players(AvatarDescriptionTokens)"
将数据导入 BigQuery
- 将演示数据导入 BigQuery:
bq load --source_format=AVRO game_analytics.GameplayTelemetry gs://sample-data-and-media/spanner-bq-fraud-heist/GameplayTelemetry
bq load --source_format=AVRO game_analytics.AccountSignals gs://sample-data-and-media/spanner-bq-fraud-heist/AccountSignals
bq load --source_format=AVRO game_analytics.Players gs://sample-data-and-media/spanner-bq-fraud-heist/Players
bq