大数据Flink(一百二十四):案例实践——淘宝母婴数据加速查询

文章目录

案例实践——淘宝母婴数据加速查询

一、​​​​​​​创建数据库表并导入数据

二、​​​​​​​​​​​​​​创建session集群

三、​​​​​​​​​​​​​​源表查询

四、​​​​​​​​​​​​​​指标计算


案例实践——淘宝母婴数据加速查询

随着“全面二孩”政策落地、居民可支配收入稳步增加等因素的刺激,中国的母婴消费市场正迎来黄金时代。与此同时,随着国民消费升级90后宝爸、宝妈人数剧增,消费需求与消费理念都发生了巨大的变化。据罗兰贝格最新公布的报告预计,已经经过了16个年头发展的母婴行业,到2020年,整体规模将达到3.6万亿元,2016-2020年复合增速高达17%,行业前景看起来一片光明。如此大好形势下,母婴人群在母婴消费上有什么特点?消费最高的项目是什么?

本场景将以阿里云实时计算Flink版为基础,使用Flink自带的 MySQL Connector连接RDS云数据库实例,并以一个淘宝母婴订单实时查询的例子尝试上手Connector的数据捕获、数据变更等功能。

本场景中订单和婴儿信息存储在MySQL中,对于订单表,为了方便进行分析,我们让它关联上其对应的婴儿信息,构成一张宽表。另一方面数据经过分组聚合后,计算出订单数量和婴儿出生的关系。

按步骤完成本次实验后,您将掌握的知识有:

  1. 使用Flink实时计算平台创建并提交作业的方法;
  2. 编写基于Flink Table API SQL语句的能力;
  3. 使用MySQL Connector对数据库进行读取的方法;

一、​​​​​​​​​​​​​​创建数据库表并导入数据

在这个例子中,我们将创建三张数据表,其中一张orders_dataset_tmp是导入数据的临时表,其他两张作为源表,体验淘宝母婴订单实时查询。

进入mysql管理平台DMS,单击数据库实例,在已登录实例中找到test数据库,并双击数据库。

在SQLConsole页签中,输入如下SQL建表语句,然后单击执行。

create table orders_dataset_tmp(user_id bigint comment '用户身份信息',			auction_id bigint comment '购买行为编号',		cat_id bigint comment '商品种类序列号',			cat1 bigint comment '商品序列号(根类别)',				property TEXT comment '商品属性',			buy_mount int comment '购买数量',			day TEXT comment '购买时间'				
);create table orders_dataset(order_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY comment '订单id',user_id bigint comment '用户身份信息',			auction_id bigint comment '购买行为编号',		cat_id bigint comment '商品种类序列号',			cat1 bigint comment '商品序列号(根类别)',				property TEXT comment '商品属性',			buy_mount int comment '购买数量',			day TEXT comment '购买时间'				
);--
create table baby_dataset(user_id bigint NOT NULL PRIMARY KEY,	birthday text comment '婴儿生日',gender int comment '0 denotes female, 1 denotes male, 2 denotes unknown'
);

在DMS数据管理平台,选择左侧的常用功能>数据导入。 

配置如下信息后单击提交申请,将 (sample)sam_tianchi_mum_baby_trade_history.csv 导入 orders_dataset_tmp 表。

点击提交申请后,等待审批完成,点击执行变更,返回如下结果,数据导入完成。

 

重复上述步骤,将(sample)sam_tianchi_mum_baby.csv 导入 baby_dataset 表。

导入完成之后,在SQLConsole页签中,输入如下SQL,然后单击执行,将订单数据导入到订单源表orders_dataset 中。

insert into orders_dataset(user_id,auction_id,cat_id,cat1,property,buy_mount,day)
select * from orders_dataset_tmp;

可以看到几张表中都有了数据。

SELECT * FROM `baby_dataset` ;

SELECT * FROM `orders_dataset` ;

查询表数据条数

