00:00
那关于表和硫之间的转换,我们讲了一种,那就是把一个表table转换成硫,Data stream进行打印输出,那当然了,表能转换成流,流当然就能转换成表。其实前面我们的这个简单上手的案例里边啊,一开始为了跟之前的data stream vpi做一个衔接,我们直接就是把一个data stream。一个硫转换成了表,那我们看到这里调用的方法呢,跟后边的to data stream转换成硫的过程刚好相反,我们是from data,哎,那就是调用当前表环境的from data stream方法,把一个流data stream传进去,作为参数传进去,然后得到的就是一个table对象了。那在这里我们其实发现啊,我们并没有针对当前的这个表里边的字段名称,它的表结构进行各种各样的定义,诶,那对应的这个表结构到底是什么样的呢?哎,就像我们去定义一个连接器表的时候,你肯定是啊,Create table,然后你得指明每一个字段名称是什么,它的数据类型是什么,这才是一个完整的表嘛,那现在你直接从流里边转换过来的表到底是什么样子呢?哎,其实很容易想到啊,我们当前的这个流,它本身里边的数据类型是什么呢?
01:17
哎,就是英文的样例类的对象嘛,那对于这样一个样例类本身里边就有每个字段的定义以及数据类型的声明,所以呢,哎,这就对应着我们表结构的定义,直接把它转换过来就可以了,Event样例类里边的每一个字段名称,就是我们表里边的每一个列的字段名称啊,那每一个字段对应的类型跟这里边的定义的表结构里面定义的类型也是完全一样的,直接拿过来用就可以。所以这种方式可以说是非常的简单直接啊,如果说我们对于data stream API还是更加熟悉一点的话,先去创建一个流data stream,然后把它转换成表啊,其实也是非常简单的啊,那如果我们点到这个源码里边的话啊,其实可以看到from data stream这个方法啊,它其实有不同的传参方式。
02:05
最简单的当然就是里边直接传一个data stream啊,就一个参数啊,那另外呢,后面还可以跟上,哎,当前指定的一个Che,当前的表结构也可以单独指定啊,这个是完全没有问题的,那这个我们就不去详细说了啊,另外比较有趣的一个重写的方式是我们看下面还有一个from data string,它可以怎么样呢?首先第一个参数传一个data three,这个肯定没问题啊,把流转换成表,后边还可以跟一个可变参数。一个expression啊,就是传各种各样的表达式,指定当前表里面的字段名称,它是F。这是什么意思呢?哎,这个我们就不在代码里面再去详细写了啊,我们直接看一下这里的事例就可以看到了啊,就是我们在定义的时候,可以后边直接追加上很多个列的名称的定义啊,那这就表示什么意思呢?比方说啊,我们from the stream,把这个even stream要进行转换成表的一种转换,那转换成的表里边到底有哪些字段呢?诶,我们在这儿可以单独去做提取,比如说。
03:12
指定了time stamp和URL,那就相当于是只从这个数据流里边提取time stamp url2个字段,然后作为我们结果表里边的属性字段,啊,这就相当于是我们直接做了这个流到表的转换之后呢,还做了一个简单的map操作嘛,或者说基于table的一个select操作。所以这种定义方式可以说就更加的灵活了啊,我们在定义的过程当中,不光是可以按照我们当前数据流里边的样例类的这个格式啊,对应的这个结构去定义表的结构啊,也可以自己再去做一些调整和转换,那另外我们知道在这个表环境里边有一些是关键字,像这个time STEM啊,那我们往往需要去做一个改名,换一个字段名,那怎么改呢?非常简单,当前是一个expression嘛,一个表达式嘛,直接调一个点S方法,那就相当于把它改了一个名字了,就叫做T了,所以这个都是非常常见的啊,流跟表之间进行转换的方法啊,这是最常见的一种,就是直接调用from data stream。
04:23
然后另外呢,我们还需要讲另外一种方式,就是可以调用create temper review方法,诶这个之前我们说过啊,这在什么地方曾经出现过呢?那就是创建表的时候,我们说可以创建连接器表,也可以创建一个虚拟表,创建虚拟表的时候调的不就是create temple review吗?啊,那当时创建的时候是注册一个表环境里边的一张表,那后边跟第二个参数就是一个table对象。那我们现在表和流进行转换的时候,怎么又去调用一个create temple review呢?哎,这里注意传参就不一样了,传参同样第一个参数还是指定当前表环境里边的表的名称,第二个参数呢?
05:06
不用传入一个table对象了,而是可以直接传入一个data stream。哎,那这样的话就相当于直接基于这个data stream,它不是转换成一个table的对象,而是直接注册在表环境里边了,接下来可以直接在CQ里面去用这张表。好啊,这也是流到表的一个转换,当然了,后边还可以传入多个对应的字段参数,指定当前我们到底要去提取哪些字段啊,这个顺序也可以不一样,另外还可以做一个重命名。这就是link里边啊,我们进行流和表转换的非常灵活的各种方式,当然了,一般使用的过程当中,可能我们也不用记那么多啊,一般我们就是用一个自己最熟悉的方式,比方说啊在这里啊。我最熟悉的方式有可能就是直接创建连接器表,然后接下来直接写CQ就完了,那这个其实就不涉及到流和表的转换,如果说诶我只涉及到最简单的转换的话,那我就直接from data stream啊,把这个流转换成一个table,转换成表,最后呢,再去to data stream或者to change stream转换成流去打印输出不就完了吗?
06:14
所以这里面我们会发现啊,既然是最后转换成硫的时候,可以to data stream,也可以to change log stream。那前面硫转换成表的时候。是不是除了from data streamam之外,另外还有一个from changelo stream呢?哎,真的是这样啊,啊,除了这个方法,还可以from changelo street,只不过这种方式呢?哎,那就是要将一个更新日志流转换成一个表。这个更新日志流呢,就会比较特殊一点,它里边这个数据流里边的数据类型啊,就必须是肉类型,肉类型我们知道是行嘛,这是link单独给我们定义的一种特殊的数据结构啊,可以理解成啊,就是我们一张表里边的每一行的这个数据,可以理解成一个不确定的多元组。
07:04
啊,那如果说这里我们要去调用这个from log stream,把一个更新日志流去进行转换的话,更新日志流里边的数据类型只能是肉,而且呢,每一个数据啊,每一行的这个数据还必须要指定它的更新类型,就是它还得有一个roll kind啊,什么叫roll kind呢?就是类似于之前我们在这个控制台打印输出的时候,前面这个到底是加I还是减U还是加U啊,这每条数据就相当于带了一个。追加的属性,这个属性就叫做肉看它的更新类型啊,所以我们在这个呃,测试的过程当中啊,一般不会那么膈应,专门定义这种类型的数据啊,一般如果说使用的时候呢,是连接器啊,直接就帮我们实现了,所以在应用当中直接应用是比较少的。这就是关于data stream流转换成表的过程。
我来说两句