Flink-StarRocks详解:第六部分-即席查询大案例解析(第56天)

news2024/9/28 19:24:37

系列文章目录

  1. 数仓场景:即席查询案例
    6.1 场景介绍
    6.2 方案架构
    6.3 方案特点
    6.4 操作流程
    6.4.1 步骤一:创建MySQL源数据表
    6.4.2 步骤二:创建StarRocks表
    6.4.3 步骤三:执行Flink任务,启动数据流
    6.4.4 步骤四:验证数据

文章目录

  • 系列文章目录
  • 前言
  • 6. 数仓场景:即席查询案例
    • 6.1 场景介绍
    • 6.2 方案架构
    • 6.3 方案特点
  • 6.4 操作流程
      • 6.4.1 步骤一:创建MySQL源数据表
      • 6.4.2 步骤二:创建StarRocks表
      • 6.4.3 步骤三:执行Flink任务,启动数据流
      • 6.4.4 步骤四:验证数据


前言

本文为Flink-StarRocks详解后续章节:主要详解StarRocks数仓场景:即席查询大案例

6. 数仓场景:即席查询案例

本文通过示例介绍如何基于EMR Serverless StarRocks的视图能力构建数仓场景-即席查询解决方案。

6.1 场景介绍

随着向量化、CBO(Cost Based Optimizer,基于代价的优化器)、单机多核调度等技术的应用,StarRocks的计算能力逐步提升。很多时候在使用StarRocks进行数仓分层建模时,大部分将数据建模到DWD层(基础整合层)或DWS层(维度宽度)。在实际业务中,运用StarRocks的计算能力,可以直接查询DWD或DWS层数据,还可以灵活地交互式即席查询。

6.2 方案架构

使用StarRocks实现数仓场景即席查询的基本架构如下图所示。
在这里插入图片描述

整体数据流如下:
(1)Flink清洗导入Kafka的日志或者通过Flink-CDC-StarRocks工具读取MySQL Binlog导入StarRocks。根据需要选用明细、聚合、更新或主键各种模型,只物理落地ODS层(格式整理层)。
(2)向上采用StarRocks View视图能力,利用StarRocks向量化极速查询和CBO优化器满足多表关联、嵌套子查询等复杂SQL,查询时现场计算指标结果,保证指标上卷和下钻高度同源一致。

6.3 方案特点

该方案主要特点是,计算逻辑在StarRocks侧(现场查询),适用于业务库高频数据更新的场景,实体数据只在ODS或DWD层存储。
 方案优势
 灵活性强,可随时根据业务逻辑调整View。
 指标修正简单,上层都是View逻辑封装,只需要更新底表数据。
 方案缺点
当View的逻辑较为复杂,数据量较多时,查询性能较低。
 适用场景
 数据来源于数据库和埋点系统,适合对QPS要求不高,对灵活性要求比较高,且计算资源较为充足的场景。
 实时要求非常高,要求写入即可查,更新即反馈。适合有即席查询需求,且资源较为充足,查询复杂度较低的场景。

6.4 操作流程

6.4.1 步骤一:创建MySQL源数据表

(1)登录DMS
(2)创建库和表

CREATE DATABASE IF NOT EXISTS flink_cdc;
create table flink_cdc.orders (
   order_id INT NOT NULL AUTO_INCREMENT,
   order_revenue FLOAT NOT NULL,
   order_region VARCHAR(40) NOT NULL,
   customer_id INT NOT NULL,
   PRIMARY KEY ( order_id )
);
create table flink_cdc.customers (
   customer_id INT NOT NULL,
   customer_age INT NOT NULL,
   customer_name VARCHAR(40) NOT NULL,
   PRIMARY KEY ( customer_id )
);

6.4.2 步骤二:创建StarRocks表

(1)登录EMR StarRocks Manager
(2)创建库和表

CREATE DATABASE IF NOT EXISTS `flink_cdc`;
CREATE TABLE IF NOT EXISTS `flink_cdc`.`customers` (
  `customer_id` INT NOT NULL  COMMENT "",
  `customer_age` FLOAT NOT NULL  COMMENT "",
  `customer_name` STRING NOT NULL  COMMENT ""
) ENGINE=olap
PRIMARY KEY(`customer_id`)
COMMENT ""
DISTRIBUTED BY HASH(`customer_id`) BUCKETS 1
PROPERTIES (
  "replication_num" = "1"
);
CREATE TABLE IF NOT EXISTS `flink_cdc`.`orders` (
  `order_id` INT NOT NULL  COMMENT "",
  `order_revenue` FLOAT NOT NULL  COMMENT "",
  `order_region` STRING NOT NULL  COMMENT "",
  `customer_id` INT NOT NULL  COMMENT ""
) ENGINE=olap
PRIMARY KEY(`order_id`)
COMMENT ""
DISTRIBUTED BY HASH(`order_id`) BUCKETS 1
PROPERTIES (
  "replication_num" = "1"
);

