大数据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.xdnf.cn/news/150090.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【信息论基础第三讲】再谈离散信源的信息测度之熵的性质多符号信源的信息测度

一、Piece Of Cake 1、离散信源X的熵是H(X)是一个常数而不是一个变量 解释:离散信源的熵也就是自信息I(X)的数学期望,即H(X) E[I(Xi)],而通过概率论的知识我们知道数学期望是一个常数,故熵也是一个常数。 2、八元编码系统&…

9.24工作笔记

filter_list的用法 在before_filter函数中用到,过滤了filter因子排名前80%的数据 保温杯4 采用纯多和中性轮动的策略 dpo DPO(区间震荡线)计算公式 公式: [ \text{DPO} \text{CLOSE} - \text{REF}(\text{MA}(\text{CLOSE},…

基于大数据爬虫+数据可视化大屏+Python的广东省人口流动数据分析设计和实现(源码+论文+部署文档等)

博主介绍:✌全网粉丝50W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HLM…

LCD1602

LCD1602 是一种工业字符型液晶显示屏,能够同时显示 16x2 即 32 个字符。 LCD的显示控制 通过向 LCD1602 发送指令和数据来控制其显示内容。指令包括清屏、设置光标位置、显示模式等;数据则是要显示的字符的 ASCII 码。LCD1602 内部有一个控制器&#x…

中兴数通产品厉害了,获得CC EAL3+认证!

不知道朋友们最近听说没有,中兴的数通产品是真争气,有25款成功通过了国际信息技术安全评估通用准则CC的EAL 3级别认证。中兴一直是通讯行业的领先企业,这次CC EAL 3级别认证覆盖了多款主流设备型号,证明了它在网络安全领域的实力确…

使用 Loki、Loki4j、Grafana 和 Spring Boot 搭建一个轻量级、简单、易用的 Java 日志系统

要使用 Loki、Loki4j、Grafana 和 Spring Boot 搭建一个轻量级、简单、易用的 Java 日志系统,您可以按以下步骤进行。这个系统将利用 Loki 作为日志存储和聚合系统,Loki4j 作为 Java 的日志插件,Grafana 用于日志的可视化。 1.工具介绍&…

CF1994 F. Stardew Valley [欧拉回路+树上差分]

传送门 [前题提要]:自模板题以后,很少遇到欧拉回路的题目,正好这道题结合了多种经典算法,故写一篇题解记录一下 读完题面,因为需要经过所有1边,所以很显然会想到应该将所有的1边拿出来建一个新图,然后在新图上添加0边,使得新图是一个欧拉图. 让我们来回忆一下什么是欧拉图.对…

【秋招笔试题】多多的平均值

解法:抽掉的两个数字之和为2倍的平均数,那么判断一下2倍的平均数是不是整数。然后在搞一个哈希表存取过的值即可。 package com.sky;import java.util.*;public class Test1 {public static void main(String[] args) {Scanner scanner new Scanner(Sy…

计算机研一规划2024/9/22

系列文章目录 文章目录 系列文章目录前言一、两条腿走路二、编程语言能力提升1.廖雪峰的python课2.Leetcode(数据结构题) 三、机器学习能力提升1.统计学习方法 李航2.kaggle竞赛 四、神经网络能力提升1.神经网络与深度学习 邱锡鹏2.一套自己的万金油模板…

openai最新o1上线(2024年09月12日)

gpt-4o-2024-08-06输出文本价格 10美元/M o1-preview输出价格 60美元/M https://lmarena.ai/?leaderboard 数字9.11和9.8谁大些 人工智能学习网站 https://chat.xutongbao.top/

Vue(16)——Vue3.3新特性

defineOptions 在 Vue 3.3 之前&#xff0c;如果需要在 <script setup> 中设置组件名&#xff0c;通常需要在额外的 <script> 标签中使用 Options API 进行配置。defineOptions 是 Vue 3.3 版本中引入的一个宏&#xff08;macro&#xff09;&#xff0c;它主要用于…

C++ bitset(位图)的介绍和使用

文章目录 一、bitset的介绍1. 位图的引入2. 位图的概念3. 位图的应用场景 二、bitset的使用1. 定义方式2. 成员函数3. 运算符重载 一、bitset的介绍 1. 位图的引入 面试题 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是…

2024年蓝牙网关市场热门产品选购宝典

在本文中&#xff0c;我们将探讨不同类型的蓝牙网关及其分类&#xff0c;并提供一份指南&#xff0c;帮助您筛选出最适合的物联网网关。 室内蓝牙网关 室内网关通常用于智能建筑解决方案&#xff0c;如智能家居、零售店、购物中心和办公室。 这些网关的覆盖范围较短&#xff…

人工智能代表——无人驾驶:萝卜快跑

人工智能如何改变我们的出行&#xff1a;以“萝卜快跑”无人驾驶为例 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的方式渗透并改变着我们的日常生活&#xff0c;其中出行方式的变革尤为显著。在众多AI驱动的出行创新中&#xff0c;“萝卜…

【hot100-java】【缺失的第一个正数】

R9-普通数组篇 class Solution {public int firstMissingPositive(int[] nums) {int nnums.length;for (int i0;i<n;i){while(nums[i]>0&&nums[i]<n&&nums[nums[i]-1]!nums[i]){//交换nums[i]和nums[nums[i]-1]int temp nums[nums[i]-1];nums[nums[i]…

C语言课程设计题目(24个选题)

C语言课程设计题目 一、设计要求与设计报告二、检查要求三、打分标准四、提交时间五、选题要求题目列表题目一&#xff1a;职工信息管理系统设计题目二&#xff1a;图书信息管理系统设计题目三&#xff1a;图书管理系统设计题目四&#xff1a;实验设备管理系统设计题目五&#…

回答网友的一个SQL问题

网友问&#xff1a; CODE NAME 1 A 1 B 如何得到下面的值&#xff0c;该如何写SQL CODE NAME 1 AB 1 AB 俺的回答&#xff1a; declare t table(code varchar(50),name varchar(50)) insert into t(code,name) select 1,A union select…

python脚本程序怎么写更优雅?argparse模块巧妙应用

前言 命令行程序&#xff0c;也称CLI程序&#xff0c;另一个直观的名字是脚本程序&#xff0c;简称脚本&#xff0c;由于没有图形用户界面&#xff08;GUI&#xff09;&#xff0c;所以脚本程序常见的交互方式有3种&#xff1a; 1、脚本程序中读取环境变量&#xff0c;比如env…

Spring Security学习

系列文章目录 第一章 基础知识、数据类型学习 第二章 万年历项目 第三章 代码逻辑训练习题 第四章 方法、数组学习 第五章 图书管理系统项目 第六章 面向对象编程&#xff1a;封装、继承、多态学习 第七章 封装继承多态习题 第八章 常用类、包装类、异常处理机制学习 第九章 集…

【深度学习】深度卷积神经网络(AlexNet)

在 LeNet 提出后&#xff0c;卷积神经网络在计算机视觉和机器学习领域中很有名气&#xff0c;但并未起到主导作用。 这是因为 LeNet 在更大、更真实的数据集上训练的性能和可行性还有待研究。 事实上&#xff0c;在 20 世纪 90 年代到 2012 年之间的大部分时间里&#xff0c;…