源码学习(四)–Presto元数据获取

导读:上一节,我们讲完了数据位置,其实就可以通过该位置建立数据流管道来读取数据了,读取到的数据如何解析,就需要用到元数据信息了。元数据是非常重要的信息,它包含了数据的schema、table、column等信息,而且还包含了我们上一节提到的分片URI。本节来介绍一下关于元数据相关的核心类。
(tips:关于Connector机制的梳理是以【presto-example-http】为例,从本节开始,我们以Trino版本代码为准进行学习探讨)
导读:上一节,我们讲完了数据位置,其实就可以通过该位置建立数据流管道来读取数据了,读取到的数据如何解析,就需要用到元数据信息了。元数据是非常重要的信息,它包含了数据的schema、table、column等信息,而且还包含了我们上一节提到的分片URI。本节来介绍一下关于元数据相关的核心类。
(tips:关于Connector机制的梳理是以【presto-example-http】为例,从本节开始,我们以Trino版本代码为准进行学习探讨)
来源:DLab数据实验室
核心类
与元数据相关的核心类有ExampleMetadata、ExampleClient以及ExampleConfig。
首先是ExampleConfig,这个类其实就是从presto-server-main/etc/catalog/example.properties中获取metadata-uri变量配置信息的作用,这样就得到了元信息资源的位置;

然后,在Example Client中将这个配置信息进行了解析,存入了Supplier<Map<String, Map<String, ExampleTable>>> schemas中;Suppliers.memoize方法其实就是解析json配置文件然后存到schemas的过程;

有了schemas,就可以获取到任何的元数据信息了,例如下面几个获取Schama Name、tableName以及table的例子;

进而,有了前面的铺垫,ExampleMetadata其实就只需要利用Example Client类来构造Metadata的各个信息就好了。从下面的代码就可以看到,ExampleMetadata主要就依靠exampleClient来协助其实现各种元数据的获取;

总结
到这一步,其实就已经拿到了元数据信息,可以知道关于数据库、表以及列的任何信息。这也为最后一步,将数据与列信息进行映射得到结果表打下了基础。下一期,我们就来看读取到的数据是如何与元信息进行匹配形成我们看到的结果表的。
夜雨聆风
