基于 Kettle + StarRocks + FineReport 的大数据处理分析方案

news2024/12/23 18:11:15

Kettle + StarRocks + FineReport 的大数据处理分析方案

其中 Kettle 负责数据的ETL处理,StarRocks 负责海量数据的存储及检索,FineReport 负责数据的可视化展示。整体过程如下所示:

在这里插入图片描述
如果多上面三个组件不了解可以先参考下下面的文章:

Kettle 介绍及基本使用

StarRocks 极速全场景 MPP 数据库介绍及使用

FineReport 快速设计联动报表

一、实验数据及数据规划

COVID-19,简称“新冠肺炎”,世界卫生组织命名为“2019冠状病毒病” [1-2] ,是指2019新型冠状病毒感染导致的肺炎。现有美国 2021-01-28 号,各个县county的新冠疫情累计案例信息,包括确诊病例和死亡病例,数据格式如下所示:

date(日期),county(县),state(州),fips(县编码code),cases(累计确诊病例),deaths(累计死亡病例)
2021-01-28,Pike ,Alabama,01109,2704,35
2021-01-28,Randolph,Alabama,01111,1505,37
2021-01-28,Russell,Alabama,01113,3675,16
2021-01-28, Shelby ,Alabama,01117,19878,141
2021-01-28,St. Clair,Alabama,01115,8047,147
2021-01-28, Sumter ,Alabama,01119,925,28
2021-01-28,Talladega,Alabama,01121,6711,114
2021-01-28,Tallapoosa,Alabama,01123,3258,112
2021-01-28, Tuscaloosa ,Alabama,01125,22083,283
2021-01-28,Walker,Alabama,01127,6105,185
2021-01-28, walker,Alabama,01129,1454,27

数据集下载:

https://download.csdn.net/download/qq_43692950/86805389

数据规划 及 表设计

最终呈现希望要根据 分别统计确诊病例和死亡病例的总数、最大值,并以图表的形式展示。

可以考虑使用 StarRocks 聚合模型和明细模型:

-- 县聚合表
DROP TABLE IF EXISTS agg_county;
CREATE TABLE IF NOT EXISTS agg_county (
    county VARCHAR(255) COMMENT "县",
    cases_sum BIGINT SUM DEFAULT "0" COMMENT "确诊总数",
    cases_max BIGINT MAX DEFAULT "0" COMMENT "确诊最大值",
	deaths_sum BIGINT SUM DEFAULT "0" COMMENT "死亡总数",
    deaths_max BIGINT MAX DEFAULT "0" COMMENT "死亡最大值"
)
DISTRIBUTED BY HASH(county) BUCKETS 8;

-- 州聚合表
DROP TABLE IF EXISTS agg_state;
CREATE TABLE IF NOT EXISTS agg_state (
    state VARCHAR(255) COMMENT "州",
    cases_sum BIGINT SUM DEFAULT "0" COMMENT "确诊总数",
    cases_max BIGINT MAX DEFAULT "0" COMMENT "确诊最大值",
	deaths_sum BIGINT SUM DEFAULT "0" COMMENT "死亡总数",
    deaths_max BIGINT MAX DEFAULT "0" COMMENT "死亡最大值"
)
DISTRIBUTED BY HASH(state) BUCKETS 8;

--明细表
DROP TABLE IF EXISTS covid;
CREATE TABLE IF NOT EXISTS covid (
	county VARCHAR(255) COMMENT "县",
    date DATE COMMENT "日期",
    state VARCHAR(255) COMMENT "州",
    fips VARCHAR(255) COMMENT "县编码code",
    cases INT(10) COMMENT "累计确诊病例",
    deaths INT(10) COMMENT "累计死亡病例"
)
DUPLICATE KEY(county)
DISTRIBUTED BY HASH(county) BUCKETS 8;

二、 ETL 处理

2.1 ETL 整体设计:

在这里插入图片描述

2.2 详细处理过程

  1. CSV文件输入

在这里插入图片描述

  1. 字段选择

在这里插入图片描述

  1. 字符串不为空,statecounty 同理:

在这里插入图片描述

  1. 字符串操作

在这里插入图片描述

  1. 排序记录

在这里插入图片描述

  1. 去除重复记录

在这里插入图片描述

  1. 表输出:

在这里插入图片描述

2.3 ETL 处理耗时:

在这里插入图片描述

可以明显看出写入速度非常慢 !

2.4 写入速度非常慢怎么办

StarRocks 不建议小批量的 INSERT 写入数据,对于持续写入可使用 KafkaMySQL 中转,下面以 kafka 为示例:

官方示例:https://docs.starrocks.io/zh-cn/latest/loading/RoutineLoad

先清空数据

truncate table covid;
truncate table agg_state;
truncate table agg_county;

创建 kafka 持续导入任务:

-- covid 数据接入
CREATE ROUTINE LOAD covid_load ON covid
COLUMNS TERMINATED BY ",",
COLUMNS (date,fips,cases,deaths,county,state)
PROPERTIES
(
    "desired_concurrent_number" = "5"
)
FROM KAFKA
(
    "kafka_broker_list" = "192.168.40.1:9092,192.168.40.2:9092,192.168.40.3:9092",
    "kafka_topic" = "starrocks_covid",
    "kafka_partitions" = "0,1,2",
    "property.kafka_default_offsets" = "OFFSET_END"
);

-- agg_state 数据接入
CREATE ROUTINE LOAD agg_state_load ON agg_state
COLUMNS TERMINATED BY ",",
COLUMNS (state,deaths_sum,deaths_max,cases_sum,cases_max)
PROPERTIES
(
    "desired_concurrent_number" = "5"
)
FROM KAFKA
(
    "kafka_broker_list" = "192.168.40.1:9092,192.168.40.2:9092,192.168.40.3:9092",
    "kafka_topic" = "starrocks_agg_state",
    "kafka_partitions" = "0,1,2",
    "property.kafka_default_offsets" = "OFFSET_END"
);

-- agg_county数据接入
CREATE ROUTINE LOAD agg_county_load ON agg_county
COLUMNS TERMINATED BY ",",
COLUMNS (county,deaths_sum,deaths_max,cases_sum,cases_max)
PROPERTIES
(
    "desired_concurrent_number" = "5"
)
FROM KAFKA
(
    "kafka_broker_list" = "192.168.40.1:9092,192.168.40.2:9092,192.168.40.3:9092",
    "kafka_topic" = "starrocks_agg_county",
    "kafka_partitions" = "0,1,2",
    "property.kafka_default_offsets" = "OFFSET_END"
);

ETL 修改:

在这里插入图片描述

主要将表输出换成了 Concat fieldskafka producer

Concat fields

在这里插入图片描述

kafka producer

在这里插入图片描述

再次运行查看 ETL 耗时:

在这里插入图片描述

速度快了近 1000 倍。

三、FineReport 可视化设计

  1. 新建决策报表:
    在这里插入图片描述
    在这里插入图片描述
  2. 拖入图表

在这里插入图片描述

  1. 定义数据库连接
    在这里插入图片描述
    在这里插入图片描述

  2. 定义数据库查询

    在这里插入图片描述
    在这里插入图片描述

    select state,deaths_sum from agg_state ORDER BY deaths_sum DESC limit 10
    

    同理添加:

    州累计确诊Top10:

    select state,cases_sum  from agg_state ORDER BY cases_sum DESC limit 10
    

    各个州确诊最大值Top10:

    select state,cases_max  from agg_state ORDER BY cases_max DESC limit 10
    

    各个州死亡最大值 Top10:

    select state,deaths_max  from agg_state ORDER BY deaths_max DESC limit 10
    
  3. 州累计死亡总数Top10 绑定数据

    在这里插入图片描述

  4. 州累计确诊总数 Top10 绑定数据
    在这里插入图片描述

  5. 同步设置另两个图表

  6. 生成预览链接:
    在这里插入图片描述

  7. 展示效果:
    在这里插入图片描述

四、 需求修改应对方式

假设现在需要统计每个州的平均死亡数,怎么高效率低成本修改?

答案:可以基于明细表,使用异步物化视图,实现预聚合的效果。

官方说明:https://docs.starrocks.io/zh-cn/latest/using_starrocks/Materialized_view

CREATE MATERIALIZED VIEW agg_state_view 
DISTRIBUTED BY HASH(state) BUCKETS 8 AS
SELECT state,sum(deaths) AS deaths_max, COUNT(county) AS num FROM covid GROUP BY state

