- 博客(57)
- 收藏
- 关注
原创 QLExpress代码解读,运行原理解析
简介: 本文针对上图的功能详细图,进行逐个的简单介绍:代码入口、代码的主要逻辑和算法。QLExpress的宏,function,Operator,变量是非常开放的,名字可以为中文字符,也可以随意扩展,还可以通过脚本静态分析出包含哪些变量、函数,很方便的进行二次业务开发。脚本调用classLoader资源的时候可以import,也可以使用类的全路径,构造函数、静态方法、对象方法、类的字段、函数的不定参数调用统统搞定。本文针对上图的功能详细图,进行逐个的简单介绍:代码入口、代码的主要逻辑和算法。
2023-09-14 11:34:37
1087
原创 flink正常消费kafka数据,flink没有做checkpoint,kafka位点没有提交
在消费kafka的数据时,source的并发度不能超过kafka的partition数,否则部分source无数据消费,导致finished,可以小于partition,但是部分subtask就会消费多个partition的数据,导致吞吐达不到最大,理想状态是source并发度等于partition数。(1)flink任务消费kafka数据,其中数据正常消费,kafka显示消息堆积,位点没有提交,并且flink任务没有做checkpoint。flink消费kafka数据,多并发,实现双流join。
2023-07-05 19:34:17
1455
2
原创 基于prometheus与grafana对starrocks/doris监控报警
基于prometheus与grafana监控starrocks/doris实现自定义指标监控与报警
2022-07-20 19:46:38
1485
4
原创 doris物化视图查询最优匹配
物化视图创建完成后,用户的查询会根据规则自动匹配到最优物化视图。如上图:有一张销售记录明细表,并且在这个明细表上创建了三张物化视图。一个存储了不同时间不同销售员的售卖量,一个存储了不同时间不同门店的销售量,以及每个销售员的总销售量。 当查询7月19日各个销售员都买了多少钱时,我们 可以匹配mv_1物化视图, 直接对mv_1的数据进行查询。自动匹配过程自动匹配的过程分为两个步骤:对候选集合进行一个过滤。只要是查询的结果能从物化视图数据计算(取部分行,部分列,或部分行列的聚合)出都可以留在候选集中,
2022-05-27 15:24:55
564
原创 doris通过rollup增加duplicate模型前缀索引
因为建表时已经指定了列顺序,所以一个表只有一种前缀索引。这对于使用其他不能命中前缀索引的列作为条件进行的查询来说,效率上可能无法满足需求。因此,我们可以通过创建 ROLLUP 来人为的调整列顺序。举例说明。Base 表结构如下:可以看到,ROLLUP 和 Base 表的列完全一样,只是将 user_id 和 age 的顺序调换了。那么当我们进行如下查询时:SELECT * FROM table where age=20 and message LIKE “%error%”;会优先选择 ROL
2022-05-27 11:29:08
462
转载 doris前缀索引、doris bloom filter索引、doris bitmap索引原理及适应场景
索引用于帮助快速过滤或查找数据。目前 Doris 主要支持两类索引:内建的智能索引,包括前缀索引和ZoneMap索引。用户创建的二级索引,包括Bloom Filter索引和Bitmap倒排索引。其中ZoneMap索引是在列存格式上,对每一列自动维护的索引信息,包括Min/Max,Null值个数等等。这种索引对用户透明,不在此介绍。以下主要介绍其他三类索引。前缀索引原理本质上,Doris 的数据存储在类似 SSTable(Sorted String Table)的数据结构中。该结构是一种有序的数据结
2022-05-27 11:24:24
2167
原创 doris物化视图
物化视图的使用场景有:分析需求覆盖明细数据查询查询对明细数据的任意维度上卷聚合分析创建物化视图通过下面命令就可以创建物化视图了。创建物化视图是一个异步的操作,也就是说用户成功提交创建任务后,DorisDB会在后台对存量的数据进行计算,直到创建成功。CREATE MATERIALIZED VIEW查看物化视图创建状态由于创建物化视图是一个异步的操作,用户在提交完创建物化视图任务后,需要通过命令检查物化视图是否构建完成, 命令如下:SHOW ALTER MATERIALIZED VIEW FR
2022-05-19 20:18:22
1450
原创 基于doris实时数仓实时报表生成
基于doris实时数仓实时报表生成1、流程图2、自动触发查询--创建存储过程CREATE PROCEDURE insetAutoInsert10sProcedure()BEGININSERT INTO auto_insert_10s(id,create_time,update_time) VALUES (1,NOW(),NOW());END;--创建事件定时器CREATE EVENT IF NOT EXISTS eventAutoInsert10sON SCHEDULE EVERY
2022-05-06 20:06:51
3402
原创 基于doris实时数仓指标计算
基于doris实时数仓指标计算1、流程图2、计算字符uv字典表生成流程涉及设备uv去重只能基于bigint类型dau = to_bitmap(device_id)需要建立设备字典表,将字符串设备转化为字典id做去重处理因为常用指标周期只涉及近30日,因此字典表只保留近30日设备3、涉及设备uv生成近N日聚合明细4、doris聚合模型代码--建表语句create table log_platform_channel_dau(ds date,platform varchar(655
2022-05-06 19:53:46
1438
原创 hive连续N天登录sql
1、连续N天登录select user_id,ds,ds_6from(SELECT user_id ,ds ,lead(ds,6,null) over(PARTITION BY user_id ORDER BY ds ASC) ds_6FROM ( SELECT DISTINCT ds ,user_id FROM dwd_user_log
2022-01-11 14:55:03
412
原创 Flink CDC详解datastreamapi及flink sql实现
Flink CDCFlink社区开发了 flink-cdc-connectors 组件,这是一个可以直接从 MySQL、PostgreSQL 等数据库直接读取全量数据和增量变更数据的 source 组件。目前也已开源,FlinkCDC是基于Debezium的.FlinkCDC相较于其他工具的优势:①能直接把数据捕获到Flink程序中当做流来处理,避免再过一次kafka等消息队列,而且支持历史数据同步,使用更方便.②FlinkCDC的断点续传功能:Flink-CDC将读取binlog的位置信息以状
2021-12-20 20:10:32
4116
原创 Flink udf table api
标量函数class HashCode(factor: Int) extends ScalarFunction{ def eval(s: String) :Int ={ s.hashCode*factor }}val tabEnv = StreamTableEnvironment.create(env)val table = tabEnv.fromDataStream(dataStream,'id,'timestamp as 'ts,'temperature as 'temp,'r
2021-10-29 10:23:13
141
原创 Flink table api 与flink sql 分组窗口与over窗口
①滚动窗口val resultTable = tableFromStream.window(Tumble.over(10.seconds).on("ts") as 'tw) .groupBy('tw,'id) .select('id,'id.count,'temp.avg) val resultSqlTable = tabEnv.sqlQuery( """ |select id |,count(*) as cnt
2021-10-26 10:48:07
881
原创 Flinktableapi时间特性
处理时间指定①DataStream 转化成 Table 时指定val dataStream = env.readTextFile("src/main/resources/sensor.txt") .map(data => { val arr = data.split(",") SensorReading(arr(0),arr(1).toLong,arr(2).toDouble) })val sensorTableFromStream =
2021-10-26 10:46:13
301
原创 Flink table api数据写入外部数据源的更新模式以及常用外部数据源支持的更新模式
更新模式(Update Mode)与常见外部系统支持模式在流处理过程中,表的处理并不像传统定义的那样简单。对于流式查询(Streaming Queries),需要声明如何在表和外部连接器之间执行转换。与外部系统交换的消息类型,由更新模式(update mode)指定。Flink Table API 中的更新模式有以下三种:①追加模式(Append Mode)在追加模式下,表和外部连接器只交换插入(Insert)消息。②撤回模式(Retract Mode)在撤回模式下,表和外部连接器交换的是:添
2021-10-19 16:32:37
1651
原创 Flink tableapi数据写入MySQL
jdbc 连接的代码实现比较特殊,因为没有对应的 java/scala 类实现 ConnectorDescriptor,所以不能直接 tableEnv.connect()。不过 Flink SQL留下了执行 DDL的接口:tableEnv.sqlUpdate()。对于 jdbc 的创建表操作,天生就适合直接写 DDL 来实现,所以我们的代码可以这样写:val sinkDDL: String ="""|create table jdbcOutputTable (| id varchar(20) no
2021-10-19 14:27:53
880
原创 Flink tableapi数据写入ES
tabEnv.connect(new Elasticsearch() .version("6") .host("localhost",9092,"http") .index("sensor") .documentType("test") ) .inUpsertMode() .withFormat(new Json()) .withSchema(new Schema() .field("id",Data
2021-10-19 14:26:53
278
原创 Flink tableapi数据写入kafka
tableEnv.connect(new Kafka() .topic("sensor_sink") .version("0.11") .property("zookeeper.connect","localhost:2181") .property("bootstrap.servers","localhost:9092") ) .withFormat(new Csv()) .withSchema(new Schema(...
2021-10-19 14:25:42
510
原创 Flink tableapi从kafka创建表
从kafka创建表oldTableEnv.connect(new Kafka().version(“0.11”).topic(“sensor”).property(“zookeeper.connect”, “localhost:2181”).property(“bootstrap.servers”, “localhost:9092”)).withFormat(new Csv()).withSchema(new Schema().field(“id”, DataTypes.STRING())
2021-10-18 10:52:15
674
原创 Flink tableapi从文件系统创建表
//注册表oldTableEnv.connect(new FileSystem().path(“src/main/resources/sensor.txt”)).withFormat(new OldCsv()).withSchema(new Schema().field(“id”, DataTypes.STRING()).field(“ts”, DataTypes.BIGINT()).field(“temperature”, DataTypes.DOUBLE())).createTempo
2021-10-13 10:25:47
232
原创 flink tableapi从DataStream创建表
val dataStream = inputStream.map(data => {val arr = data.split(",")SensorReading(arr(0), arr(1).toLong, arr(2).toDouble)})//创建表val dataTable = tableEnv.fromDataStream(dataStream)//表里直接获取数据val resultTable = dataTable .select("id,temperature")
2021-10-13 10:25:14
431
原创 Flink tableapi创建表环境
表环境(TableEnvironment)是 flink 中集成 Table API & SQL 的核心概念。它负责:① 注册 catalog② 在内部 catalog 中注册表③ 执行 SQL 查询④ 注册用户自定义函数⑤ 将 DataStream转换为表⑥ 保存对StreamExecutionEnvironment 的引用环境参数设置及环境创建老版plannerval oldTableSetting = EnvironmentSettings.newInstance().us
2021-10-13 10:24:14
516
原创 Flink Watermark详细介绍及实验结果分析
WatermarkWatermark 是一种衡量 Event Time 进展的机制。Watermark 是用于处理乱序事件的,而正确的处理乱序事件,通常用Watermark 机制结合 window 来实现。数据流中的 Watermark 用于表示 timestamp 小于 Watermark 的数据,都已经到达了,因此,window 的执行也是由 Watermark 触发的。Watermark 可以理解成一个延迟触发机制,我们可以设置 Watermark 的延时时长 t,每次系统会校验已经到达的数据
2021-08-25 11:08:59
856
原创 Flink中的window
窗口化的Flink程序的一般结构如下,第一个代码段中是分组的流,而第二段是非分组的流。唯一的区别是分组的stream调用keyBy(…)和window(…),而非分组的stream中换成了windowAll(…),在非分组数据流中,你的原始数据流并不会拆分成多个逻辑流并且所有的window逻辑将在一个任务中执行,并发度为1。Window 的生命周期当一个属于window的元素到达之后这个window就创建了,而当当前时间(事件或者处理时间)为window的创建时间跟用户指定的延迟时间及窗口长度及允许迟
2021-08-25 11:00:30
251
原创 HIVE时间范围生成时间点(爆炸函数一行生成多行两列)
1、建立时间维度表将时间范围与时间维度表生成笛卡尔积SELECT /*+MAPJOIN(b)*/ a.start_date ,a.end_date ,b.timeFROM ( SELECT '2020-01-01 10:00:00' AS start_date ,'2020-01-02 11:12:00' AS end_date ) aJOIN (
2021-08-20 14:16:11
1968
原创 Flink转换算子Transform
①map、flatformmap:输入一个元素,输出一个元素flatMap:打平操作,将输入的元素压平,从而对输出结果的数量不做要求,可以为0、1或者多个②keyBy在逻辑上将Stream根据key的Hash值进行分区,DataStream → KeyedStream:逻辑地将一个流拆分成不相交的分区③滚动聚合算子(Rolling Aggregation)这些算子可以针对 KeyedStream 的每一个支流做聚合。sum()min()max()minBy()maxBy()min与m
2021-08-04 11:37:54
145
原创 数据仓库元数据分类
定义和描述DW/BI系统的结构、操作和内容的所有信息都是元数据。DW/BI行业常常提到两类主要的元数据:技术元数据和业务元数据。我们又提出了第三类元数据:过程元数据。下面我们会对这三类元数据进行阐述,技术元数据一般是定义性的,而业务元数据和过程元数据一般都是描述性的。技术元数据。技术元数据从技术角度定义了构建DW/BI系统的对象和过程。主要包括定义数据结构的元数据,如表、字段、数据类型、索引和关系引擎中的分区,以及数据库、维度、度量和数据挖掘模型。在ETL过程中,技术元数据为特定的任务定义了来源和目标、
2021-08-03 11:28:55
650
原创 Flink执行图
Flink 中的执行图可以分成四层:StreamGraph -> JobGraph ->ExecutionGraph-> 物理执行图①StreamGraph:是根据用户通过Stream API编写的代码生成的最初的图,用来表示程序的拓扑结构。②JobGraph:StreamGraph经过优化后生成了JobGraph,提交给JobManager 的数据结构。主要的优化为将多个符合条件的节点 chain 在一起作为一个节点③ExecutionGraph:JobManager 根据 Job
2021-07-27 11:21:41
795
原创 Flink任务占用资源slot数与subtask个数
slot个数与任务Stream的并行度相同即与任务中最大算子并行度相同,subtask个数为任务个数*并行度相加之和。其中这个任务并行度为2,占用slot个数为2,subtask共4个。假设TaskManager的slot个数为2,则上图并行子任务的分配如下如下图,并行度为4,占用slot个数为4,其中AB为一个任务链中,共12个subtask...
2021-07-27 11:21:01
1550
原创 Flink任务链Operator Chains
Flink 采用了一种称为任务链的优化技术,可以在特定条件下减少本地通信的开销。为了满足任务链的要求,必须将两个或多个算子设为相同的并行度,并通过本地转发(local forward)的方式进行连接,相同并行度的 one-to-one 操作,Flink 这样相连的算子链接在一起形成 一个task,原来的算子成为里面的 subtask,同而共享相同的slot。任务链的手动配置①全部不合成任务链env.disableOperatorChaining()②单个算子不参与合成任务链.disableCh
2021-07-27 11:19:48
582
原创 Flink算子之间数据传输形式
一个程序中,不同的算子可能具有不同的并行度。算子之间传输数据的形式可以是one-to-one (forwarding)的模式也可以是redistributing 的模式,具体是哪一种形式,取决于算子的种类:①One-to-one:stream维护着分区以及元素的顺序(比如source和map之间)。 这意味着map 算子的子任务看到的元素的个数以及顺序跟source算子的子任务生产的元素的个数、顺序相同。map、fliter、flatMap等算子都是one-to-one的 对应关系。②Redistri
2021-07-27 11:18:14
887
原创 Flink算子并行度与Stream并行度
一个特定算子的子任务(subtask)的个数被称之为其并行度(parallelism)。 一般情况下,一个流程序Stream的并行度,可以认为就是其所有算子中最大的并行度。
2021-07-27 11:17:27
404
原创 Flink的TaskManager与slot
Flink中每一个TaskManager都是一个 JVM 进程,它可能会在独立的线程上执行一个或多个subtask。为了控制一个TaskManager能接收多少个task,TaskManager通过task slot 来进行控制(一个TaskManager至少有一个task slot)。每个task slot表示TaskManager拥有资源的一个固定大小的子集 。假如一个 TaskManager 有三个slot,那么它会将其管理的内存分成三份给各个slot。资源slot化意味着一个 subtask 将不
2021-07-27 11:16:45
1228
原创 Flink任务提交流程
高层模式1.客户端提交应用2.分发器就会启动并将应用提交给一个JobManager3.JobManager向ResourceManager申请slots4.ResourceManager启动TaskManager5.TaskManager启动后向ResourceManager注册slots6.ResourceManager向TaskManager发出提供slot的指令7.TaskManager向JobManager提供slots8.JobManager在TaskManager提供的slot
2021-07-27 11:15:30
1266
原创 Flink运行时组件
Flink 运行时架构主要包括四个不同的组件:作业管理器(JobManager)、资源管理器(ResourceManager)、任务管理器(TaskManager), 以及分发器(Dispatcher)。作业管理器(JobManager)①控制一个应用程序执行的主进程,每个应用程序都会被不同JobManager 所控制执行。②JobManager会先接收到要执行的应用程序,这个应用程序会包括:逻辑数据流图(logical dataflow graph)、作业图 (JobGraph)、其它包、类、库资
2021-07-27 11:13:53
261
原创 flink在Standalone、Session Cluster、Per Job Cluster模式下提交任务
Standalone提交任务flink run -c com.dylan.wc.StreamWordCount -p 1 /usr/local/xxx.jar停止任务flink cancel jobid列举正在运行任务flink list列举正在全部任务flink list -aSession Cluster启动 yarn-session./yarn-session.sh -n 2 -s 2 -jm 1024 -tm 1024 -nm test -d其中:-n(–container
2021-07-21 22:18:32
753
1
原创 Flink生产环境设置并行度及优先级
(1)代码中设置①全局设置env. setParallelism (3)②算子设置map ((_,1)). setParallelism (3)(2)客户端CLI设置或webui直接输入①CLI提交任务run: 代表执行; c: 指定入口类; p: 并行度; host, post: 主机地址端口flink run -c com. dylan. Stream Wordcount -p 3 streamwordcount.jar --host host–port 7777②webui设置(
2021-07-21 11:40:11
1378
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人