当前位置: 首页 > news >正文

Starrocks异步物化视图的使用以及注意事项

最近在使用starrocks来进行实时数据项目的开发,尝试使用了一下starrocks的异步物化视图。
使用版本: 3.1.2-4f3a2ee

创建三个测试表, 注意只有test_mv_table1为分区表,其他两个都是非分区表:

CREATE TABLE `test_mv_table1` (`periodday` DATE NOT NULL COMMENT "",`fid` varchar(44) NOT NULL COMMENT "",`fnumber` int NULL COMMENT ""
) ENGINE=OLAP
PRIMARY KEY(`periodday`, `fid`)
COMMENT "数据1-分区"
PARTITION BY date_trunc('month', `periodday`)
DISTRIBUTED BY HASH(`fid`)
ORDER BY(`fid`, `fnumber`)
PROPERTIES ("replication_num" = "3","in_memory" = "false","enable_persistent_index" = "false","replicated_storage" = "true"
);CREATE TABLE `test_mv_table2` (`fid` varchar(44) NOT NULL COMMENT "",`fnumber` int NULL COMMENT ""
) ENGINE=OLAP
PRIMARY KEY(`fid`)
COMMENT "数据2-明细"
DISTRIBUTED BY HASH(`fid`)
ORDER BY(`fid`, `fnumber`)
PROPERTIES ("replication_num" = "3","in_memory" = "false","enable_persistent_index" = "false","replicated_storage" = "true"
);CREATE TABLE `test_mv_table3` (`fid` varchar(44) NOT NULL COMMENT "",`fnumber` int NULL COMMENT ""
) ENGINE=OLAP
PRIMARY KEY(`fid`)
COMMENT "数据3-明细"
DISTRIBUTED BY HASH(`fid`)
ORDER BY(`fid`, `fnumber`)
PROPERTIES ("replication_num" = "3","in_memory" = "false","enable_persistent_index" = "false","replicated_storage" = "true"
);

分别在三张表中插入初始化数据:

insert into test_mv_table1 (periodday, fid, fnumber) values
("2023-09-01", "aaa", 111),
("2023-09-02", "bbb", 222),
("2023-09-03", "ccc", 333),
("2023-10-01", "aaa", 111),
("2023-10-02", "bbb", 222),
("2023-10-03", "ccc", 333),
("2023-11-01", "aaa", 111),
("2023-11-02", "bbb", 222),
("2023-11-03", "ccc", 333);insert into test_mv_table2 (fid, fnumber) values
("aaa", 666),
("bbb", 777),
("ccc", 888);insert into test_mv_table3 (fid, fnumber) values
("aaa", 22200),
("bbb", 33300),
("ccc", 44400);

创建物化视图,物化视图的分区只能对应一个基表:

CREATE MATERIALIZED VIEW view_mv_test
COMMENT 'test-物化视图'
PARTITION BY `periodday`
DISTRIBUTED BY HASH(`fnumber`)
REFRESH ASYNC
PROPERTIES ("replication_num" = "3","excluded_trigger_tables"="test_mv_table2,test_mv_table3","session.exec_mem_limit"="9147483648","session.query_timeout"="259000","session.new_planner_optimize_timeout"="5000","session.parallel_fragment_exec_instance_num"="10"
)
AS
selecta.periodday as periodday,b.fnumber as fnumber,a.fid as fid,now() as insert_time
from test_mv_table1 a
left join test_mv_table2 b
on a.fid = t.fid
inner join test_mv_table3 c
on a.fid = c.fid
and b.fid = c.fid
;

注意这里创建的是自动刷新,也可以创建为定时刷新:

CREATE MATERIALIZED VIEW view_mv_test
COMMENT 'test-物化视图'
PARTITION BY `periodday`
DISTRIBUTED BY HASH(`fnumber`)
REFRESH ASYNC START('2023-11-20 10:00:00') EVERY (interval 1 minute) 
PROPERTIES ("replication_num" = "3","excluded_trigger_tables"="test_mv_table2,test_mv_table3","session.exec_mem_limit"="9147483648","session.query_timeout"="259000","session.new_planner_optimize_timeout"="5000","session.parallel_fragment_exec_instance_num"="10"
)
AS
selecta.periodday as periodday,b.fnumber as fnumber,a.fid as fid,now() as insert_time
from test_mv_table1 a
left join test_mv_table2 b
on a.fid = t.fid
inner join test_mv_table3 c
on a.fid = c.fid
and b.fid = c.fid
;

创建完成后,数据会进行初始化计算

