使用 Apigee、BigQuery ML 和 Cloud Spanner 构建智能 API 来预测客户购买意愿

Last reviewed 2022-06-29 UTC

本教程介绍如何创建一个 API 来预测客户进行购买的可能性。要创建 API,请使用 Apigee、BigQuery ML 和 Cloud Spanner。

本教程面向 API 开发人员和数据专家,他们希望通过为用户提供更加个性化的体验,通过全渠道和电子商务平台产生更多收入。本文假定您熟悉 BigQuery、Apigee、Google Cloud CLI 和 Apache Maven

您创建的 API 使用在线预测根据您网站上的用户行为采取实时操作。在线预测将机器学习 (ML) 数据分析与商品目录和其他信息相结合,有助于您跨多个渠道为客户提供更好的体验。您创建的 API 的架构如下图所示:

用于预测客户购买意愿的 API 架构。

下图显示了以下架构:

  1. 移动应用向部署在 Apigee 平台上的 API 发送请求。该请求会提取已登录用户的商品推荐数据。
  2. API 代理从 BigQuery 数据集中获取用户 ID 的商品推荐数据。
  3. API 代理发出外呼,以从 Cloud Spanner 实例上的商品主数据库中提取数据。
  4. API 代理聚合来自商品推荐和商品主要数据集的数据。
  5. 向移动应用返回响应。

目标

  • 在 BigQuery 中创建客户购买意愿数据集。
  • 将商品目录数据导入 Cloud Spanner 数据库。
  • 导入和部署 Apigee API 代理。
  • 将 BigQuery 的客户购买意愿数据与 Cloud Spanner 数据库中的商品目录和价格信息集成。
  • 创建商品推荐的聚合视图。

费用

在本文档中,您将使用 Google Cloud 的以下收费组件:

  • BigQuery 和 BigQuery ML 灵活槽
  • Cloud Spanner
  • Apigee

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

准备工作

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. 确保您的 Google Cloud 项目已启用结算功能

  3. 启用 AI Platform Training & Prediction, BigQuery, BigQuery Reservation, BigQuery Storage, Cloud Spanner, Cloud Storage, Cloud Storage API, Dataflow, Google Cloud, Cloud Storage JSON, Service Management, Service Usage API。

    启用 API

  4. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  5. 向您的 Google 账号授予角色。对以下每个 IAM 角色运行以下命令一次:

    • roles/apigee.admin
    • roles/bigquery.user
    • roles/bigquery.dataViewer
    • roles/spanner.admin
    • roles/spanner.databaseAdmin
    • roles/resourcemanager.projectIamAdmin
    • roles/serviceusage.serviceUsageConsumer

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • PROJECT_ID 替换为您的项目 ID。
    • EMAIL_ADDRESS 替换为您的电子邮件地址。
    • ROLE 替换为每个角色。
  6. 如果您还没有 Apigee X 帐号,请设置 Apigee 以预配 Apigee X 实例。预配最多可能需要一个小时。
  7. 配置 Apigee X 组织以允许外部访问

完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理

使用 BigQuery ML 创建电子商务推荐数据集

在本部分中,您将使用 BigQuery ML 中的标准 SQL 查询来创建 ML 模型,使用 BigQuery 中的客户数据对其进行训练,然后进行部署。您无需导出数据或构建模型训练和部署流水线。BigQuery 会自动扩缩来处理所需的任何计算资源。

您在本教程中创建的机器学习模型使用矩阵分解,这是一种根据用户偏好数据创建推荐系统的常见且有效的方法。

在本教程中,您将使用在 BigQuery 上公开托管的 Google Analytics(分析)示例数据集。此数据集提供来自 Google Merchandise Store(销售 Google 品牌商品的真实电子商务商店)的 12 个月(2016 年 8 月至 2017 年 8 月)经过模糊处理的 Analytics 360 数据。

处理示例数据

使用矩阵分解时,可评估显式或隐式用户反馈以确定客户偏好。为了使用显式反馈,数据集必须包含有关用户商品偏好的数据,例如 1 到 5 的星级。如果没有显式反馈可用,则必须使用其他行为指标来推断客户偏好,例如查看用户在商品详情页面上花费的总时间。在本教程中,您将使用会话时长数据来推断客户偏好。

