使用 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. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the 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 APIs.

    Enable the APIs

  4. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  5. Grant roles to your user account. Run the following command once for each of the following IAM roles:

    • 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_IDENTIFIER" --role=ROLE
    • Replace PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual 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. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

逐个删除资源

为避免重复收费,请删除 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
    

后续步骤