小结:

  • 基表有刷新了,物化视图进行刷新(前提是 test_mv_table2 和 test_mv_table3都没有变更的情况下,物化视图刷新对应的分区)
  • 如果 test_mv_table2 和 test_mv_table3 存在变更,test_mv_table1基表未发生变更,此时不会触发刷新
  • 但是等到 test_mv_table1基表 发生变更的时候,会触发物化视图的全量刷新
  • 如果我只想让物化视图跟随基表的分区变化而刷新对应的分区,不管 test_mv_table2 和 test_mv_table3 的变更,这样该怎么实现呢?目前好像不支持

参考文档: https://docs.starrocks.io/zh-cn/latest/using_starrocks/data_modeling_with_materialized_views
通过物化视图将事实表和多个维度表进行关联:

  • 您需要在物化视图的分区键中指定特定基表(通常是事实表)的分区键来实现物化视图的分区关联(PARTITION BY fact_tbl.col)。一个物化视图仅能与一个基表做分区关联。
  • 当被关联基表的某个分区中的数据发生变化时,物化视图中相应的分区将被刷新,但不影响其他分区。
  • 当其他未被关联的基表发生变化时,默认情况下会刷新整个物化视图。
    然而,您可以选择忽略某些未关联表中的数据变化,以便在这些表中的数据发生变化时不刷新物化视图。

这种分区关联可以支持多种业务场景:

  • 事实表更新:您可以将事实表分区到细粒度级别,例如按日或按小时。
    在事实表更新后,物化视图中相应的分区将自动刷新。

注意这里,维度表的更新,是会触发整个物化视图的更新的

  • 维度表更新:通常,维度表中的数据更新将导致所有关联结果的刷新,刷新代价较大。
    您可以选择忽略某些维度表中的数据更新,以避免刷新整个物化视图,
    或者您可以指定一个时间范围,从而只有在该时间范围内的分区才能被刷新。
  • 外部表的自动刷新:在类似于 Apache Hive 或 Apache Iceberg 这样的外部数据源中,
    数据往往以分区的粒度进行变更。
    StarRocks 的物化视图可以订阅外表分区级别的数据更新,只刷新物化视图的相应分区。
  • TTL:在为物化视图设置分区策略时,您可以设置要保留的最近分区的数量,从而仅保留最新的数据。
    其对应的业务场景对数据时效性有较高要求,例如,分析师仅需要查询某个时间窗口内的最新数据,而无需保留所有历史数据。

相关文章:

Starrocks异步物化视图的使用以及注意事项