SELECT count(1) FROM `baby_dataset` ;

二、​​​​​​​​​​​​​​创建session集群

使用之前的flink-sql-test-session集群即可。如若没有,安装下面步骤创建。

  • 登录实时计算控制台。
  • 在Flink全托管页签,单击目标工作空间名称对应应操作列下的控制台。
  • 在左侧导航栏,单击Session集群。
  • 单击创建Session集群。

表格中未提及的参数保持默认值即可,需要配置的参数说明请参见下表。

配置项

说明

配置示例

名称

Session集群名称。

flink-sql-test-session

状态

设置当前集群的期望运行状态:

  • STOPPED:当集群配置完成后保持停止状态,同样会停止所有在运行中的作业。
  • RUNNING:当集群配置完成后保持运行状态。

RUNNING

引擎版本

Session集群引擎版本号。

vvr-6.0.7-flink-1.15

Task Managers数量

默认与并行度保持一致。

4

  • 单击创建Session集群。

当Session集群状态(页面上方集群名称旁边)从启动中变为运行中后,可以进入后续步骤。

三、​​​​​​​​​​​​​​源表查询

  • 进入Flink开发平台,点击作业开发,在demo文件夹下创建monther-baby-test流作业草稿,版本选择vvr-6.0.7-flink-1.15。创建源表,代码如下
CREATE TABLE orders_dataset (order_id BIGINT,`user_id` bigint,			auction_id bigint,		cat_id bigint,			cat1 bigint,				property varchar,			buy_mount int,			`day` varchar	,PRIMARY KEY(order_id) NOT ENFORCED
) WITH ('connector' = 'mysql','hostname' = 'rm-cn-g4t3gzb9789789ca.rwlb.rds.aliyuncs.com','port' = '3306','username' = 'itlanson','password' = 'It123','database-name' = 'test','table-name' = 'orders_dataset'
);
CREATE TABLE baby_dataset (`user_id` bigint,birthday varchar,gender int,PRIMARY KEY(user_id) NOT ENFORCED
) WITH ('connector' = 'mysql','hostname' = 'rm-cn-g4t3gzb9789789ca.rwlb.rds.aliyuncs.com','port' = '3306','username' = 'itlanson','password' = 'It123','database-name' = 'test','table-name' = 'baby_dataset'
);

选中代码,点击左上角运行,完成表的创建。创建完之后,可以在元数据中的vvp.default下看到表。

  • 查询表数据
select * from baby_dataset;

选中代码,点击调试,提交到flink-sql-test-session集群。结果如下

 

select * from orders_dataset;

选中代码,点击调试,查询结果如下

  • 查询数据条数,代码如下
select count(1) from baby_dataset;

选择代码后,点击调试。

可以看到控制台的结果在不断增大,达到500会暂停。这是因为默认查询500条,此时需要点击左侧的绿色箭头,恢复查询。

最后结果如下,可以看到,与mysql中的对应表数据条数相同。

 

此时,在mysql中向baby_dataset表插入一条数据

insert into baby_dataset values (99999999,'20130101',1);

回到flink控制台,可以看到,计数结果也增加了。

点击红色按钮停止查询。然后查询刚才插入的数据。

SELECT * FROM `baby_dataset` 
where user_id=99999999;

此时,在mysql将此条数据的生日进行更改 

UPDATE baby_dataset SET birthday = '20140101' WHERE user_id = 99999999;

执行成功后,观察flink控制台的变化,发现数据也完成了更改。

 

四、​​​​​​​​​​​​​​指标计算

我们希望对原始数据按照 user_id 进行 JOIN,构成一张宽表。查询orders_dataset和baby_dataset表的关联结果,代码如下:

SELECT o.*,b.birthday,b.gender
FROM orders_dataset /*+ OPTIONS('server-id'='123450-123452') */ o
LEFT JOIN baby_dataset /*+ OPTIONS('server-id'='123453-123455') */ as bON o.user_id = b.user_id;