如需训练矩阵分解模型,您需要一个表,其中的列可用于标识客户、所评级商品和隐式评级。在本部分中,您将使用 useriditemIdsession_duration 列创建此类表。session_duration 列包含用户在给定项目的商品页面上的会话时长。

要使用 Analytics(分析)示例数据集中的数据创建表,请执行以下操作:

  1. 在 Google Cloud Marketplace 中,转到 Analytics(分析)示例页面。

    转到 Analytics 示例

  2. 点击查看数据集。BigQuery SQL 工作区页面打开,其中选择了 Analytics(分析)示例数据集。

  3. 浏览器部分中,点击您的项目旁边的 查看操作,然后点击创建数据集

  4. 在出现的创建数据集对话框中,执行以下操作:

    1. 数据集 ID 字段中,输入 bqml
    2. 数据位置列表中,选择 us(美国的多个区域)
    3. 点击创建数据集
  5. 点击转到数据集,然后点击编写新查询

  6. 查询编辑器中,运行以下 SQL 语句以创建包含训练数据的表:

    CREATE OR REPLACE TABLE bqml.aggregate_web_stats AS (
      WITH
        durations AS (
          --calculate pageview durations
          SELECT
            CONCAT(fullVisitorId,'-',
                 CAST(visitNumber AS STRING),'-',
                 CAST(hitNumber AS STRING) ) AS visitorId_session_hit,
            LEAD(time, 1) OVER (
              PARTITION BY CONCAT(fullVisitorId,'-',CAST(visitNumber AS STRING))
              ORDER BY
              time ASC ) - time AS pageview_duration
          FROM
            `bigquery-public-data.google_analytics_sample.ga_sessions_2017*`,
            UNNEST(hits) AS hit
        ),
        prodview_durations AS (
          --filter for product detail pages only
         SELECT
            CONCAT(fullVisitorId,'-',CAST(visitNumber AS STRING)) AS userId,
            productSKU AS itemId,
            IFNULL(dur.pageview_duration,
             1) AS pageview_duration,
          FROM
            `bigquery-public-data.google_analytics_sample.ga_sessions_2017*` t,
            UNNEST(hits) AS hits,
            UNNEST(hits.product) AS hits_product
          JOIN
            durations dur
          ON
            CONCAT(fullVisitorId,'-',
                   CAST(visitNumber AS STRING),'-',
                   CAST(hitNumber AS STRING)) = dur.visitorId_session_hit
          WHERE
          eCommerceAction.action_type = "2"
        ),
        aggregate_web_stats AS(
          --sum pageview durations by userId, itemId
          SELECT
            userId,
            itemId,
            SUM(pageview_duration) AS session_duration
          FROM
            prodview_durations
          GROUP BY
            userId,
            itemId )
        SELECT
        *
       FROM
          aggregate_web_stats
    );
    

    创建 bqml.aggregate_web_stats 表并填充训练数据。

  7. 如需查看数据示例,请在查询编辑器中运行以下 SQL 语句:

    SELECT
    *
    FROM
      bqml.aggregate_web_stats
    LIMIT
      10;
    

在输出显示的表中,每个用户 ID 对应一行,其中包含用户查看的项 ID 及其会话的时长。输出内容类似如下:

userId itemId session_duration
1 6703373209489429228-1 GGOEAXXX0808 19523
2 868731560082458910-1 GGOEAXXX0808 8312
3 4805474958539278422-1 GGOEAXXX0808 62892
4 8353360074725418910-3 GGOEAXXX0808 4883
5 8253742246691621007-2 GGOEAXXX0808 10
6 7211254729136975568-1 GGOEAXXX0808 96090
7 66777488032155805-1 GGOEAXXX0808 3893
8 0804312527321649470-1 GGOEAXXX0808 7539
9 2965429397557124425-1 GGOEAXXX0808 21776
10 8459600677575627508-1 GGOEAXXX0808 6265

购买灵活槽

如果您对 BigQuery 使用按需定价,为了训练矩阵分解模型,您必须购买灵活槽,然后为其创建预留和分配。如果您在 BigQuery 中使用固定价格,则可以跳过本部分,转到创建、训练和部署模型