(3)基于ODS表创建DWD视图

CREATE VIEW flink_cdc.dwd_order_customer_valid (
  order_id,
  order_revenue,
  order_region,
  customer_id,
  customer_age,
  customer_name
)
AS
SELECT o.order_id, o.order_revenue, o.order_region, c.customer_id, c.customer_age, c.customer_name
FROM flink_cdc.customers c JOIN flink_cdc.orders o
ON c.customer_id=o.customer_id
WHERE c.customer_id != -1;

(4)基于DWD表创建DWS视图

CREATE VIEW flink_cdc.dws_agg_by_region (
  order_region,
  order_cnt,
  order_total_revenue)
AS
SELECT order_region, count(order_region), sum(order_revenue)
FROM flink_cdc.dwd_order_customer_valid
GROUP BY order_region;

6.4.3 步骤三:执行Flink任务,启动数据流

(1)打开阿里云flink控制台
(2)创建MySQL CDC映射表
注意:hostname等需要根据自己的实际情况进行修改。

CREATE DATABASE IF NOT EXISTS `vvp`.`flinkcdc`;

CREATE TABLE IF NOT EXISTS `vvp`.`flinkcdc`.`customers_src` (
  `customer_id` INT NOT NULL,
  `customer_age` FLOAT NOT NULL,
  `customer_name` STRING NOT NULL,
  PRIMARY KEY(`customer_id`) NOT ENFORCED
) with (
 'connector' = 'mysql',
 'hostname' = 'rm-cn-x0r3fp1lj000qa.rwlb.rds.aliyuncs.com',
 'port' = '3306',
 'username' = 'xxxxxx',
 'password' = 'xxxxxx',
 'database-name' = 'flink_cdc',
 'table-name' = 'customers'
);

CREATE TABLE IF NOT EXISTS `vvp`.`flinkcdc`.`orders_src` (
  `order_id` INT NOT NULL,
  `order_revenue` FLOAT NOT NULL,
  `order_region` STRING NOT NULL,
  `customer_id` INT NOT NULL,
  PRIMARY KEY(`order_id`) NOT ENFORCED
) with (
  'connector' = 'mysql',
  'hostname' = 'rm-cn-x0r3fp1lj000qa.rwlb.rds.aliyuncs.com',
  'port' = '3306',
  'username' = 'xxxx',
  'password' = 'xxxxxx!',
  'database-name' = 'flink_cdc',
  'table-name' = 'orders'
);

(3)创建StarRocks映射表
注意:jdbc-url、load-url等需要根据自己的实际情况进行修改。查询位置为EMR控制台-》StarRocks-》点击实例-》实例详情

CREATE TABLE IF NOT EXISTS `vvp`.`flinkcdc`.`customers_sink` (
  `customer_id` INT NOT NULL,
  `customer_age` FLOAT NOT NULL,
  `customer_name` STRING NOT NULL,
  PRIMARY KEY(`customer_id`)
 NOT ENFORCED
) with (
  'connector' = 'starrocks'
  ,'jdbc-url' = 'jdbc:mysql://fe-c-838fd7a4db1550a6-internal.starrocks.aliyuncs.com:9030'
  ,'load-url' = 'fe-c-838fd7a4db1550a6-internal.starrocks.aliyuncs.com:8030'
  ,'database-name' = 'flink_cdc'
  ,'table-name' = 'customers'
  ,'username' = 'xxxxxx'
  ,'password' = 'xxxxxx'
  ,'sink.buffer-flush.interval-ms' = '5000'
  ,'sink.semantic' = 'exactly-once'
);

CREATE TABLE IF NOT EXISTS `vvp`.`flinkcdc`.`orders_sink` (
  `order_id` INT NOT NULL,
  `order_revenue` FLOAT NOT NULL,
  `order_region` STRING NOT NULL,
  `customer_id` INT NOT NULL,
  PRIMARY KEY(`order_id`)
 NOT ENFORCED
) with (
  'connector' = 'starrocks'
  ,'jdbc-url' = 'jdbc:mysql://fe-c-838fd7a4db1550a6-internal.starrocks.aliyuncs.com:9030'
  ,'load-url' = 'fe-c-838fd7a4db1550a6-internal.starrocks.aliyuncs.com:8030'
  ,'database-name' = 'flink_cdc'
  ,'table-name' = 'orders'
  ,'username' = 'xxxxxx''
  ,'password' = 'xxxxxx'
  ,'sink.buffer-flush.interval-ms' = '5000'
  ,'sink.semantic' = 'exactly-once'
);

 参数含义
