00:00
那接下来我们看一下broker这种方式啊,那ER我们讲了,呃,Broker这个我们是编译了,并且安装启动的,而且在fe去注册了是吧?啊,那接下来我们就来尝试一下,我们去从HDFS读数据导入到Doris里边。啊,这个应该是很常用的,那一般它能支撑的场景是什么呢?哎,我们数据量那几十。到几百个G啊,这种数据量那个blocker是没有什么压力的啊。那我们了解一下它的一个基本原理,那在我们提交,也就是我们命令在哪提交,肯定是不是在MYSQL客户端呢,MYSQL客户端是不是连接了f fe啊,就像我们写circle的地方一样啊。那我们可能执行的对应的语法提交上去。这个时候fe我们说它的一个功能,一个是接收请求,第二一个是不是要生成一些计划,对吧,这里它也会生成对应的一个导入计划,并且呢,Fe本身是管理和维护原数据的,而且他也知道有几个be,对吧?啊,那这个时候fe会根据目前be的个数,还有文件的大小。
01:15
啊,将它切分。啊,比如说我一共有十个G的数据量,然后我的be可能有五个节点。那可能这个b fe啊,Fe知道这些信息,他就将这实际的工作量划划分成五个2G的,然后啊,每个be就负责同步两个G的数据就行了啊,相当于说fe是个指挥官啊。每个be只导一部分数据对吧?啊,就大家一起干啊,每人干一点,那在执行B在执行过程中会从broke拉数据,这也是为什么我们之前部署broker的时候建议什么呢?说在每一个be节点我们都去部署一个broker啊,但实际上你也不用考虑那么多,你只要每一台Doris的机器都部署个broker就行了啊,无所谓,那be他在。
02:10
导入拉取的过程中啊,他也会对数据进行一个什么呢?转换啊转换转换之后将数据导入系统啊,那这个转换就取决于我们创建的这个任务里边是可以去指定一些呃。格式的转换的啊,还有列的映射等等啊,它当然不是自己转换啊,是根据我们定义的一些规则来做转换。那最终每个be就跟小弟一样吭哧吭哧干活,但最终啊,是不是领导者去判断整个事情到底成不成,对吧?啊,那如果每一个be都是OK的,那最终fe是知道的,那这个时候他就认为本次导入是成功的,那我们也可以查询道,呃,它的一个导入状态啊,好,这是它的一个基本原理,那么再聊聊它的一个基本语法。
03:05
基本语法也比较简单啊,就这么写,你把它理解成一个特殊的思口语法就可以了,这也是在MYS狗客户端去写的一个东西啊。那我们看怎么写呢,肉。是不是一一个肉的开头,然后加一个label label是我们起的一个唯一标签啊,唯一标签你可以,嗯,就是一个标签嘛,啊,那这个标签这是我们起的,呃,库名点标签名之后呢,这里写一些描述信息,这个就是我们重点要写的,我们需要自己定义的一部分内容,再往后呢,要你既然是。通过broker。要用broke,你是不得知道broke的一些信息啊,要不然他怎么知道找谁呀,对吧?那我们在注册broke的时候,是不是起了一个broke的名字对吧?那当时起什么名字这里就用什么名字,那还可以加上一些broke的属性啊。
04:05
一些配置项也可以添加进来,比如说像什么超时时间啊等等啊。接下来是整体的一个属性配置,这个主要用来设定一些参数的,可以在beparties里面去指定啊,那我们刚才讲的最重要的,或者说写的比较多的可能是这一块啊,数据的一个描述信息,那这一块由什么组成呢?主要有这么几个。第一步啊,Data in是不是指定我要读的数据的位置?是吧,比如说你要读HDFS的文件,你是不是要指定我这个文件是HDFS协议,然后它的主机就IP,然后还有它的端口,还有它的路径啊,对吧。这个文件的路径啊,你要指定后面呢,还可以什么取反啊,中括号是可选的嘛,你可以写可不写,看你需不需要啊,那into table,这是一定要写的,插入到Doris的哪一张表,这个是Doris的表明。
05:11
啊Doris,然后呢,可以指定插入到哪一个分区。对吧,这分区字段还有呢,可以指定一个列的分隔符。列的分隔符。还可以指定列的一个映射关系啊,还有什么过滤条件。啊,设置的一些参数啊等等。主要是这个,那我们后面呢,就以一个。具体的来看啊。那么还是扫一眼这里啊,Label刚才讲了这是一个什么啊,我把它截个图啊。来。啊,这个label是什么?导入任务的标识。
06:00
唯一的标签,相当于说给这个导入任路起个名字啊啊指定在这个位置。有了标签你才能知道你要查查哪一个导入任务,我们可以知道导入任务肯定不不能说只能有一个在执行吧,我可能有多个导入任务,那怎么区分,就是用标签名啊,这个知道就行,而且呢,有一个用法,就强烈推荐同一批次数据使用相同的标签。那这样的话,它会实现一个精准一次,就是说它不会出现重复啊,你多次导入标签一样,同一批数据它不会啊重复保存下来啊能够保证。At most once。啊,那再看看一些具体的用法啊,数据描述这一块啊,也就是这里。啊,就也就是这里啊来看一下,首先看一下一个broke load任务,它是可以支持多表导入,那多表导入怎么写呢?其实很简单,就是这个数据描述写多个就行了。
07:11
一个数据描述模块代表了一个导入task啊,一个一个一对于一张表的导入吧,啊,那如果你想在一次肉的任务里边。同时导入多张表可以,那每张表写一个数据描述就可以了,你写多个就行了啊,写多个这种数据描述啊就OK了。另外一个叫negative,就是我们刚才讲的这里啊。我刚才就简单讲了,它是取反对吧,那什么叫取反呢?来我们看一下啊,当数据表中聚合列的类型都为上类型时,希望撤销某一批导入的数据,什么叫撤销啊?比如说我有一个字段,呃,它的值都是一吧,啊这样咱们好理解对吧,那我第一批次,呃,原先。
08:01
第一批次已经导入进来了,是然后呢,是它是some对不对,那最终它是不是会做预聚合,聚合完这个。聚合列的值是不是一个三呢?好,现在我再导入第二批次的数据,比如说有两条,那这边是被聚合成五了呀,好,那什么叫取反,什么叫撤销呢?哎,就是说我第二批次的数据,我不想让它聚合进去,这批数据我不要了,这不是我想要的,我导错了,那既然你导错了,如果是明细数据,我们是不是直接删掉就行,但问题我们现在是一个什么sum类型的聚合?那聚合是不是得从聚合结果把它的值一一给扣掉才可以啊?那但是这边只存储了一个结果值对不对,对于Doris表来讲,存了一个五这个数字,你怎么知道要减一再减一啊,这个时候就可以怎么办呢?你把这批数据。再导入一次,并且指定,为什么呢?Negative。
09:02
表示这批数据我不是用来导入的,我是用来对冲的,对吧,将原先导入的这两条一一把它对冲掉啊,那在这个时候Doris看到negative就会执行什么两条数据嘛,对吧,减一再减一。对吧,通过那个体结果又恢复到了什么,回复到了这批数据啊,没导入的时候的状态,这就是一个取反的意思啊,就消除之前的那批数据,将它对冲掉。好,还有呢,这是一个分区,这个很简单啊,带导入表的分区信息啊。必须。或者说一定要指定一个分区。一般导入都得指定分区啊。另外一个我们再往下看,是不是一个列的一个映射。
10:00
逆函数变换了。就是说我们前面讲的be在导入的过程中,它是不是会做一个纯,也就是说数据的转换操作,那它到底怎么转换呢?是它自动的吗?啊不是,它是根据我们定义的这个映射规则来做转换的啊,映射规则来做转换。再往下这个就是映射嘛,Set这个语法啊,这里。好,那这个是什么。过滤原始数据对吧。可以在数据执行这个映射转换之前,先对原始数据做一个过滤啊。也就是说这个的执行就是这个这个地方,它的执行顺序是在执行力映射之前的啊,这个是过滤,这也是是be转换要做的事,对吧?啊过滤完之后才会去做一个映射。
11:09
好在最后这个where呢,是。这个V过滤条件指的是什么?过滤已经完成转换的数据啊,就是be已经呃。拿拿到数据转换好了,那这些数据再进一步的过滤掉啊,是这样,它它这这个两个地方的作用地方不一样啊,这个是原数据。这个是已经拿到的数据啊,这个是已经拿到的数据进行过滤。另外我们再聊一聊一个什么呢?啊,就这个东西,这个东西就是导入作业的一个参数,对吧,我们说properties可以去指定一个参数,那这个参数主要有什么,我们简单看一下啊。
12:01
一个叫time up超时。导入作业的超时时间,对吧?你不能太慢,我一直忍你,我还能给你一个deadline。而且它默认呢是四个小时啊,这个值大家就是了解一下,如果说你一个数据量特别大,性能也不行,达到了四个小时,它就显示失败了,因为超时了,这个时候你就应该去调整你的这个导入配置啊,该扩容扩容该怎么样怎么样啊。那怎么去评估呢?啊,这边咱们也给出了一个案例啊,咱们还是讲一下吧,比如说你总的文件大小,比如说有100兆啊,咱们以一个小例子来讲啊,你要导入数据100兆,然后你这个集群的最慢导入速度,比如说是1K。每秒哈,那你就是用总文件除以最慢速度算一下,你最如果一直用最慢速度导需要多长时间对吧,那差不多是十。
13:07
10万吧啊,是不是得10万秒啊。对吧,我们举个例子,那比如说我们超时时间是四小时,四小时我们大概就是四一每小时60分钟,每分钟60秒,三千六乘以四。啊,三千六乘以四也就1万多吧,对吧,这个是不是一万多啊,咱们不用去算具体值啊,一万多一万多秒啊,这是默认的超值时间,好,我把它框起来啊,好再往后总文件大小乘以带导入的表及相关roll up表的个数。再除以十乘以,导入并发数。十是什么意思呢?十表示broke的速度上限啊,这是一个上限值是多少?十兆每秒?对于单个来讲啊,单个来讲,那导入的并发数每个每个都是上限都是十,如果同时有三个一起干活,是是不是相当于说每秒最高能达到30兆每秒是吧?那这个你再一算,然后去评估怎么调。
14:17
对吧,主要调哪一个呢?你这三个值有你是不是调中间这个四个小时去调一下就好了,这个是我们tie out一个调的方式啊,咱们这边就相当于说再呃聊两句,好再看一下它的其他配置项最大过滤。的一个什么容忍率,默认呢,是零容忍。取值范围是零到一啊,错误率超过该值则导入失败,一就是百分百嘛,对吧,只不过是把它变成小数点的形式啊。就错误率啊,零容忍,就是任何一条数据都不能出错啊,不能导入出错啊,那比如说你呃,容忍率改成百分之,呃改成0.1。
15:04
那就是比如说我导入100条数据啊,只要有十条是失败的,那我就认认为这个任务失败的啊。好,还有一个导入的内存限制,默认两个G啊,调这个参数就行,那我们写的时候不是写2G这样子,它单位是字节,你要换算一下啊,填这个数字,还有一个叫严格模式。严格模式就是也是在这个属性里面写mode,把它。设为处就是开启默认了严格模式是不会开的啊,它什么叫严格模式啊,列类型的转换进行严格过滤。啊,严格过滤。比如说。呃,什么叫错误数据呢?就看这句话就行了,原始数据不为空,在我映射完之后截变成了空值,那这个就是一个错误数据,这个不要啊,对吧,如果开启严格模式,那就不行啊。
16:13
如果某一列由函数变换生成。对其不产生影响,什么意思啊,就是我们在sat的这里,你看怎么写K1。是,这个是Doris的字段名F1是表示一个函数啊,然后中间填的是对原数据。啊,数据源的那个某一列,我要做什么处理啊。用什么变换?执行什么操作?是原先呃原始的这个劣势包含范围限制,比如说Dis这种是不是有限制对吧,比如说原始数据为呃这种呢。是不会去被严格模式限制啊。其实这里个你就是碰到问题了,再回头翻一翻,是不是触发,呃,是不是这几个问题啊,还有一个叫合并类型数据合并类型有三种,一个是追加,一个是删除,一个是合并。
17:11
对吧,默认呢,就是这个end,默认就是一直追加嘛,一直追加嘛,就是你来多少条,我都是有多少条插入到Doris。Delete呢,表示删除与这批数据T相同的所有行,也就是说这批数据过来只不过是让你去比较我要删掉哪一些而已啊。那还有一个默。墨,这个是需要跟delete一起使用啊。墨表示说,呃,满足delete的我就删掉,否则呢我就openend,一般呢,我们用的话大部分是openend啊。好,这个没什么了啊。
18:00
相当于说把它的全部用法,每一个用法,每一个地方都给大家详细的展开讲一讲,那这样大家就比较清楚了,后面呢,我们就以一个具体的案例啊来体验一下。
我来说两句