如需购买灵活槽,您必须拥有一个包含 bigquery.reservations.create 权限的 IAM 角色。此权限授予项目所有者,且包含在 BigQuery Admin (roles/bigquery.admin) 和 BigQuery Resource Admin (roles/bigquery.resourceAdmin) IAM 角色中。

  1. 在 Google Cloud 控制台中,进入 BigQuery 页面:

    进入 BigQuery

  2. 点击容量管理,然后点击预留

  3. 如果系统将您重定向到 BigQuery Reservation API 页面以启用该 API,请点击启用。否则,请继续下一步。

  4. 预留标签页中,点击购买槽

  5. 购买槽页面上,执行以下操作:

    1. 承诺期限列表中,选择灵活
    2. 位置列表中,选择 us(美国的多个区域)
    3. 槽数列表中,选择 500
    4. 点击下一步
    5. 确认购买字段中,输入 CONFIRM,然后点击购买

  6. 点击查看槽承诺

    请等待 20 分钟,让系统完成容量预配。预配容量之后,槽承诺状态列会显示

  7. 点击创建预留,然后设置以下选项:

    1. 预留名称中,输入 model
    2. 位置列表中,选择 us(美国的多个区域)
    3. 槽数中,输入 500
    4. 点击保存。这将返回到预留页面。
  8. model 预留旁边的操作列中,选择创建分配

  9. 选择组织、文件夹或项目中,点击浏览

  10. 输入要在其中完成本教程的项目的名称,或从列表中选择该项目。

  11. 点击选择,然后点击创建

创建、训练和部署模型

