Spanner 和 BigQuery:实时欺诈防御盾

1. 简介

欢迎来到 Petverse 的后端,这是一款多人在线游戏,玩家可以在其中创建动物头像、探索世界并交易游戏代币。

最近,游戏经济面临威胁。大量资金正从富有的狗狗玩家的账户中流失,全部转换为优质金枪鱼库存。我们怀疑有一群“罗宾汉猫”,它们从富有的猎犬那里偷东西来喂养猫群。

在此 Codelab 中,您将构建一个实时欺诈防御盾,以捕获主谋及其自动化机器人团伙。您将体验 Spanner 中的运营数据如何与 BigQuery 中的分析数据融合,从而通过图表 (GQL) 和关系型查询检测和调查复杂的欺诈模式。

您将执行的操作

所需条件

  • 启用了结算功能的 Google Cloud 项目。
  • 具备 SQL、终端命令和 Python 的基础知识。
  • 您可能需要 GitHub 账号(代码托管在 GitHub 上)。

受众群体:中级开发者、数据工程师和架构师。

预计总时长:45 至 60 分钟。

费用估算:本 Codelab 中创建的资源产生的费用应低于 5 美元。

2. 准备工作 / 设置

创建或选择 Google Cloud 项目

您需要一个启用了结算功能的 Google Cloud 项目,才能使用本实验所需的服务。

  1. Google Cloud 控制台的项目选择器页面上,选择或创建一个 Google Cloud 项目。
  2. 确保您的 Cloud 项目已启用结算功能。了解如何验证是否已启用结算功能
  3. Cloud 控制台首页中找到您的项目 ID

Cloud 控制台首页

启动 Cloud Shell

您将使用 Google Cloud Shell 作为执行环境。Cloud Shell 预安装了 gcloudgit 和其他所需工具。

  1. 前往 Google Cloud Shell
  2. 如果出现提示,请点击授权
  3. 在 Cloud Shell 终端中设置环境变量,确保您正在自己的项目中操作:
export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project $PROJECT_ID

Cloud Shell:使用 gcloud config 设置项目

启用必要的 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
  1. 创建 game_analytics BigQuery 数据集:
bq mk -d --location=US game_analytics
  1. 创建连接以连接到存储分区和(可选)Spanner:
bq mk --connection --location=US --project_id=$PROJECT_ID \
    --connection_type=CLOUD_RESOURCE unicorn-connection
  1. 使用架构文件为 GameplayTelemetryAccountSignalsPlayersChatLogs 表创建架构:
bq query --use_legacy_sql=false < bq_schema.sql

设置 Spanner

Google Cloud Spanner 将处理运营实时交易。在本实验中,我们将使用经济实惠的 100 个处理单元 (PU) 实例。

  1. 创建 Spanner 实例:
gcloud spanner instances create game-instance \
    --config=regional-us-central1 \
    --description="Game Instance" \
    --processing-units=100 \
    --edition=ENTERPRISE
  1. 创建 Spanner 数据库 game-db
gcloud spanner databases create game-db --instance=game-instance
  1. 使用应用表(PlayersTransactionsAccountSignals)和属性图(PlayerNetwork)更新 Spanner 架构:
gcloud spanner databases ddl update game-db --instance=game-instance --ddl-file=spanner_schema.sql
  1. 为多模态向量搜索创建 AvatarSearchIndex
gcloud spanner databases ddl update game-db --instance=game-instance \
    --ddl="CREATE SEARCH INDEX AvatarSearchIndex ON Players(AvatarDescriptionTokens)"

将数据导入 BigQuery

  1. 将演示数据导入 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