在这里插入图片描述
在这里插入图片描述

(4)将MySQL数据插入到StarRocks
以下代码写到一个流作业中,然后部署运行。
需要无状态启动,并且设置checkpoint周期为5秒
在这里插入图片描述


BEGIN STATEMENT SET;

INSERT INTO `vvp`.`flinkcdc`.`customers_sink` SELECT * FROM `vvp`.`flinkcdc`.`customers_src`;
INSERT INTO `vvp`.`flinkcdc`.`orders_sink` SELECT * FROM `vvp`.`flinkcdc`.`orders_src`;

END;

6.4.4 步骤四:验证数据

(1)在RDS数据库窗口执行以下命令,向表orders和customers中插入数据。
INSERT INTO flink_cdc.orders(order_id,order_revenue,order_region,customer_id) VALUES(1,10,"beijing",1);
INSERT INTO flink_cdc.orders(order_id,order_revenue,order_region,customer_id) VALUES(2,10,"beijing",1);
INSERT INTO flink_cdc.customers(customer_id,customer_age,customer_name) VALUES(1, 22, "emr_test");

(2)在EMR StarRocks Manager中进行查询
1)查看orders表信息

select * from flink_cdc.orders;

在这里插入图片描述

2)查看customers表信息

select * from flink_cdc.customers;

在这里插入图片描述

3)查询DWD层数据

select * from flink_cdc.dwd_order_customer_valid;

在这里插入图片描述

4)查询DWS层数据

select * from flink_cdc.dws_agg_by_region;

在这里插入图片描述

(3)在RDS数据库窗口执行以下命令,从orders表中删除一条记录

DELETE FROM flink_cdc.orders where order_id = 2;

(4)再次在EMR StarRocks Manager中进行查询,查看变化
1)查询DWD层数据

select * from flink_cdc.dwd_order_customer_valid;

在这里插入图片描述

2)查询DWS层数据

select * from flink_cdc.dws_agg_by_region;

在这里插入图片描述

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

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

相关文章

gemini2相机和宇树雷达L1的使用注意点

gemini2相机: 官方资料:Gemini2深度相机 (yahboom.com) 目前深度这一块智能提供某一点的深度数据,没有提供某一点的世界坐标,虽然网上有文章说是可以计算 已知深度图,获得某个像素点的三维坐标_深度图如何知道特征点的3d坐标-CS…

Windows系统下安装mujoco环境的教程【原创】

在学习Mujoco仿真的过程中,我先前是在linux系统下进行的研究与学习,今天来试试看在windows系统中安装mujoco仿真环境。 先前在linux中的一些关于mujoco学习记录的博客:Mujoco仿真【xml文件的学习 3】_mujoco打开xml文件-CSDN博客 下面开始wi…

怎么防止电脑上的重要视频被录屏

加密软件防录屏是通过一系列技术手段来防止视频内容在播放过程中被非法录制和传播。 一、视频加密技术 高强度加密算法:使用如AES256位等高强度加密算法对视频内容进行加密,确保视频在传输和存储过程中的安全性。这样,即使视频被录制&#…

黑科技,教你同时在一个电脑上同时开启多个微信

我们右键微信图标选择属性 然后 将这个目标复制下来 然后 我们新建一个文本文件 然后 在记事本中 输入 start 后面跟着微信目标内容 但是需要注意 双引号要换一下位置 换到盘符后面 例如 我的目标是 “D:\Program Files (x86)\Tencent\WeChat\WeChat.exe” 但是 我要输入 st…

第19课 Scratch入门篇:摇骰子

摇骰子 🎲 故事背景: 有一颗神奇的骰子,随机变换不同的样子,让我们一起来设计一款属于自己的骰子,和自己身边的人比比,看看谁的数字大! 程序原理: 骰子数字的变化,只要…

javascript 的奇技巧淫一

1 、使用 !! 转换为布尔值 // 使用双重否定快速将任何值转换为布尔值。 let a !!1; // true let b !!0; // false2 、 短 If-Else 的三元运算符\ let price 100; let message price > 200 ? "Expensive" : "Cheap";3、 默认函数参数 // 设置函数…

引领未来:埃隆·马斯克与拉里·佩奇论道企业开放合作的创新之路——张驰咨询

