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

2023-10-11 19:15

本文主要是介绍基于 Kettle + StarRocks + FineReport 的大数据处理分析方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

在这里插入图片描述

这篇关于基于 Kettle + StarRocks + FineReport 的大数据处理分析方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/190248

相关文章

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs