1、业务需求及其痛点 公司诸多业务需求求其最新状态,例如车最新状态,桩最新状态,报告最新状态,检定任务最新状态,业务信息所有的明细数据保存至doris中,但是无法得知其最新状态集; 阶段1:根据GB4403、GB27930等协议,数据允许迟到7天,也就是说,通过sql进行计算的时候,必须取最近7天的数据,平均每天数据1000w条,就是单次计算大概在7000w条左右,通过创建最新状态表,然后通过sql取出结果集至状态表当中,通过调度框架dolphinscheduler对其进行调度;由于是最新状态其实时性比较高,往常是设定了1分钟的调度时间 痛点: :实时性根据调度时间确定,不管时间设定多短,都不够实时 :频繁重复计算浪费大量计算资源insertintothemonitorlateststatusselectvin,daqtime,province,city,district,odo,chastate,opmode,opstate,soc,curr,volt,lat,lngfrom(selectvin,daqtime,province,city,district,odo,chastate,opmode,opstate,soc,curr,volt,lat,lng,rownumber()over(partitionbyvinorderbydaqtimedesc)rofromodsmonitordatawheredaqtimedateformat(datasub(currentdate(),interval7day),Ymd00:00:00)andodo!0andprovince!unknown)t1wherero1; 阶段2: 痛点: :开发成本高,每张表都需要写一段程序 Mysql外表需求和痛点: 业务系统很多表结构一直存储在mysql当中,其中的大表(数据量大)都会同步至doris中,数据量较小的维表没必要同步至doris当中,可以通过外表的方式挂载到doris中,但是创建外表的步骤较为繁琐,只能一张张手动创建,另外mysql中表结构更改后,外表就需要重建 痛点: :外部表手动创建繁琐,如100张表全部手动创建 :mysql表结构更改就需要重新创建外表2、mysqltodoris结构图 工具实现上述优化,优点如下:shell编写极其轻量,开源即用纯sql语法开发成本0特别适用于当前业务场景简单配置实现全程自动化处理 架构图: mysqltodorisbinauto。shFlinkjob启动脚本createdoris。sh生成doris映射flink的建表语句createmysql。sh生成mysql映射flink的建表语句eauto。sh外部表执行脚本emysqltodoris。sh外部表建表语句生成脚本flinksql。shflinkjob语句生成脚本insertinto。shinsertinto语句生成脚本confdorisdoris。confdoris连接配置信息flink。confflink特殊配置项tablessink端的库名。表名emysqldoris。conf外部表连接信息doristables外部表库名。表名(自定义)mysql。conf外部表连接信息mysqltables源表库名。表名flinkflinkconfflink配置信息mysqlflink。confflink特殊配置项mysql。confmysql连接配置信息tablessource端的库名。表名libdoristoflink。shdoris映射flink表结构转换mysqltodoris。shmysql映射doris外表结构转换mysqltoflink。shmysql映射flink外表结构转换 代码流程: 1、获取建表语句fortablein(cat。。confemysqlmysqltablesgrepvawkF{print1})doechoshowcreatetable{table};mysqlhmysqlhosturootpmysqlpasswordpathdone 2、调整格式awkF{print2}pathawk!(NR2)awk{print0;}。。resulttmp111。sqlsedisng。。resulttmp111。sqlsednCREATETABLE,ENGINEp。。resulttmp111。sql。。resulttmp222。sqldeletetablesspecialstructsediCONd。。resulttmp222。sqlsediKEYd。。resulttmp222。sql 3、拼接doris信息sediENGINEa)ENGINEODBCCOMMENTODBCPROPERTIES(hostApacheDorisHostIp,port3306,userroot,passwordApacheDorisHostPassword,databaseApacheDorisDataBases,tableApacheDorisTables,driverMySQL,odbctypemysql);path 3、涉及组件介绍:FlinkCDC版本2。2。1DorisFlinkConnector版本:1。142。121。0。0FLink版本:1。14。5Hadoop版本:3。1。3doris版本:1。1。1mysqlodbc版本:5。3。13链接:https:pan。baidu。coms1eMML1KmVYa01SRQaGuwBQ提取码:yyds什么是CDC CDC是ChangeDataCapture变更数据获取的简称。 核心思想是,监测并捕获数据库的变动(包括数据或数据表的插入INSERT、更新UPDATE、删除DELETE等),将这些变更按发生的顺序完整记录下来,写入到消息中间件中以供其他服务进行订阅及消费。 CDC技术应用场景也非常广泛,包括:数据分发:将一个数据源分发给多个下游,常用于业务解耦、微服务。数据集成:将分散异构的数据源集成到数据仓库中,消除数据孤岛,便于后续的分析。数据迁移:常用于数据库备份、容灾等。什么是ApacheDoris ApacheDoris是一个现代化的MPP分析型数据库产品。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。ApacheDoris的分布式架构非常简洁,易于运维,并且可以支持10PB以上的超大数据集。 ApacheDoris可以满足多种数据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等。可以使数据分析工作更加简单高效!什么是DorisFlinkConnector FlinkDorisConnector是Doris社区为了方便用户使用Flink读写Doris数据表的一个扩展。实现了通过flink实时写入数据进入到doris的可能,FlinkDorisConnector之前,针对业务不规则数据,经常需要针对消息做规范处理,空值过滤等写入新的topic,然后再启动Routineload写入Doris。FlinkDorisConnector之后,flink可以直接读取kafka,直接写入doris。什么是DorisOnODBC ODBCExternalTableOfDoris提供了Doris通过数据库访问的标准接口(ODBC)来访问外部表,外部表省去了繁琐的数据导入工作,让Doris可以具有了访问各式数据库的能力,并借助Doris本身的OLAP的能力来解决外部表的数据分析问题:支持各种数据源接入Doris支持Doris与各种数据源中的表联合查询,进行更加复杂的分析操作通过insertinto将Doris执行的查询结果写入外部的数据源