开放式创新是企业在产品研发和商业化活动中,充分整合全社会的智力、资源,以最大限度调动社会各界智力资源,从而实现互利共赢的一种创新模式。它打破了传统封闭式创新的界限,使企业能够像使用内部资源一样借用外部资源进行创新。 …

字体文件的引用与使用 -------css

1、字体文件的全局引用&#xff08;app.vue的<style>&#xff09; <style> font-face {font-family: "PingFangSC";src: url("./assets/fonts/PingFangSC.ttf");font-weight: normal;font-style: normal; } </style> 2、字体文件在组件…

算法力扣刷题记录 六十五【17.电话号码的字母组合】

前言 回溯章节第三篇&#xff1a;前两篇做了两道组合题目&#xff0c;练习回溯模版。 本文 记录 六十五【17.电话号码的字母组合】。 一、题目阅读 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映…

大数据应用【大数据导论】

各位大佬好 &#xff0c;这里是阿川的博客&#xff0c;祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 目录 大数据在许多领域应用互联网领域应用生物医学…

【微服务】Spring Cloud 服务网关之Zuul

文章目录 强烈推荐引言用途使用情况使用场景基本使用示例总结强烈推荐专栏集锦写在最后 强烈推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站:人工智能 引言 服务网关&#xff08;AP…

手撕算法题4(附思路和源码)

算法 1.单值二叉树2.相同的树3.另一棵树的子树4.二叉树的前序遍历5.二叉树的中序遍历6.二叉树的后序遍历7.二叉树遍历8.TopK问题 1.单值二叉树 单值二叉树 思路 比较父节点和子结点&#xff0c;相同返回true&#xff0c;否则返回false&#xff0c;递归 设计程序 若结点为空返回…

本地部署 faster-whisper

本地部署 faster-whisper 1. 创建虚拟环境2. 安装依赖模块3. 创建 Web UI4. 启动 Web UI5. 访问 Web UI 1. 创建虚拟环境 conda create -n faster-whisper python3.11 -y conda activate faster-whisper2. 安装依赖模块 pip install torch2.2.2 torchvision0.17.2 torchaudio…

快讯 | OpenAI迎挑战:开发者转向Sonnet和Llama 405B,GPT-5亟待发布

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…

Golang | Leetcode Golang题解之第312题戳气球

题目&#xff1a; 题解&#xff1a; func maxCoins(nums []int) int {n : len(nums)rec : make([][]int, n 2)for i : 0; i < n 2; i {rec[i] make([]int, n 2)}val : make([]int, n 2)val[0], val[n1] 1, 1for i : 1; i < n; i {val[i] nums[i-1]}for i : n - 1…

网络商城系统/在线购物商城系统/电子商城系统/商品销售系统

获取源码联系方式请查看文章结尾&#x1f345; 摘 要 本毕业设计的内容是设计并且实现一个基于SSM框架的网络商城系统。它是在Windows下&#xff0c;JSP技术&#xff0c;以MYSQL为数据库开发平台&#xff0c;Tomcat网络信息服务作为应用服务器。网络商城系统的功能已基本实现…

pdf转word在线转换免费软件有没有?安利10款pdf转换器,亲测实用!

pdf和 word是两种广泛使用的文件格式&#xff0c;主要用于分享和存储文档。pdf文件能够保留文档的格式和布局。因此&#xff0c;与word文档相比&#xff0c;pdf更适合用于共享和打印。而word文件则易于编辑&#xff0c;使用也比pdf更加普遍。你可以方便地对文本进行修改、添加或…

花排口径的含义

第一种&#xff1a;固定花排模式 第二种&#xff1a;滚动花排模式 实际使用中&#xff0c;可以根据使用用途&#xff0c;选用不同的口径。

【趣味实验】当狼人杀遇上AI:一场颠覆认知的反向图灵测试

「你看&#xff0c;人类一败涂地了」 这是一次「反向图灵测试」&#xff0c;几个全球最先进的大模型坐在一起&#xff0c;坐着火车唱着歌&#xff0c;但其中混进了人类&#xff1a; 而 AI 的任务&#xff0c;是把这个人类揪出来。 最近&#xff0c;一位昵称「Tore Knabe」的网…

新手学习Gazebo+ros仿真控制小车-----易错和自己理解

赵虚左老师讲的很详细&#xff0c;这里只是理一下思路&#xff0c;说下突然出现“新”概念之间的关系。 urdf文件:里面是配置模型的&#xff0c;既有模型的位置、尺寸、颜色&#xff0c;也包含复杂的物理模型信息比如&#xff1a;转动惯量&#xff0c;碰撞box大小等等&#xff…