源码学习(三)–Presto-分片数据获取

导读:上一节,我们提到了进行数据表的查询,最终要的无非两个步骤:找到数据位置读取数据、将数据根据schema信息进行组装形成表。那么,如何找到数据数据源的位置呢?或者准确的说是如何找到特定分片数据的位置呢?本节我们来分析涉及到数据位置的几个核心类。
(tips:关于Connector机制的梳理是以【presto-example-http】为例)
导读:上一节,我们提到了进行数据表的查询,最终要的无非两个步骤:找到数据位置读取数据、将数据根据schema信息进行组装形成表。那么,如何找到数据数据源的位置呢?或者准确的说是如何找到特定分片数据的位置呢?本节我们来分析涉及到数据位置的几个核心类。
(tips:关于Connector机制的梳理是以【presto-example-http】为例)
来源:DLab数据实验室
一、核心类
涉及到数据(分片)位置的核心类包括ExampleConfig、ExampleMetadata、ExampleSplitManager、ExampleSplit。
二、功能介绍
ExampleConfig这个类其实就是一个配置类,读取配置文件中的metadata地址,ExampleConfig会作为一个成员注入到ExampleMetadata中。ExampleMetadata主要通过ExampleClient来解析元数据信息。
这里我们重点先来看一下ExampleSplitManager类,这个类通过名字就可以看出来,是对数据源进行分片管理的。这个类最主要的是重新实现了getSplits方法,我们可以看到,他定义了一个 List<ConnectorSplit> splits = new ArrayList<>();,splits用来保存该数据源的多个分片,对于数据源到底有多少分片,可以通过table.getSources()获取到,这个是表达该表到底有多少个数据源分片,通过遍历将各个分片封装成分片对象ExampleSplit。

那个table.getSources是怎么获取到的呢,我们可以看这一行代码:
ExampleTable table = exampleClient.getTable(tableHandle.getSchemaName(), tableHandle.getTableName());
table是由exampleClient通过模式和表名查询到的,example Client为什么能够得到这些信息呢,我们下一节讲。这里我们继续来看ExampleSplit;
这个类其实就是一个分片对象,包含三个成员变量。在进行数据获取的时候,会通过这个分片对象来获取数据的uri地址,然后建立管道进行数据读取。

三、小结
以上就是关于数据位置的关键类,其实我们可以得到的关键词只有一个,就是URI,拿到了它就知道了数据的位置,就可以去该位置查询数据了。但是URI又是从哪里来的呢,上面我们提到了ExampleClient,下一节,我们就来介绍一下这个非常重要的类。
ps:PrestoSQL已经改名字了,叫Trino,地址 https://trino.io/

夜雨聆风