注意:在 StarRocks 中聚合模型和物化视图都不支持 avg

FineReport 中查询时:

select state, deaths_max/num from agg_state_view

思考:当有了物化视图,再对明细表做相同聚合操作,还会扫描全表吗?

答案:不会了

例如:

EXPLAIN
SELECT state,sum(deaths) AS deaths_max, COUNT(county) AS num FROM covid GROUP BY state

下面可以看到自动转到视图上了:

在这里插入图片描述

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

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

相关文章

【数据分享】1901-2022年1km分辨率的逐月潜在蒸散发栅格数据(免费获取/全国/分省)

气象指标在日常研究中非常常用,之前我们给大家分享过来源于国家青藏高原科学数据中心提供的气象指标栅格数据(均可查看之前的文章获悉详情): 1901-2022年1km分辨率逐月平均气温栅格数据 1901-2022年1km分辨率逐年平均气温栅格数据…

计算机竞赛 题目:基于LSTM的预测算法 - 股票预测 天气预测 房价预测

文章目录 0 简介1 基于 Keras 用 LSTM 网络做时间序列预测2 长短记忆网络3 LSTM 网络结构和原理3.1 LSTM核心思想3.2 遗忘门3.3 输入门3.4 输出门 4 基于LSTM的天气预测4.1 数据集4.2 预测示例 5 基于LSTM的股票价格预测5.1 数据集5.2 实现代码 6 lstm 预测航空旅客数目数据集预…

ctfshow-web5(md5弱比较)

打开题目链接是html和php代码 html没啥有用信息,这里审一下php代码 : 要求使用get方式传入两个参数 v1,v2 ctype_alpha()函数:用于检查给定的字符串是否仅包含字母; is_numeric()函数:检测字符串是否只由…

浏览器唤起钉钉 各项功能

浏览器唤起钉钉对应人员聊天 文档地址 https://open.dingtalk.com/document/client/unified-routing-protocol 唤起聊天 不过只能唤起叮叮的名片 id为叮叮号 <a href"dingtalk://dingtalkclient/action/sendmsg?dingtalk_id{id}"></a>id&#xff1a; …

数据结构与算法(Data Structures and Algorithm)——跟着Mark Allen Weiss用Java语言学习数据结构与算法

前言 数据结构与算法作为计算机科学的基础&#xff0c;是一个重点和难点&#xff0c;在实际编程中似乎看不它们的身影&#xff0c;但是它们有随处不在&#xff0c;如影随形。 虽然实际工作中可能基本用不到数据结构与算法的相关知识&#xff0c;但是作为计算机行业的从业者&a…

C++——多态底层原理

虚函数表 先来看这个问题&#xff1a; class Base { public: virtual void Func1() { cout << "Func1()" << endl; } private: int _b 1; }; sizeof(Base)是多少&#xff1f; 答案是&#xff1a;8 因为Base中除了成员变量_b,还有一个虚函数表_vfp…

报考浙江工商大学2024年工商管理硕士(MBA)联考指南

1. 预报名时间&#xff1a;2023年9月24日-27日每天09&#xff1a;00-22&#xff1a;00 2. 正式报名时间&#xff1a;2023年10月8日-25日每天09&#xff1a;00-22&#xff1a;00 3. 浙江省网上确认&#xff08;现场确认&#xff09;时间&#xff1a;2023年10月31日-11月4日17&…

ThinkPHP团购拼购商城源码/带分销团购商城网站源码/完美版

ThinkPHP团购拼购商城源码&#xff0c;带分销团购商城网站源码&#xff0c;很完美的一套基于ThinkPHP开发的团购分销商城源码&#xff0c;界面也很大气&#xff0c;站长亲测。有需要的可以借鉴一下。 下载地址&#xff1a;https://bbs.csdn.net/topics/613231434

深入解析 const 关键字:指针、参数、返回值和类成员函数

文章目录 const 关键字的理解一、 修饰普通类型的变量二、const 修饰指针变量三、const 作参数传递 和 函数返回值&#xff08;1&#xff09;const 修饰函数参数&#xff08;2&#xff09;const 修饰函数返回值 四、const修饰类成员函数结尾 const 关键字的理解 const 在 C 中…

免杀对抗-宏免杀