选中代码,点击调试,结果如下

接下来,我们希望对原始数据按照 user_id 进行 JOIN,构成一张宽表。然后对宽表数据的订单时间取到月份进行分组 GROUP BY,并统计每个分组中订单的购买数量SUM和出生婴儿的数量COUNT。代码如下

SELECT SUBSTRING(tmp1.`day` FROM 1 FOR 6) as year_mon,SUM(tmp1.buy_mount) as buy_num,COUNT(birthday) as baby_num
FROM(SELECT o.*,b.birthday,b.genderFROM orders_dataset /*+ OPTIONS('server-id'='123456-123457') */ oLEFT JOIN baby_dataset /*+ OPTIONS('server-id'='123458-123459') */ as bON o.user_id = b.user_id
) tmp1
GROUP BY SUBSTRING(tmp1.`day` FROM 1 FOR 6);

选中代码,点击调试,结果如下


 

  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/54817.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新建flask项目,配置入口文件,启动项目

pycharm新建flask项目时,会提供一个创建flask项目的导向,自动设置虚拟环境,并且安装flask及其依赖而vscode新建flask项目时,需要手动设置虚拟环境并安装flask,需要在终端使用pip install flask命令来安装flask及其依赖…

无人船在海洋勘探领域的应用!

一、具体应用 海底地形测绘: 无人船可以搭载多波束测深仪等先进设备,进行高精度的海底地形测绘。这些设备能够生成详细的海底地形图,为海洋工程设计和施工提供详尽的水下地形资料。 海底资源勘探: 通过搭载磁力仪、重力仪等地…

HTML5实现唐朝服饰网站模板源码

文章目录 1.设计来源1.1 网站首页-界面效果1.2 唐装演变-界面效果1.3 唐装配色-界面效果1.4 唐装花纹-界面效果1.5 唐装文化-界面效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcL…

UE虚幻引擎云渲染汽车动画的优势!

在汽车广告和动画制作领域,虚幻引擎(UE)结合云渲染技术正掀起一场技术革命。这项技术以其高性能、成本效益和灵活性,为创作者提供了强大的工具,以实现更加逼真和高效的汽车动画制作。 一、为什么选择UE虚幻引擎制作汽车…

2024年厦门市大数据创新应用大赛圆满收官

2024年厦门市大数据创新应用大赛圆满收官 2024年9月19日-20日,由厦门市数据管理局、厦门市公安局、厦门市生态环境局联合主办,厦门市信息中心承办的2024年厦门市大数据创新应用大赛圆满收官。 经专家评审团评审 最终决出获奖名单 决赛评审会现场 2024年…

PMI-ACP®认证考试内容将于2025年第一期考试更新

PMI敏捷管理专业人士(PMI-ACP)认证即将在2025年迎来引入中国大陆的十周年纪念。 十年时间,我们见证了敏捷实践方法普及和敏捷项目管理的“知行合一”,采用敏捷方法的中国企业团队比例的快速持续增长,中国PMI-ACP专业人…

HarmonyOS 自定义 loading 效果

大致思路 主要利用 Progress 组件 利用aboutToAppear周期函数:在创建自定义组件的新实例后,在执行其build()函数之前执行 利用aboutToDisappear函数在自定义组件析构销毁之前执行,这里主要用来清除定时器 实现效果 组件封装 components/H…

【pytorch】pytorch入门4:神经网络的卷积层

文章目录 前言一、定义概念 缩写二、性质三、代码总结参考文献 前言 使用 B站小土堆课程的笔记 一、定义概念 缩写 卷积层是神经网络中用于突出特征来进行分类任务的层。 二、性质 卷积核例子:vgg16 model 三、代码 添加库 python代码块import os import …

机器人顶刊IEEE T-RO发布无人机动态环境高效表征成果:基于粒子的动态环境连续占有地图

