Presto(Trino)数据匹配

2022-05-12 00:00:00 数据 专区 变量 信息 下图

上节讲了元数据信息的获取,通过元数据信息可以获得数据源的schema、table、column等信息,而且还包含了我们上一节提到的分片URI。我们上上节还讲了数据分片数据的获取,实际上我们现在已经到了数据查询的后一步--结果展示。结果展示其实就是将读取出来的数据与元数据中的schema进行match的过程。我们本节来看是如何进行match的。

这个过程涉及到一个非常重要的类ExampleRecordCursor。

我们先看【lines】变量,这是读取的字节流解析成的字符串迭代,下图是一个数据源文件,lines的数据组织其实就与下图所示,lines的每一行也对应下面数据文件的每一行;

【LINE_SPLITTER】变量,这个故名思义就是来进行数据分割的分隔符,因为源数据就是通过逗号进行分隔的,因此如果要想得到每一个field就需要将每一行数据按照逗号进行分隔。下图是运行时的一个状态,我们可以看到lines中的一行数据经过分割之后存入了【fields】变量中。

到这里其实就可以与列信息相对应了,例如想取列,假设列名为name,那么该列的相对列信息的偏移量为0,那我们相应的去fields中找到偏移量同为0的数据,即可得到name列的数据,这样其实就实现了列信息与数据的匹配。

到这里,我们其实已经把Presto(Trino)提供的HttpConnector示例进行了大致的分析。接下来我们将会进行核心的一些Connector的分析以及Presto(Trino)的内部运行机制的分享,而且在后面的分析中你会发现,像JdbcConnector(Mysql、Postgresql等数据库)这种复杂的连接器,其实遵循的原理与我们前面讲的这个Http Connector非常类似,只是相应的代码更多了一点,细节更复杂了一点。所以先把这个示例琢磨个差不多,准备开始下一个学习阶段吧~

原文链接:https://zhuanlan.zhihu.com/p/349878978

相关文章