CS生成宏&上线 生成宏 1.cs生成宏&#xff0c;如下图操作 2.点击复制宏代码&#xff0c;保存下来 cs上线 注&#xff1a;如下操作使用的是word&#xff0c;同样的操作也适用于Excel 1.新建一个word文档&#xff0c;使用word打开。点击文件—— 2.更多——选项—— 3.自定义…

一文教你如何发挥好 TDengine Grafana 插件作用

作为当前最流行的图形化运维监控解决方案之一&#xff0c;Grafana 提供了一个灵活易用的界面&#xff0c;可以连接多种不同的数据源&#xff0c;包括时序数据库&#xff08;Time Series Database&#xff09;、云服务、监控系统等&#xff0c;然后从这些数据源中提取数据并实时…

从零开始的C++(七)

1.malloc、free和new、delete的区别&#xff1a; 1、.malloc、free是函数&#xff0c;new、delete是运算符。 2、malloc不会调用构造函数&#xff0c;new可以调用构造函数。 3、malloc开辟失败返回NULL&#xff0c;new失败会捕捉异常。 4、malloc不会自动计算类型大小&…

Intewell工业操作系统的来龙去脉

Intewell操作系统是由科东软件自主研发的工业嵌入式实时操作系统&#xff0c;是新一代工业控制系统承上启下的平台&#xff0c;致力于解决工业现场层操作系统的自主可控、安全可信问题&#xff0c;助力企业数字化转型&#xff0c;实现工业互联网的数字化、网络化、智能化发展&a…

Uniapp 新手专用 抖音登录 获取用户头像、名称、openid、unionid、anonymous_openid、session_key

TC-dylogin 一定请选择 源码授权版 教程 第一步 将代码拷贝至您所需要的页面 该代码位置&#xff1a;pages/index.vue 第二步 修改appid和secret 第三步 获取appid和secret 获取appid和secret链接 注意事项 为了安全&#xff0c;我将默认的自己的appid和secret在云函数中删…

Mind Map:大语言模型中的知识图谱提示激发思维图10.1+10.2+10.7

知识图谱提示激发思维图 摘要介绍相关工作方法第一步&#xff1a;证据图挖掘第二步&#xff1a;证据图聚合第三步&#xff1a;LLM Mind Map推理 实验实验设置医学问答长对话问题使用KG的部分知识生成深入分析 总结 摘要 LLM通常在吸收新知识的能力、generation of hallucinati…

深度解析四大主流软件架构模型:单体架构、分布式应用、微服务与Serverless的优缺点及场景应用

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

软件测试/测试开发丨送福利AI大模型应用开发实训营来啦~ 文末领大模型学习资料

点此获取更多相关资料 因为 AIGC 持续火热&#xff0c;越来越多的企业都需要借助大模型来为自己的业务赋能&#xff0c;也就是产出适合自己公司业务情况的智能化产品&#xff0c;这是目前程序员必须要面对的难题和挑战。如果要在企业内部落地相关引用&#xff0c;就需要员工具…

国泰君安期货:基于分布式架构的智能推送系统,满足单日亿级消息处理量

中国期货市场正经历着从量变到质变、加速提档的过程。近五年来&#xff0c;新增期权期货交易品种过百个&#xff0c;国际化品种大幅增加&#xff0c;市场交易规模迅速扩大。2022 年期货行业单边成交量约 70 亿手&#xff0c;为 2018 年的 2.5 倍&#xff0c;占全球总成交量的 8…

想要开发一款游戏, 需要注意什么?

开发一款游戏是一个复杂而令人兴奋的过程。游戏开发是指创建、设计、制作和发布电子游戏的过程。它涵盖了从最初的概念和创意阶段到最终的游戏发布和维护阶段的各个方面。 以下是一些需要注意的关键事项&#xff1a; 游戏概念和目标&#xff1a; 确定游戏开发的核心概念和目标…

Python WebSocket自动化测试:构建高效接口测试框架!

为了更高效地进行WebSocket接口的自动化测试&#xff0c;我们可以搭建一个专门的测试框架。本文将介绍如何使用Python构建一个高效的WebSocket接口测试框架&#xff0c;并重点关注以下四个方面的内容&#xff1a;运行测试文件封装、报告和日志的封装、数据驱动测试以及测试用例…