如需创建、训练和部署矩阵分解模型,请执行以下操作:

  1. 在 Google Cloud 控制台 BigQuery 页面中,点击 编写新查询
  2. 运行 CREATE MODEL SQL 语句:

    CREATE OR REPLACE MODEL bqml.retail_recommender`
      OPTIONS(model_type='matrix_factorization',
            user_col='userId',
            item_col='itemId',
            rating_col='session_duration',
            feedback_type='implicit'
            )
      AS
      SELECT * FROM bqml.aggregate_web_stats;
    

训练完成后,经过训练的模型将部署为 bqml.retail_recommender 模型。

使用经过训练的模型进行预测

在本部分中,如需使用已部署的 bqml.retail_recommender 模型进行预测,请使用 ML.RECOMMEND SQL 函数。

  1. 在 Google Cloud 控制台 BigQuery 页面中,编写查询并获取代表指定 userId 的前 5 条建议的预测:

    DECLARE MY_USERID STRING DEFAULT "0824461277962362623-1";
    
    SELECT
     *
    FROM
      ML.RECOMMEND(MODEL `bqml.retail_recommender`,
      (SELECT MY_USERID as userID)
                  )
    ORDER BY predicted_session_duration_confidence DESC
    LIMIT 5;
    

    输出会显示预测会话时长置信度(越高越好)、关联的用户 ID 和用户查看的项目 ID 的行。输出内容类似如下:

    predicted_session_duration_confidence userId itemId
    1 29011.10454702254 0824461277962362623-1 GGOEGAAX0574
    2 28212.99840462358 0824461277962362623-1 GGOEGDHQ015399
    3 28126.79442866013 0824461277962362623-1 GGOEGETR014599
    4 27303.60852083874 0824461277962362623-1 GGOEGAAX0338
    5 25692.370609851147 0824461277962362623-1 GGOEGEFR024199
  2. 如需获取所有用户的前 5 项预测,请运行以下 SQL 语句。该语句会生成多行,因此将输出写入表中,然后检索前十条记录,以便您能查看数据示例。

    -- Create output table of top 5 predictions
    CREATE OR REPLACE TABLE bqml.prod_recommendations AS (
    WITH predictions AS (
        SELECT
          userId,
          ARRAY_AGG(STRUCT(itemId,
                           predicted_session_duration_confidence)
                    ORDER BY
                      predicted_session_duration_confidence DESC
                    LIMIT 5) as recommended
        FROM ML.RECOMMEND(MODEL bqml.retail_recommender)
        GROUP BY userId
    )
    SELECT
      userId,
      itemId,
      predicted_session_duration_confidence
    FROM
      predictions p,
      UNNEST(recommended)
    );
    -- Show table
    SELECT
    *
    FROM
      bqml.prod_recommendations
    ORDER BY
      userId
    LIMIT
      10;
    

    输出会显示多个用户 ID、用户查看的内容 ID 以及预测的会话时长置信度。输出类似于以下内容:

    userId itemId predicted_session_duration_confidence
    1 000170187170673177-6 GGOEGDHQ015399 15931.156936770309
    2 000170187170673177-6 GGOEGAAX0574 20178.608474922632
    3 000170187170673177-6 GGOEGAAX0338 20247.337545389437
    4 000170187170673177-6 GGOEGETR014599 15524.355852692066
    5 000170187170673177-6 GGOEGEFR024199 16443.307099088597
    6 000338059556124978-1 GGOEGAAX0338 18143.067737280064
    7 000338059556124978-1 GGOEGAAX0279 16531.718889063464
    8 000338059556124978-1 GGOEGAAX0574 20916.672241880347
    9 000338059556124978-1 GGOEGETR014599 16155.674211782945
    10 000338059556124978-1 GGOEGEFR024199 18417.17554202264

设置 Cloud Spanner 数据

在本教程的以下部分中,您将使用 gcloud CLIMaven。您可以通过 Cloud Shell 运行这两个工具的命令。无需安装,即可使用这些工具。

  1. 在 Cloud Shell 中,克隆商品推荐 GitHut 代码库,其中包含商品推荐 API 代理软件包以及用于在 Cloud Spanner 数据库中设置数据的脚本:

    git clone https://github.com/apigee/devrel/tree/main/references/product-recommendations
    cd product-recommendations-v1
    
  2. 创建 datareader 服务帐号并为其分配 IAM 角色。该服务帐号用于通过 API 代理访问 BigQuery 和 Cloud Spanner 数据库中的数据。

    gcloud iam service-accounts create datareader --display-name="Data reader for BigQuery and Spanner Demo"
    gcloud iam service-accounts list | grep datareader
    gcloud iam service-accounts create datareader --display-name="Data reader for Apigee, BigQuery, and Spanner Demo"
    gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SA" --role="roles/spanner.databaseUser" --quiet
    gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SA" --role="roles/spanner.databaseReader" --quiet
    gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SA" --role="roles/bigquery.dataViewer" --quiet
    gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SA" --role="roles/bigquery.user" --quiet
    
  3. 设置环境变量:

    # For ApigeeX
    export PROJECT_ID=APIGEEX_PROJECT
    export ORG=$PROJECT_ID
    export ENV=eval
    export ENVGROUP_HOSTNAME=API_DOMAIN_NAME
    export SA=datareader@$PROJECT_ID.iam.gserviceaccount.com
    
    # For Cloud Spanner
    export SPANNER_INSTANCE=product-catalog
    export SPANNER_DATABASE=product-catalog-v1
    export REGION=regional-us-east1
    

    替换以下内容:

    • APIGEEX_PROJECT:您的 Apigee X 项目的名称。
    • API_DOMAIN_NAME:在 Apigee X 界面中的“管理员 > 环境 > 群组”页面中配置的主机名。
  4. 在 Google Cloud 控制台 BigQuery 页面中,选择 prod_recommendations 表,然后点击预览标签页以查看结果。

    1. 复制任意 userId 值。
    2. 在 Cloud Shell 中,设置环境变量:

      export CUSTOMER_USERID=USER_ID
      

      USER_ID 替换为上一步中复制的 userId 值。

  5. 在 Cloud Shell 中,显示指定 CUSTOMER_USERID 值的有序商品推荐结果:

    bq query --nouse_legacy_sql \
        "SELECT * FROM \`$PROJECT_ID.bqml.prod_recommendations\` AS A where A.userid = \"$CUSTOMER_USERID\"" \
        ORDER BY A.predicted_session_duration_confidence DESC
    

    输出会显示个人用户 ID、用户查看的项 ID 以及预测的会话时长置信度。输出类似于以下内容:

    +-----------------------+----------------+--------------------------------------------+
    |        userId         |     itemId     |      predicted_session_duration_confidence |
    +-----------------------+----------------+--------------------------------------------+
    | 6929470170340317899-1 | GGOEGAAX0037   |                          40161.10446942589 |
    | 6929470170340317899-1 | GGOEYDHJ056099 |                          27642.28480729123 |
    | 6929470170340317899-1 | GGOEGAAX0351   |                         27204.111219270915 |
    | 6929470170340317899-1 | GGOEGDWC020199 |                         25863.861349754334 |
    | 6929470170340317899-1 | GGOEGAAX0318   |                         24585.509088154067 |
    +-----------------------+----------------+--------------------------------------------+
    

创建 Cloud Spanner 数据库并导入商品目录数据

  1. 在 Cloud Shell 中,在指定区域中创建一个 Cloud Spanner 实例,创建商品目录数据库并导入数据:

    ./setup_spanner.sh
    

    该脚本使用 CUSTOMER_USERID 环境变量,并显示已创建的条目。

    Cloud Spanner 商品目录仅包含在特定用户的 BigQuery 训练步骤中使用的项。因此,如果您在 Cloud Spanner 数据库中创建商品目录数据后更改了 CUSTOMER_USERID 环境变量,则必须重新运行 setup_spanner.sh shell 脚本以重新填充数据。

  2. 验证 Cloud Spanner 数据库中的数据:

    gcloud spanner databases execute-sql $SPANNER_DATABASE --sql='SELECT * FROM products'
    

    输出会显示 Spanner 商品目录中的商品 ID 和描述性信息,包括价格和图片路径。输出类似于以下内容:

    productid       name                description                price  discount  image
    GGOEGAAX0037    Aviator Sunglasses  The ultimate sunglasses    42.42  0         products_Images/sunglasses.jpg
    GGOEGAAX0318    Bamboo glass jar    Bamboo glass jar           19.99  0         products_Images/bamboo-glass-jar.jpg
    GGOEGAAX0351    Loafers             Most comfortable loafers   38.99  0         products_Images/loafers.jpg
    GGOEGDWC020199  Hair dryer          Hottest hair dryer         84.99  0         products_Images/hairdryer.jpg
    GGOEYDHJ056099  Coffee Mug          Best Coffee Mug            4.2    0         products_Images/mug.jpg
    

部署 Apigee 代理

在本部分中,您将运行 Maven 命令以创建以下资源:

  • 名为 product-recommendations-v1 的代理
  • 名为 product-recommendations-v1-$ENV 的 API 商品
  • 名为 demo@any.com 的应用开发者用户
  • 名为 product-recommendations-v1-app-$ENV 的应用

为了创建资源,Maven 使用 GitHub 代码库中的 pom.xml 文件。该文件包含安装说明和步骤。

pom.xml 文件的配置文件部分包含 apigee.orgapigee.envapi.northbound.domaingcp.projectidgoogletoken.emailapi.userid 的值。这些值因项目而异,并且使用命令行设置。以下示例显示了包含值的 pom.xml 文件部分:

<profile>
  <id>eval</id>
  <properties>
    <apigee.profile>eval</apigee.profile>
    <apigee.org>${apigeeOrg}</apigee.org>
    <apigee.env>${apigeeEnv}</apigee.env>
    <api.northbound.domain>${envGroupHostname}</api.northbound.domain>
    <gcp.projectid>${gcpProjectId}</gcp.projectid>
<apigee.googletoken.email>${googleTokenEmail}</apigee.googletoken.email>
    <api.userid>${customerUserId}</api.userid>
  </properties>
</profile>

您之前在设置 Cloud Spanner 数据时设置了这些值。

如需部署代理,请执行以下操作:

  • 在 Cloud Shell 中,安装代理及其关联的工件,然后测试 API:

    mvn -P eval clean install -Dbearer=$(gcloud auth print-access-token) \
        -DapigeeOrg=$ORG \
        -DapigeeEnv=$ENV \
        -DenvGroupHostname=$ENVGROUP_HOSTNAME \
        -DgcpProjectId=$PROJECT_ID \
        -DgoogleTokenEmail=$SA \
        -DcustomerUserId=$CUSTOMER_USERID
    

    输出会显示安装步骤的执行和集成测试 API 调用的结果。其中一个调用 /openapi 端点,另一个调用 /products 端点。测试结果会验证 API 代理是否已安装、已部署且可正常运行。输出还显示应用凭据,可用于后续 API 测试调用。

测试 Recommendations API

  1. 在 Cloud Shell 中,通过向 Apigee API 进行 curl 调用来为应用的 API 密钥设置环境变量:

    APIKEY=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://apigee.googleapis.com/v1/organizations/$ORG/developers/demo@any.com/apps/product-recommendations-v1-app-$ENV \
        | jq -r .credentials[0].consumerKey)
    

    记下 APIKEY 值;如果您稍后选择创建 AppSheet 应用,则需要此信息。

  2. 如需获取在安装 API 代理时指定的 CUSTOMER_USERID 值的结果,请进行测试调用:

    curl -s https://$ENVGROUP_HOSTNAME/v1/recommendations/products \
    -H "x-apikey:$APIKEY" | jq
    

OpenAPI 规范 (OAS) 定义的 API 允许请求指定以下标头:

  • x-apikey:安全方案中的应用使用方密钥。
  • x-userid:发出请求的用户标识符。如果未提供值,则此值默认为代理中配置的 CUSTOMER_USERID 值。
  • cache-control:缓存响应的时间量。此标头可让您将响应缓存 300 秒,或通过指定 no-cache 进行替换。

如需更改 CUSTOMER_USERID 值或控制缓存,您可以设置标头值,如以下示例调用所示:

curl -s "https://$ENVGROUP_HOSTNAME/v1/recommendations/products" \
-H "x-apikey:$APIKEY" \
-H "x-userid:$CUSTOMER_USERID" \
-H "Cache-Control:no-cache" | jq

对示例调用的响应如下所示:

{
  "products": [
    {
      "productid": "GGOEGAAX0037",
      "name": "Aviator Sunglasses",
      "description": "The ultimate sunglasses",
      "price": "42.42",
      "image": "products_Images/sunglasses.jpg"
    },
    {
      "productid": "GGOEYDHJ056099",
      "name": "Coffee Mug",
      "description": "Best Coffee Mug",
      "price": "4.2",
      "image": "products_Images/mug.jpg"
    },
    {
      "productid": "GGOEGAAX0351",
      "name": "Loafers",
      "description": "Most comfortable loafers",
      "price": "38.99",
      "image": "products_Images/loafers.jpg"
    },
    {
      "productid": "GGOEGDWC020199",
      "name": "Hairdryer",
      "description": "Hotest hairdryer",
      "price": "84.99",
      "image": "products_Images/hairdryer.jpg"
    },
    {
      "productid": "GGOEGAAX0318",
      "name": "Bamboo glass jar",
      "description": "Bamboo glass jar",
      "price": "19.99",
      "image": "products_Images/bamboo-glass-jar.jpg"
    }
  ]
}

Apigee 政策

以下部分列出的 Apigee 政策用于本教程的 API 代理软件包。

预流程

SpikeArrest
避免后端 BigQuery 服务遇到流量激增的情况。
配额
根据使用方应用和开发者限制 API 请求。API 商品中配置了限制限制。
ResponseCache - uri
通过缓存来自服务的响应来减少对 BigQuery 数据仓库的请求。

商品流程

AssignMessage - 创建查询请求
使用 SQL 查询设置 HTTP 请求,以从 BigQuery 数据集中提取商品推荐列表。
JavaScript 和 ExtractVariable 政策
设置 BigQuery 服务中的数据格式,并创建更方便用户使用的响应消息。
LookupCache - Cloud Spanner 会话
从 Apigee 缓存中查找 Cloud Spanner 数据库会话 ID。
ServiceCallout - Cloud Spanner 会话
如果 Apigee 缓存没有会话 ID 或 ID 已过期,则向 Cloud Spanner 服务发出请求并创建数据库会话。
PopulateCache - Cloud Spanner 会话
将 Cloud Spanner 会话 ID 填充到 Apigee 缓存。
ServiceCallout - 商品目录查询
从 Cloud Spanner 商品目录数据库中提取商品详情。
JavaScript - 设置商品数据格式
通过设置商品目录数据库中的数据格式,创建符合 OAS 的 API 响应消息。

OpenAPI 流程

AssignMessage - OAS JSON
设置 API 的 OAS JSON 响应。

可选:使用 Apigee 作为数据源创建 AppSheet 应用

要向电子商务网站最终用户和企业用户显示商品推荐,您可以创建一个 AppSheet 应用,如本部分所示。

创建 AppSheet 帐号

使用您的电子邮件地址创建 AppSheet 帐号。

创建数据源

AppSheet 使用 API 代理作为新应用的数据源。要创建数据源,请执行以下操作:

  1. 登录 AppSheet
  2. 我的帐号页面中,点击来源>新数据源
  3. 添加新数据源对话框中,输入代理 product-recommendations-v1 的名称,然后点击 Apigee
  4. 添加 Apigee API 连接信息对话框中,设置以下选项:

    1. 选择手动
    2. Apigee API 密钥字段中,输入用于测试代理的应用的 API 密钥。如果您没有 API 密钥,请运行 echo $APIKEY. 以在 Cloud Shell 中获取该密钥
    3. Apigee API 基本路径字段中,输入以下内容:

      https://ENVGROUP_HOSTNAME/v1/recommendations
      

      ENVGROUP_HOSTNAME 替换为在 Apigee X 界面中为“管理员 > 环境 > 群组”配置的主机名。

    4. API 资源路径字段中,输入路径后缀 products

    5. 点击测试

    6. 测试成功完成后,点击授予访问权限

授予访问权限后,AppSheet 控制台会显示 product-recommendations-v1 的新图块。

创建应用

  1. 转到 AppSheet products-template 应用页面。
  2. 点击复制和自定义。此时将显示克隆您的应用对话框。
  3. 应用名称字段中,输入代理的名称 product-recommendations-v1,然后点击复制应用。稍等片刻,然后应用创建完成。
  4. 欢迎使用您的应用页面中,点击自定义应用。默认情况下,该应用使用 Google 表格中的示例数据源。
  5. 更改数据源以匹配您之前创建的 Apigee 数据源:

    1. 点击 + 新建表,然后点击商品推荐 v1
    2. 选择表格/表对话框中,选择商品
    3. 创建新表对话框中,点击只读,然后点击添加此表

    应用会显示商品 2 标签页和不同的数据视图。新数据项目的每项说明和价格具有不同的值。请注意,项的顺序与预测的顺序不同。

  6. 移除 AppSheet 默认排序,以更改从数据源返回项的顺序:

    1. 在侧边导航菜单中,选择用户体验
    2. 主要视图部分中,选择商品 2
    3. 查看选项部分中的排序依据旁边,删除名称,升序的条目。您会注意到,AppSheet 中显示的顺序与 API 调用的结果相同,并且响应中的最后一项位于底部。
  7. 保存应用。

您可以选择性地删除原始商品表和用户体验,并将“商品 2”表重命名为“商品推荐”。

清理

为避免因本教程中使用的资源导致您的 Google Cloud 帐号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除项目

  1. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

逐个删除资源

为避免重复收费,请删除 BigQuery Flex 槽预留、BigQuery 数据集和 AI Platform 模型。

删除 BigQuery 灵活槽预留

  1. 在 Google Cloud 控制台 BigQuery 页面中,选择容量管理,然后点击预留标签页。
  2. 打开模型条目。
  3. 预留旁边,点击 查看操作,然后点击删除
  4. 模型条目旁边,点击 查看操作,然后点击删除
  5. 在 Cloud Shell 中,删除部署、代理及其关联的工件:

    mvn -P eval process-resources -Dbearer=$(gcloud auth print-access-token) \
        -DapigeeOrg=$ORG -DapigeeEnv=$ENV -Dskip.integration=true \
        apigee-config:apps apigee-config:apiproducts apigee-config:developers -Dapigee.config.options=delete \
        apigee-enterprise:deploy -Dapigee.options=clean
    
  6. 移除 Spanner 资源:

    ./cleanup_spanner.sh
    

删除 BigQuery 数据集

  1. 在 Google Cloud 控制台 BigQuery 页面的资源部分中,展开在其中完成本教程的项目。
  2. 选择 bqml 数据集,然后点击删除数据集
  3. 在出现的叠加窗口中,输入 bqml,然后点击删除

删除 AI Platform 模型

  1. 在 Google Cloud 控制台中,转到 AI Platform 模型页面。

    转到 AI Platform 模型

  2. 在模型列表中,点击 rpm_bqml_model

  3. 模型详情页面上,选中 V_1(默认)版本对应的复选框。

  4. 点击更多,然后点击删除

  5. 版本删除完成后,点击返回返回到模型列表。

  6. 选中 rpm_bqml_model 模型对应的复选框。

  7. 点击更多,然后点击删除

  8. 在 Cloud Shell 中, 删除服务帐号:

    gcloud iam service-accounts delete $SA
    

后续步骤