00:00
接下来我们再来讲一个表跟data stream之间之间的转换操作啊,那其实如果说我们想要把一个呃表转换成data stream的话,刚才我们在做输出的时候,大家看到有一个操作啊,可以用影视的一个方法叫to stream,对吧,把它做一个转换,那这个其实还有更多的形式和更多需要思考的地方,这个我们先放到后边,我们先来给大家讲一讲data stream怎么样转换成一张表,其实这个更加简单,之前大家在做那个简单事例的时候已经看到了,我们可以怎么样呢?直接调环境里边的from data stream去生成一张表,对吧?而我前面把这个data stream先定义出来,然后呢,直接就是from data stream,然后把这个data stream传进去,得到的就是一张表啊,那有同学可能会说,那之前我们表从外部系统里边去读取这个数据的时候,不是还得定义格式,格式化的那个。
01:00
这个工具对吧,还得定义这个stemma,还得定义表结构,那你现在这个表结构是什么呢?诶,我们现在的表结构就是当前数据流里边的结构对吧?你现在是样例类sensor reading,那当然这里边的就是sensor reading里边的每一个字段,就是当前我们表里边每一行对应的那些字段,所以这里面相当于流和表天生就有这样的一个字段的表结构的对应关系,所以它的这个转换可以非常的简单,非常的直,直白对吧,直接一转就转换过来了,那这里边大家要注意啊,默认转换之后的这个sche码跟data stream里边的字段是一一对应的,而且就是顺序也是完全一样的,大家看到就是在这个,呃,我们在代码里边啊,代码里边最后实现的时候,你如果想把它转成另外的一个流二元组这个输出的话,这两个顺序是不能改的,哎,为什么?因为你前面这里边定义的时候,前面是ID,后面是temperature嘛。
02:00
那同样你前面如果取这个,就这里边我们取这个数的时,呃,就是定义这个字段的时候啊,这里边是ID temperature,呃,Time stamp temperature,然后你后边直接要把这个表如果要输出的时候也得按照这个顺序,对吧?你不能把这两个调换顺序,它是没有办法自己匹配的,就是我们最后输出的这一个三元组转化成流输出的时候,这个类型必须跟定义的这个表结构里边的数据类型是一一对应啊,那这里边就涉及到另外一个问题啊,就是假如说我想调整这个顺序可以吗?我想更加灵活一点定义可以吗?当然是可以的,大家看到在这个PPT里边给大家说了啊,就是我可以单独的把对应的这个字段跟在当前这个from data stream这个方法里边作为参数,跟在后边把这个字段列出来,然后就表示什么呢,就是表。
03:00
我当前这个sensor table里边的每一每一个字段,每一个列,对吧?它分别是我data stream里边的什么东西,到底是哪个哪个字段,哎,那比方说这里边ID temperature sta temperature啊,那有同学可能想,哎,那你如果要是这么说的话,它只有这样一种形式,就是这看起来也是位置一一对应的呀,我能不能用一种方法把它调整顺序呢?可以,完全可以,这就涉及到了就是数据类型和stemma的对应关系了。那对于这个data streamam里面的数据类型,我们可以有两种,跟这个table它的这个ski码对应关系可以有两种方式,一种叫做根据名称字段的名称去做一一对应,另外一种呢,叫做基于字段的位置去做对应。基于位置比较好理解,大家可以先看下面这个基于位置,基于位置是什么呢?就是我们说的这里边指定的这第一个字段。
04:00
它是表里边有一个字段叫做MYID对吧?然后它对应什么呢?就对应我当前data stream的那个央利类里面的第一个字段对应我的ID对吧?啊然后如果说第二个这个我叫TS的话,它就对应我后面第二个字段time step,那大家看这里边我按照位置去定义的话,是不是可以直接给它改名啊,啊就相当于这里边直接可以给他改名,而且呢,还可以就是我直接截取一部分,比方说第三个那个贪水舍不要了,扔掉了,这个是完全可以的,哎,所以可以有这样的一个灵活的操作方式啊啊,那有同学说这个也还是没有调换顺序啊啊怎么样可以调换顺序呢?基于名称就可以调换顺序,因为如果要是基于名称的话,表示什么,就表示我当前的这个字段就必须跟data stream里边定义好的那个字段一模一样,对吧?也就是我表里边的这个字段跟data stream里边的字段必须是一个名称,也就是说这里边你如果就是ID time stamp temperature。
05:00
这三个字段的话,你可以随便换顺序,换完顺序之后,这就是表里边STEM的顺序了,第一个字段,第二个字段就定了啊,那这里边有同学说,那你要这样的话,我不就不能再重命名了吗?也可以重命名,就是换个顺序的话,你要重命名的话加一个S,比方说我嫌这个太长对吧?啊,这个time Sam,我就as ts,然后ID as my ID啊,那time不换的话,我们就放在后边啊,这是可以基于这种不同的方式去做,相当于就是说我们里边的这个表结构里边那个sIgMa啊,它字段的名称和类型都可以指定当前这个data stream里边的某一个字段,然后我们去做调整,这是关于data stream和和表的一个转换的过程,然后另外啊,这个不光是data stream可以跟table去做一个转换,那另外还有一个。
06:00
什么呢?大家还记得之前我们那个table分成两类,一种是所说的这个常规的表示table,另外还有一种呢,呃,叫view,对吧?Tempor review视图,那data stream和view能转换吗?啊,这里边就我们给大家看一下怎么样去创建一个临时视图,这个特别简单啊,就是直接调用table env的直接去调它的create temporary方法之前我们也见过,对吧?这里边呢,给两个参数,第一个参数是当前view的名字,就像我们那个表名一样,因为我们拿这个view来做操作的时候,就相当于是中间的一个虚拟表嘛,啊,所以它也是有一个表名,然后呢,还有一个直接把data作为第二个参数传进来,这就相当于直接把这个数据流data stream里边的按照它的那个定义好的,比方说我们这里的啊,样例类类型对吧,里边的那个数据结构,直接把它转换成当前view里边的对应的那些数据数据结构STEM。
07:00
把它定义出来,那或者呢,也可以像前面我们转换成table那样啊,这这里边是转换的过程当中,后边再跟上这个字段,按照名称或者按照位置去做一个对应的关系,这都是可以的,那另外呢,就还除了基于这个data stream直接去创建view,也可以基于table去创建view,对吧?啊,这个之前我们也是做过的,那这的话,这这个操作更更加的简单,就是你直接把这个view名称定义出来,把table传过来就完事了,然后大家要注意这个创建view的含义是什么呢?这其实就是在当前环境里边注册了一张这样的表,对吧?啊,所以有时候我们会干什么事儿,就是你想要把这个已经现成的一个table这样的一个实例,就是我们说的table类的这样的一个实例,要注册到环境里边的时候,可以直接调这个create temp review方法,这样的话我们就可以在CQ里边直接用了,因为你本身这个table。
08:00
的实力是只能在table API里面用,现在哎两边就可以相互转换啊,所以大家看啊,就是说table和view整体来讲的话就是一回事,几乎就大家可以认为是一回事啊,他们有这个转换的一个过程,那另外呢,就是跟data stream也可以做各种各样的转换,这就是关于data stream和表的转换。
我来说两句