全部产品
阿里云办公

商品排行榜案例

更新时间:2018-01-18 16:39:07

随着新零售的概念崛起,越来越多的电商商家对实时的数据越来越关注,而交易量和商品的排行榜这两个指标尤为重要。但是怎么在流式的数据里做商品的TOP排行呢?既需要保证数据的正确性、又要保证数据的实效性。阿里云流计算StreamSQL团队对这一难题做出了攻克,用时间窗口的概念把流式的数据放入固定的窗口里去做排序,以下案例就是对TOP的完美诠释。

准备工作

订单源表为简化问题,我们将源源不断的交易数据抽象简化为如下二维表:datahub_in

字段名 类型 注释
commodity varchar 商品
gmtdate varchar 交易时间

top的结果表

rds_out

字段名 类型 注释
Ranking bigint 排行
gmtdate varchar 交易时间
commodity varchar 商品
number bigint 统计数量

创建源表和结果表

  1. 登录datahub创建项目

datahub创建项目

创建的schema示意图如下:

DATAHUB注册

  1. 创建RDS结果表

4

EE

  • 登录数据库RDS第三部
  • 创建的schema示意图如下:RDS第四部

3.上传DataHub数据

所谓”巧妇难为无米之炊”,在实际的流计算业务开发中,开发者第一个面临的问题就在于如何将数据上传进入DataHub系统。利用DataHub的数据上传功能用户可以轻松上传数据。进入[DataHub界面)],选择上述创建完成的DataHub Topic进行数据上传,用户点击侧边导航栏的”数据采集” -> “文件上传”功能。这里为了简化用户的操作,我们提供DATAHUB上传数据,点击下载后利用DataHub的文件上传工具即可完成数据采集。

注: PDF版本文档中《商品排行榜案例》无法通过链接下载,流计算作为附件文件打包提供了测试数据,请咨询您的系统管理员索要测试数据。

上传数据

实际生产应用中,我们很少有机会利用文件上传工具进行数据采集工作。更多数据采集工具的使用请参考使用手册中有关数据采集的章节。

开发

一旦完成数据采集工作,我们就可以专心来研究StreamSQL的编写工作。同样,为方便新手用户上手流计算,我们在【开发作业】新手作业中提供了商品排行榜的教学作业: sp_top。点击这个作业,可以查看StreamSQL情况。

1.首先创建一个作业。作业创建

2.已DATAHUB为数据的源表,使用数据存储可以自动生成DATAHUB的参数和你的schema信息,DATAHUB的参数的配置可以参阅DATAHUB的源表

1122

3322

34

3.用RDS为数据的结果表,手动填写RDS的参数和你的schema信息,RDS的参数的配置可以参阅RDS的结果表

RDS1

RDS2

4.编写业务逻辑的SQL。

  1. INSERT INTO result_table
  2. SELECT
  3. Ranking,
  4. gmtdate,
  5. commodity,
  6. number
  7. FROM (
  8. SELECT *,
  9. ROW_NUMBER() OVER (PARTITION BY gmtdate ORDER BY number desc) AS Ranking
  10. FROM (
  11. SELECT
  12. gmtdate AS gmtdate,--可以根据真实时间来去相应的数值,这里取得是测试数据
  13. COUNT(commodity) AS number,
  14. commodity
  15. FROM source_table
  16. GROUP BY gmtdate,commodity
  17. )a
  18. )
  19. WHERE Ranking <= 2 --可以根据真实top值来去相应的数值,这里取得是测试数据

5.调试StreamSQL。我们提供商品排行榜案例调试数据DATAHUB上传数据,下载后使用调试功能上传该测试数据进行数据调试,因为DATAHUB支持的是Unix时间戳所以我们提供了两份数据。如下图:

222226.作业上线。调试完成后,经验证逻辑无误后,在数据开发中点击”上线作业”,用户即可完成作业上线工作。上线作业操作将当前用户的改动提交到数据运维中,用户即可在生产环境下进行作业启动等生产运维工作。如下图:

33333

运维

在数据运维页面,选中上述”sp_top”这样的作业,点击启动后流式作业即可启动。注意,流计算作业启动时候需要你指定启动时间,实际上就是从源头数据存储的指定时间点开始读取数据。这里我们需要指定的时间需要在上述上传之间,例如设置启动时间为一个小时之前,如下图:

11

  • 选择启动位点,由于我们刚传入数据我可以把启动时间设置的往前一点。12

  • 作业运行中。13

运行起来后,我们到RDS数据库去查看最终数据输出,和最终流式计算结果一致。这样从端到端验证了我们业务代码的正确性。RDS数据查看如下图:

14