最近在使用starrocks来进行实时数据项目的开发,尝试使用了一下starrocks的异步物化视图。 使用版本: 3.1.2-4f3a2ee 创建三个测试表, 注意只有test_mv_table1为分区表,其他两个都是非分区表: CREATE TABLE test_mv_table1 (periodday DATE NOT NULL CO…...

SpringBoot整合Sharding-Jdbc实现分库分表和分布式全局id

SpringBoot整合Sharding-Jdbc Sharding-Jdbc sharding-jdbc是客户端代理的数据库中间件;它和MyCat最大的不同是sharding-jdbc支持库内分表。 整合 数据库环境 在两台不同的主机上分别都创建了sharding_order数据库,库中都有t_order_1和t_order_2两张…...

「江鸟中原」有关HarmonyOS-ArkTS的Http通信请求

一、Http简介 HTTP(Hypertext Transfer Protocol)是一种用于在Web应用程序之间进行通信的协议,通过运输层的TCP协议建立连接、传输数据。Http通信数据以报文的形式进行传输。Http的一次事务包括一个请求和一个响应。 Http通信是基于客户端-服…...

vuex的使用笔记

1.安装 npm安装 npm install vuexnext --saveyarn安装 yarn add vuexnext --save2.基本结构 import Vuex from vuexconst store createStore({ //状态:相当于vue中的data() state() {return {name: 0,code:"",todos: [{ id: 1…...

汇编:关于栈的知识

1.入栈和出栈指令 2. SS与SP 3. 入栈与出栈 3.1 执行push ax ↑↑ 3.2 执行pop ax ↓↓ 3.3 栈顶超界的问题 4. 寄存器赋值 基于8086CPU编程时,可以将一段内存当作栈来使用。一个栈段最大可以设为64KB(0-FFFFH)。 1.入栈和出栈指令…...

uniapp使用map标签

在UniApp中,可以使用map标签来显示地图,并通过其属性来自定义地图的样式和行为。以下是一些常用的map标签属性: id:用于给地图组件指定一个唯一的标识符,方便在代码中进行引用和操作。 style:用来设置地图…...

MacOS14 Sonoma 安装 Flutter 开发环境

本文针对 小白用户也包括自己,以前都是将这些写入我的有道云笔记。为了让给多人看见或者说自己更好的浏览,先将其记录如下。 朋友介绍一个项目说要开发一款App,最近也是闲着就答应下来。主要功能是通过蓝牙BLE控制设备的一个 Iot边缘设备&…...

【Web】PHP反序列化刷题记录

目录 ①[NISACTF 2022]babyserialize ②[NISACTF 2022]popchains ③[SWPUCTF 2022 新生赛]ez_ez_unserialize ④[GDOUCTF 2023]反方向的钟 再巩固下基础 ①[NISACTF 2022]babyserialize <?php include "waf.php"; class NISA{public $fun"show_me_fla…...

C++标准模板库 STL 简介(standard template library)

在 C 语言中&#xff0c;很多东西都是由我们自己去实现的&#xff0c;例如自定义数组&#xff0c;线程文件操作&#xff0c;排序算法等等&#xff0c;有些复杂的东西实现不好很容易留下不易发现的 bug。而 C为使用者提供了一套标准模板库 STL,其中封装了很多实用的容器&#xf…...

Linux篇:文件系统

一、共识原理&#xff1a; 文件文件内容文件属性 磁盘上存储文件存文件的内容&#xff08;数据块&#xff09;存文件的属性&#xff08;inode&#xff09; Linux的文件在磁盘中存储是将属性和内容分开存储的。 二、硬件简述&#xff1a; 1. 认识硬件 磁盘&#xff1a;唯一的一…...

AI - Crowd Simulation(集群模拟)

类似鱼群&#xff0c;鸟群这种群体运动模拟。 是Microscopic Models 微观模型&#xff0c;定义每一个个体的行为&#xff0c;然后合在一起。 主要是根据一定范围内族群其他对象的运动状态决定自己的运动状态 Cohesion 保证个体不会脱离群体 求物体一定半径范围内的其他临近物…...

<JavaEE> Java中线程有多少种状态(State)?状态之间的关系有什么关系?

目录 一、系统内核中的线程状态 二、Java中的线程状态 一、系统内核中的线程状态 状态说明就绪状态线程已经准备就绪&#xff0c;随时可以接受CPU的调度。阻塞状态线程处于阻塞等待&#xff0c;暂时无法在CPU中执行。 二、Java中的线程状态 相比于系统内核&#xff0c;Java…...

正则表达式 通配符 awk文本处理工具

目录 什么是正则表达式 概念 正则表达式的结构 正则表达式的组成 元字符 元字符点&#xff08;.&#xff09; 代表字符. 点值表示点需要转义 \ r..t 代表r到t之间任意两个字符 过滤出小写 过滤出非小写 space空格 [[:space:]] 表示次数 位置锚定 例&#xff1a…...

三、ts高级笔记,

文章目录 18、d.ts声明文件19、Mixin混入20、Decorator装饰器的使用21、-高级proxy拦截_Reflect元储存22、-高级写法Partial-Pick23、Readonly只读_Record套对象24、高阶写法Infer占位符25、Inter实现提取类型和倒叙递归26、object、Object、{}的区别27、localStorage封装28、协…...

二十一、数组(6)

本章概要 数组排序Arrays.sort的使用并行排序binarySearch二分查找parallelPrefix并行前缀 数组排序 根据对象的实际类型执行比较排序。一种方法是为不同的类型编写对应的排序方法&#xff0c;但是这样的代码不能复用。 编程设计的一个主要目标是“将易变的元素与稳定的元素…...

flask依据现有的库表快速生成flask实体类

flask依据现有的库表快速生成flask实体类 在实际开发过程中&#xff0c;flask的sqlalchemy对应的model类写起来重复性较强&#xff0c;如果表比较多会比较繁琐&#xff0c;这个时候可以使用 flask-sqlacodegen 来快速的生成model程序或者py文件&#xff0c;以下是简单的示例&a…...

.NET6 开发一个检查某些状态持续多长时间的类

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅仅是技术还有人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔 !序言 在代码的世界里,时常碰撞…...

链表K个节点的组内逆序调整问题

链表K个节点的组内逆序调整问题 作者&#xff1a;Grey 原文地址&#xff1a; 博客园&#xff1a;链表K个节点的组内逆序调整问题 CSDN&#xff1a;链表K个节点的组内逆序调整问题 题目描述 LeetCode 25. Reverse Nodes in k-Group 本题的 follow up 是&#xff1a; Fol…...

安卓隐私指示器学习笔记

最近了解到Google 在Android12上新增了权限指示器&#xff0c;可以在信号栏的右侧显示当前访问录音机和Camera的应用&#xff0c;点击后可以跳转到相应应用的权限界面&#xff0c;消费者可以控制权限的开启和关闭。国内手机厂商最近几年都在增加隐私看板供能&#xff0c;消费者…...

【Jenkins】jenkins发送邮件报错:Not sent to the following valid addresses:

jenkins报错未能发送邮件到指定邮箱 注意&#xff1a;这是在系统配置中修改 在系统配置》邮件通知中添加配置信息 注意&#xff1a;这个是在项目的配置下修改 配置完成后&#xff0c;重新执行发送邮件成功&#xff01;&#xff01;&#xff01;...

ADI AD5940阻抗测量板初体验:从GitHub源码下载到IAR工程编译的完整避坑指南

ADI AD5940阻抗测量开发板实战&#xff1a;从源码获取到工程编译的深度避坑手册 第一次接触ADI的AD5940阻抗测量开发板时&#xff0c;那种既兴奋又忐忑的心情至今记忆犹新。作为一款专为生物阻抗测量设计的高精度前端芯片&#xff0c;AD5940在医疗穿戴设备、体脂分析等领域有着…...

QQ音乐加密文件自由播放全攻略:qmcdump工具深度应用指南

QQ音乐加密文件自由播放全攻略&#xff1a;qmcdump工具深度应用指南 【免费下载链接】qmcdump 一个简单的QQ音乐解码&#xff08;qmcflac/qmc0/qmc3 转 flac/mp3&#xff09;&#xff0c;仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 一、…...

SteamAchievementManager高效管理指南:从问题诊断到个性化成就控制

SteamAchievementManager高效管理指南&#xff1a;从问题诊断到个性化成就控制 【免费下载链接】SteamAchievementManager A manager for game achievements in Steam. 项目地址: https://gitcode.com/gh_mirrors/st/SteamAchievementManager SteamAchievementManager&a…...

港大新作GS-SDF开源了!手把手教你用激光雷达+3DGS复现IROS2025论文效果(附避坑指南)

港大GS-SDF开源项目实战&#xff1a;从环境配置到效果复现全指南 当激光雷达遇上3D高斯溅射&#xff0c;会碰撞出怎样的火花&#xff1f;港大MARS实验室最新开源的GS-SDF项目给出了令人惊艳的答案。这个将LiDAR点云与神经符号距离场&#xff08;SDF&#xff09;相结合的创新方…...

如何快速搭建REST API测试环境:JSONPlaceholder与json-server的完整指南 [特殊字符]

如何快速搭建REST API测试环境&#xff1a;JSONPlaceholder与json-server的完整指南 &#x1f680; 【免费下载链接】jsonplaceholder A simple online fake REST API server 项目地址: https://gitcode.com/gh_mirrors/js/jsonplaceholder 在当今快速发展的Web开发领域…...

Spire.Doc转PDF授权限制解析与解决方案

1. Spire.Doc转PDF的三页限制是怎么回事 第一次用Spire.Doc转换PDF时&#xff0c;我盯着生成的3页文档愣了半天——明明50页的Word文件&#xff0c;怎么输出就只剩个开头了&#xff1f;后来查文档才发现&#xff0c;这是未授权版本的硬性限制。就像试用版软件经常会有功能阉割&…...

STM32定时器编码器模式:从ARR寄存器到精准测速的实战解析

1. STM32编码器模式基础认知 第一次接触STM32的编码器接口时&#xff0c;我完全被那些专业术语搞懵了。什么正交解码、自动重装值、计数方向&#xff0c;听起来就像天书。但当我真正用起来才发现&#xff0c;这玩意儿简直就是为电机测速量身定做的神器。 编码器模式本质上就是定…...

Unity3D RPG游戏开发:从零构建角色扮演游戏的核心系统

1. 环境准备与项目初始化 第一次打开Unity Hub时&#xff0c;新手常会被各种版本和选项搞得晕头转向。我建议直接安装最新的LTS版本&#xff08;比如2022.3&#xff09;&#xff0c;这个版本就像游戏界的"稳定版安卓系统"&#xff0c;既不会太老缺少功能&#xff0c;…...

Project Quay镜像签名与验证:保障软件供应链安全的完整指南

Project Quay镜像签名与验证&#xff1a;保障软件供应链安全的完整指南 【免费下载链接】quay Build, Store, and Distribute your Applications and Containers 项目地址: https://gitcode.com/gh_mirrors/quay/quay 在当今云原生时代&#xff0c;容器镜像已成为软件交…...

微信小程序地图气泡实战:从callout到customCallout的性能与兼容性深度解析

1. 微信小程序地图气泡的核心需求解析 第一次接触微信小程序地图气泡需求时&#xff0c;我也被各种技术方案搞得晕头转向。经过多个项目的实战验证&#xff0c;我发现开发者最常遇到的三大核心问题就是&#xff1a;内容复杂度、性能瓶颈和跨平台兼容性。比如在电商小程序中&…...