摘要:本研究有效提高了动态环境中障碍物建模的精度和效率。NOKOV度量动作捕捉系统助力评估动态占用地图在速度估计方面的性能。 近日,上海交通大学、荷兰代尔夫特理工研究团队在机器人顶刊IEEE T-RO上发表题为Continuous Occupancy Mapping in Dynamic …

『功能项目』鼠标悬停物品显示信息【77】

本章项目成果展示 我们打开上一篇763D模型动态UI显示的项目, 本章要做的事情是鼠标悬停在道具身上显示对应信息 首先制作一个武器Image信息面板 重命名为WeaponUI01 设为隐藏 修改脚本:RightClickItem.cs 查看挂载脚本: 运行项目 - 当鼠标悬…

个性化大语言模型:PPlug——让AI更懂你

在当今数字化转型的时代,大型语言模型(LLMs)已经成为了不可或缺的工具,它们在自然语言理解、生成和推理方面展现了非凡的能力。然而,这些模型普遍采用的是“一刀切”的方式,即对于相同的输入给予所有用户相…

HDFS分布式文件系统01-HDFS架构与SHELL操作

HDFS分布式文件系统 学习目标第一课时知识点1-文件系统的分类单机文件系统网络文件系统分布式文件系统 知识点2-HDFS架构知识点3-HDFS的特点知识点4-HDFS的文件读写流程知识点5-HDFS的健壮性 第二课时知识点1-HDFS的Shell介绍HDFS Shell的语法格式如下。HDFS Shell客户端命令中…

windows电脑C盘内存爆满怎么办?

目录 1. 下载SpaceSniffer2. 运行程序,扫描C盘3. 寻找可删除的文件 为了节省C盘的内存,将大部分的软件尽量都安装在C盘以外的磁盘中,但是在电脑的使用过程中还是会发现C盘越来越少,这是因为很多软件会默认将数据文件夹&#xff08…

【算法】DFS 系列之 穷举/暴搜/深搜/回溯/剪枝(上篇)

【ps】本篇有 9 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1)全排列 .1- 题目解析 .2- 代码编写 2)子集 .1- 题目解析 .2- 代码编写 3)找出所有子集的异或总和再求和 .1- 题目解析 .2- 代码编写 4)全排列 II…

​​三SSH

ssh密钥对登录原理 :首先,客户端事先生成一对密钥,并将公钥保存在服务器上的授权文件中。接下来,客户端不用密码,而是用密钥对来验证身份。客户端用服务器的公钥来加密自己的公钥,然后把加密后的信息发送给…

数字化转型:开启未来发展新引擎

在当今飞速发展的时代,数字化转型已成为企业、组织乃至整个社会发展的关键趋势。 信息技术的迅猛发展,如互联网、大数据、人工智能等,为数字化转型提供了强大支撑。市场竞争的加剧,也促使企业不断寻求提升竞争力的方法&#xff0c…

利用git将项目上传到github

采用git而不是在pycharm中共享的原因:可能会出现上图报错 目录 1、创建github仓库2、在 git bash 中初始化Git仓库,添加文件,上传代码 1、创建github仓库 2、在 git bash 中初始化Git仓库,添加文件,上传代码

[Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

LabVIEW提高开发效率技巧----利用第三方库和工具

LabVIEW开发不仅依赖于自身强大的图形化编程能力,还得益于其庞大的用户社区和丰富的第三方库。这些工具和库能够帮助开发者快速解决问题,提升开发效率,避免从头开始编写代码。 1. LabVIEW工具网络(NI Tools Network) …

DVWA-File Inclusion(文件包含)渗透测试

概念: 漏洞产生原因: 主要是由于开发人员没有对用户输入的文件路径进行严格的过滤和验证。例如,如果一个 Web 应用程序接受用户输入的文件路径,然后使用这个路径进行文件包含,而没有对用户输入进行任何检查&#xff0c…